Add 'history' tab + Move 'recent changes' changeset list to re-use the same _changeset.rhtml partial
This commit is contained in:
parent
231bdf66cd
commit
afe8dd51ec
12 changed files with 182 additions and 41 deletions
|
@ -7,9 +7,7 @@ class BrowseController < ApplicationController
|
|||
def start
|
||||
end
|
||||
|
||||
def index
|
||||
@changesets = Changeset.find(:all, :order => "closed_at DESC", :conditions => ['closed_at < ?', DateTime.now], :limit=> 20)
|
||||
end
|
||||
|
||||
|
||||
def relation
|
||||
begin
|
||||
|
|
|
@ -238,6 +238,7 @@ class ChangesetController < ApplicationController
|
|||
conditions = cond_merge conditions, conditions_user(params['user'])
|
||||
conditions = cond_merge conditions, conditions_time(params['time'])
|
||||
conditions = cond_merge conditions, conditions_open(params['open'])
|
||||
conditions = cond_merge conditions, conditions_closed(params['closed'])
|
||||
|
||||
# create the results document
|
||||
results = OSM::API.new.get_xml_doc
|
||||
|
@ -291,21 +292,71 @@ class ChangesetController < ApplicationController
|
|||
render ex.render_opts
|
||||
end
|
||||
|
||||
|
||||
|
||||
##
|
||||
# list edits belonging to a user
|
||||
# list edits (open changesets) in reverse chronological order
|
||||
def list
|
||||
conditions = conditions_nonempty
|
||||
|
||||
|
||||
# @changesets = Changeset.find(:all, :order => "closed_at DESC", :conditions => ['closed_at < ?', DateTime.now], :limit=> 20)
|
||||
|
||||
|
||||
#@edit_pages, @edits = paginate(:changesets,
|
||||
# :include => [:user, :changeset_tags],
|
||||
# :conditions => conditions,
|
||||
# :order => "changesets.created_at DESC",
|
||||
# :per_page => 20)
|
||||
#
|
||||
|
||||
@edits = Changeset.find(:all,
|
||||
:order => "changesets.created_at DESC",
|
||||
:conditions => conditions,
|
||||
:limit => 20)
|
||||
|
||||
end
|
||||
|
||||
##
|
||||
# list edits (changesets) belonging to a user
|
||||
def list_user
|
||||
#find user by display name
|
||||
user = User.find(:first, :conditions => [ "visible = ? and display_name = ?", true, params[:display_name]])
|
||||
|
||||
conditions = conditions_user(user.id);
|
||||
conditions = cond_merge conditions, conditions_nonempty
|
||||
@edit_pages, @edits = paginate(:changesets,
|
||||
:include => [:user, :changeset_tags],
|
||||
:conditions => ["changesets.user_id = ? AND min_lat IS NOT NULL", user.id],
|
||||
:conditions => conditions,
|
||||
:order => "changesets.created_at DESC",
|
||||
:per_page => 20)
|
||||
|
||||
@action = 'list'
|
||||
@display_name = user.display_name
|
||||
# FIXME needs rescues in here
|
||||
end
|
||||
|
||||
|
||||
##
|
||||
# list changesets in a bbox
|
||||
def list_bbox
|
||||
# support 'bbox' param or alternatively 'minlon', 'minlat' etc
|
||||
if params['bbox']
|
||||
bbox = params['bbox']
|
||||
elsif params['minlon'] and params['minlat'] and params['maxlon'] and params['maxlat']
|
||||
bbox = params['minlon'] + ',' + params['minlat'] + ',' + params['maxlon'] + ',' + params['maxlat']
|
||||
end
|
||||
|
||||
conditions = conditions_bbox(bbox);
|
||||
conditions = cond_merge conditions, conditions_nonempty
|
||||
|
||||
@edit_pages, @edits = paginate(:changesets,
|
||||
:include => [:user, :changeset_tags],
|
||||
:conditions => conditions,
|
||||
:order => "changesets.created_at DESC",
|
||||
:per_page => 20)
|
||||
|
||||
@bbox = sanitise_boundaries(bbox.split(/,/)) unless bbox==nil
|
||||
end
|
||||
|
||||
private
|
||||
#------------------------------------------------------------
|
||||
# utility functions below.
|
||||
|
@ -317,7 +368,7 @@ private
|
|||
if a and b
|
||||
a_str = a.shift
|
||||
b_str = b.shift
|
||||
return [ a_str + " and " + b_str ] + a + b
|
||||
return [ a_str + " AND " + b_str ] + a + b
|
||||
elsif a
|
||||
return a
|
||||
else b
|
||||
|
@ -366,7 +417,7 @@ private
|
|||
end
|
||||
|
||||
##
|
||||
# restrict changes to those during a particular time period
|
||||
# restrict changes to those closed during a particular time period
|
||||
def conditions_time(time)
|
||||
unless time.nil?
|
||||
# if there is a range, i.e: comma separated, then the first is
|
||||
|
@ -394,15 +445,28 @@ private
|
|||
end
|
||||
|
||||
##
|
||||
# restrict changes to those which are open
|
||||
#
|
||||
# at the moment this code assumes we're only interested in open
|
||||
# changesets and gives no facility to query closed changesets. this
|
||||
# would be reasonably simple to implement if anyone actually wants
|
||||
# it?
|
||||
# return changesets which are open (haven't been closed yet)
|
||||
# we do this by seeing if the 'closed at' time is in the future. Also if we've
|
||||
# hit the maximum number of changes then it counts as no longer open.
|
||||
# if parameter 'open' is nill then open and closed changsets are returned
|
||||
def conditions_open(open)
|
||||
return open.nil? ? nil : ['closed_at >= ? and num_changes <= ?',
|
||||
DateTime.now, Changeset::MAX_ELEMENTS]
|
||||
end
|
||||
|
||||
##
|
||||
# query changesets which are closed
|
||||
# ('closed at' time has passed or changes limit is hit)
|
||||
def conditions_closed(closed)
|
||||
return closed.nil? ? nil : ['closed_at < ? and num_changes > ?',
|
||||
DateTime.now, Changeset::MAX_ELEMENTS]
|
||||
end
|
||||
|
||||
##
|
||||
# eliminate empty changesets (where the bbox has not been set)
|
||||
# this should be applied to all changeset list displays
|
||||
def conditions_nonempty()
|
||||
return ['min_lat IS NOT NULL']
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -2,18 +2,24 @@ class ExportController < ApplicationController
|
|||
def start
|
||||
end
|
||||
|
||||
#When the user clicks 'Export' we redirect to a URL which generates the export download
|
||||
def finish
|
||||
bbox = BoundingBox.new(params[:minlon], params[:minlat], params[:maxlon], params[:maxlat])
|
||||
format = params[:format]
|
||||
|
||||
if format == "osm"
|
||||
#redirect to API map get
|
||||
redirect_to "http://api.openstreetmap.org/api/#{API_VERSION}/map?bbox=#{bbox}"
|
||||
|
||||
elsif format == "mapnik"
|
||||
#redirect to a special 'export' cgi script
|
||||
format = params[:mapnik_format]
|
||||
scale = params[:mapnik_scale]
|
||||
|
||||
redirect_to "http://tile.openstreetmap.org/cgi-bin/export?bbox=#{bbox}&scale=#{scale}&format=#{format}"
|
||||
|
||||
elsif format == "osmarender"
|
||||
#redirect to the t@h 'MapOf' service
|
||||
format = params[:osmarender_format]
|
||||
zoom = params[:osmarender_zoom].to_i
|
||||
width = bbox.slippy_width(zoom).to_i
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue