# 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
- user = User.find_by_display_name(params[:display_name], :conditions => {:visible => true})
-
- if user
- @display_name = user.display_name
- if not user.data_public? and @user != user
- @edits = nil
- render
- else
- conditions = cond_merge conditions, ['user_id = ?', user.id]
- 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)
+
+ if params[:display_name]
+ user = User.find_by_display_name(params[:display_name], :conditions => { :visible => true })
+
+ if user
+ if user.data_public? or user == @user
+ conditions = cond_merge conditions, ['user_id = ?', user.id]
+ else
+ conditions = cond_merge conditions, ['false']
+ end
+ elsif request.format == :html
+ @title = t 'user.no_such_user.title'
+ @not_found_user = params[:display_name]
+ render :template => 'user/no_such_user', :status => :not_found
end
- else
- @not_found_user = params[:display_name]
- render :template => 'user/no_such_user', :status => :not_found
end
- 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 = h(params['minlon']) + ',' + h(params['minlat']) + ',' + h(params['maxlon']) + ',' + h(params['maxlat'])
+
+ 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
+
+ if bbox
+ conditions = cond_merge conditions, conditions_bbox(bbox)
+ bbox = BoundingBox.from_s(bbox)
+ bbox_link = "<a href='#{url_for(:controller => "site", :action => "index", :minlon => bbox.min_lon, :minlat => bbox.min_lat, :maxlon => bbox.max_lon, :maxlat => bbox.max_lat, :box => "yes")}'>#{bbox.to_s}</a>"
+ end
+
+ @title = t 'changeset.list.title'
+
+ if user and bbox
+ @description = t 'changeset.list.description_user_bbox', :user => user.display_name, :bbox => bbox_link
+ elsif user
+ @description = t 'changeset.list.description_user', :user => user.display_name
+ elsif bbox
+ @description = t 'changeset.list.description_bbox', :bbox => bbox_link
else
- #TODO: fix bugs in location determination for history tab (and other tabs) then uncomment this redirect
- #redirect_to :action => 'list'
-
- # For now just render immediately, and skip the db
- render
- return
+ @description = t 'changeset.list.description'
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.
<%if showusername %>
<td class="<%= cl %> user">
<% if changeset.user.data_public? %>
- <%= link_to h(changeset.user.display_name), :controller => "changeset", :action => "list_user", :display_name => changeset.user.display_name %>
+ <%= link_to h(changeset.user.display_name), :controller => "changeset", :action => "list", :display_name => changeset.user.display_name %>
<% else %>
<i><%= t'changeset.changeset.anonymous' %></i>
<% end %>
<% if changeset.tags['comment'] %>
<%= h(changeset.tags['comment']) %>
<% else %>
- <i><%= t'changeset.changeset.no_comment' %></i>
+ <%= t'changeset.changeset.no_comment' %>
<% end %>
</td>
+<p>
<% current_page = @edit_pages.current_page %>
<%= t'changeset.changeset_paging_nav.showing_page' %>
<%
end
%>
+</p>
-<h1><%= t'changeset.list.recent_changes' %></h1>
-<p><%= t'changeset.list.recently_edited_changesets' %></p>
+<h1><%= @title %></h1>
+<p><%= @description %></p>
-<%= render :partial => 'changesets' %>
+<%= render :partial => 'changeset_paging_nav' %>
+<%= render :partial => 'changesets', :locals => { :showusername => !params.has_key?(:display_name) } %>
+<%= render :partial => 'changeset_paging_nav' %>
-<p><%= t'changeset.list.for_more_changesets' %></p>
-<br>
+<%= rss_link_to params.merge({ :format => :rss }) %>
+
+<% content_for :head do %>
+<%= auto_discovery_link_tag :atom, params.merge({ :format => :rss }) %>
+<% end %>
--- /dev/null
+xml.rss("version" => "2.0",
+ "xmlns:geo" => "http://www.w3.org/2003/01/geo/wgs84_pos#",
+ "xmlns:georss" => "http://www.georss.org/georss") do
+ xml.channel do
+ xml.title @title
+ xml.description @description
+ xml.link url_for(params.merge({ :only_path => false }))
+ xml.image do
+ xml.url "http://www.openstreetmap.org/images/mag_map-rss2.0.png"
+ xml.title "OpenStreetMap"
+ xml.width "100"
+ xml.height "100"
+ xml.link url_for(params.merge({ :only_path => false }))
+ end
+
+ for changeset in @edits
+ xml.item do
+ xml.title t('browse.changeset.title') + " " + h(changeset.id)
+ xml.link url_for(:controller => 'browse', :action => "changeset", :id => changeset.id, :only_path => false)
+ xml.guid url_for(:controller => 'browse', :action => "changeset", :id => changeset.id, :only_path => false)
+ if changeset.user.data_public?
+ xml.author changeset.user.display_name
+ end
+ if changeset.tags['comment']
+ xml.description changeset.tags['comment']
+ end
+ xml.pubDate changeset.created_at.to_s(:rfc822)
+ if changeset.user.data_public?
+ xml.comments url_for(:controller => "message", :action => "new", :id => changeset.user.id, :only_path => false)
+ end
+
+ unless changeset.min_lat.nil?
+ minlon = changeset.min_lon/GeoRecord::SCALE.to_f
+ minlat = changeset.min_lat/GeoRecord::SCALE.to_f
+ maxlon = changeset.max_lon/GeoRecord::SCALE.to_f
+ maxlat = changeset.max_lat/GeoRecord::SCALE.to_f
+
+ # See http://georss.org/Encodings#Geometry
+ lower_corner = "#{minlat} #{minlon}"
+ upper_corner = "#{maxlat} #{maxlon}"
+
+ xml.georss :box, lower_corner + " " + upper_corner
+ end
+ end
+ end
+ end
+end
+++ /dev/null
-<h1><%= t'changeset.list_bbox.history' %></h1>
-<%
-if @bbox!=nil
- minlon = @bbox[0]
- minlat = @bbox[1]
- maxlon = @bbox[2]
- maxlat = @bbox[3]
-
- %>
-<p>
-<%= t'changeset.list_bbox.changesets_within_the_area' %>
- (<a href='/?minlon=<%= minlon %>&minlat=<%= minlat %>&maxlon=<%= maxlon %>&maxlat=<%= maxlat %>&box=yes' title='<%= t'changeset.list_bbox.show_area_box' %>'><%= format("%0.3f",minlon) -%>,<%= format("%0.3f",minlat) -%>,<%= format("%0.3f",maxlon) -%>,<%= format("%0.3f",maxlat) -%></a>)
-
-</p>
-
-<% if @edits.nil? or @edits.empty? %>
-<p><b><%= t'changeset.list_bbox.no_changesets' %></b></p>
-<% else %>
-
-<%= render :partial => 'changeset_paging_nav' %>
-<%= render :partial => 'changesets' %>
-<%= render :partial => 'changeset_paging_nav' %>
-
-<p><%= t'changeset.list_bbox.all_changes_everywhere' , :recent_changes_link => link_to(t('changeset.list_bbox.recent_changes'), :controller => "browse", :action => "changesets") %> </p>
-
-<%
- end
-
-else
- #bbox is nil. happens if the user surfs to this page directly.
-%>
-
-<p><%= t'changeset.list_bbox.no_area_specified' %></p>
-<p><%= t'changeset.list_bbox.first_use_view', :view_tab_link => '<a href="/" title="' + t('changeset.list_bbox.view_the_map') + '">' + t('changeset.list_bbox.view_tab') + '</a>' %></p>
-<p><%= t'changeset.list_bbox.alternatively_view', :recent_changes_link => link_to(t('changeset.list_bbox.recent_changes'), :controller => "browse", :action => "changesets") %></p>
-
-<%
-end
-%>
-<br>
-
+++ /dev/null
-<h1><%= t'changeset.list_user.edits_by_username', :username_link => link_to(h(@display_name), {:controller=>'user', :action=>'view', :display_name=>@display_name}) %></h1>
-
-<% if not @edits or @edits.empty? %>
-<p><b><%= t'changeset.list_user.no_visible_edits_by', :name => h(@display_name) %>.</b></p>
-<% else %>
-<%= render :partial => 'changeset_paging_nav' %>
-<%= render :partial => 'changesets', :locals => {:showusername => false} %>
-<%= render :partial => 'changeset_paging_nav' %>
-<% end %>
-
-<p><%= t'changeset.list_user.for_all_changes', :recent_changes_link => link_to(t('changeset.list_user.recent_changes'), :controller => "browse", :action => "changesets") %></p>
-<br>
-
traceclass = ''
viewclass = 'active' if params['controller'] == 'site' and params['action'] == 'index'
editclass = 'active' if params['controller'] == 'site' and params['action'] == 'edit'
- historyclass = 'active' if params['controller'] == 'changeset' and params['action'] == 'list_bbox'
+ historyclass = 'active' if params['controller'] == 'changeset' and params['action'] == 'list'
exportclass = 'active' if params['controller'] == 'site' and params['action'] == 'export'
traceclass = 'active' if params['controller'] == 'trace'
diaryclass = 'active' if params['controller'] == 'diary_entry'
%>
<li><%= link_to t('layouts.view'), {:controller => 'site', :action => 'index'}, {:id => 'viewanchor', :title => t('layouts.view_tooltip'), :class => viewclass} %></li>
<li><%= link_to t('layouts.edit'), {:controller => 'site', :action => 'edit'}, {:id => 'editanchor', :title => t('layouts.edit_tooltip'), :class => editclass} %></li>
- <li><%= link_to t('layouts.history'), {:controller => 'changeset', :action => 'list_bbox' }, {:id => 'historyanchor', :title => t('layouts.history_tooltip'), :class => historyclass} %></li>
+ <li><%= link_to t('layouts.history'), {:controller => 'changeset', :action => 'list' }, {:id => 'historyanchor', :title => t('layouts.history_tooltip'), :class => historyclass} %></li>
<% if params['controller'] == 'site' and (params['action'] == 'index' or params['action'] == 'export') %>
<li><%= link_to_remote t('layouts.export'), {:url => {:controller => 'export', :action => 'start'}}, {:id => 'exportanchor', :title => t('layouts.export_tooltip'), :class => exportclass, :href => url_for(:controller => 'site', :action => 'export')} %></li>
<% else %>
--- /dev/null
+xml.instruct!
+xml << yield
<!-- Displaying user's own profile page -->
<%= link_to t('user.view.my diary'), :controller => 'diary_entry', :action => 'list', :display_name => @user.display_name %>
| <%= link_to t('user.view.new diary entry'), :controller => 'diary_entry', :action => 'new', :display_name => @user.display_name %>
-| <%= link_to t('user.view.my edits'), :controller => 'changeset', :action => 'list_user', :display_name => @user.display_name %>
+| <%= link_to t('user.view.my edits'), :controller => 'changeset', :action => 'list', :display_name => @user.display_name %>
| <%= link_to t('user.view.my traces'), :controller => 'trace', :action=>'mine' %>
| <%= link_to t('user.view.my settings'), :controller => 'user', :action => 'account', :display_name => @user.display_name %>
<% else %>
<!-- Displaying another user's profile page -->
<%= link_to t('user.view.send message'), :controller => 'message', :action => 'new', :display_name => @this_user.display_name %>
| <%= link_to t('user.view.diary'), :controller => 'diary_entry', :action => 'list', :display_name => @this_user.display_name %>
-| <%= link_to t('user.view.edits'), :controller => 'changeset', :action => 'list_user', :display_name => @this_user.display_name %>
+| <%= link_to t('user.view.edits'), :controller => 'changeset', :action => 'list', :display_name => @this_user.display_name %>
| <%= link_to t('user.view.traces'), :controller => 'trace', :action => 'view', :display_name => @this_user.display_name %>
| <% if @user and @user.is_friends_with?(@this_user) %>
<%= link_to t('user.view.remove as friend'), :controller => 'user', :action => 'remove_friend', :display_name => @this_user.display_name %>
user: "User"
comment: "Comment"
area: "Area"
- list_bbox:
- history: "History"
- changesets_within_the_area: "Changesets within the area:"
- show_area_box: "show area box"
- no_changesets: "No changesets"
- all_changes_everywhere: "For all changes everywhere see {{recent_changes_link}}"
- recent_changes: "Recent Changes"
- no_area_specified: "No area specified"
- first_use_view: "First use the {{view_tab_link}} to pan and zoom to an area of interest, then click the history tab."
- view_the_map: "view the map"
- view_tab: "view tab"
- alternatively_view: "Alternatively, view all {{recent_changes_link}}"
list:
- recent_changes: "Recent Changes"
- recently_edited_changesets: "Recently edited changesets:"
- for_more_changesets: "For more changesets, select a user and view their edits, or see the editing 'history' of a specific area."
- list_user:
- edits_by_username: "Edits by {{username_link}}"
- no_visible_edits_by: "No visible edits by {{name}}."
- for_all_changes: "For changes by all users see {{recent_changes_link}}"
- recent_changes: "Recent Changes"
+ title: "Changesets"
+ description: "Recent edits"
+ description_user: "Recent edits by {{user}}"
+ description_bbox: "Recent edits within {{bbox}}"
+ description_user_bbox: "Recent edits by {{user}} within {{bbox}}"
diary_entry:
new:
title: New Diary Entry
map.connect '/browse/relation/:id/history', :controller => 'browse', :action => 'relation_history', :id => /\d+/
map.connect '/browse/changeset/:id', :controller => 'browse', :action => 'changeset', :id => /\d+/
map.connect '/browse/changesets', :controller => 'changeset', :action => 'list'
+ map.connect '/browse/changesets/rss', :controller => 'changeset', :action => 'list', :format => :rss
# web site
map.root :controller => 'site', :action => 'index'
map.connect '/', :controller => 'site', :action => 'index'
map.connect '/edit', :controller => 'site', :action => 'edit'
- map.connect '/history', :controller => 'changeset', :action => 'list_bbox'
+ map.connect '/history', :controller => 'changeset', :action => 'list'
+ map.connect '/history/rss', :controller => 'changeset', :action => 'list', :format => :rss
map.connect '/export', :controller => 'site', :action => 'export'
map.connect '/login', :controller => 'user', :action => 'login'
map.connect '/logout', :controller => 'user', :action => 'logout'
# user pages
map.connect '/user/:display_name', :controller => 'user', :action => 'view'
- map.connect '/user/:display_name/edits', :controller => 'changeset', :action => 'list_user'
+ map.connect '/user/:display_name/edits', :controller => 'changeset', :action => 'list'
+ map.connect '/user/:display_name/edits/rss', :controller => 'changeset', :action => 'list', :format =>:rss
map.connect '/user/:display_name/make_friend', :controller => 'user', :action => 'make_friend'
map.connect '/user/:display_name/remove_friend', :controller => 'user', :action => 'remove_friend'
map.connect '/user/:display_name/diary', :controller => 'diary_entry', :action => 'list'
end
def self.from_s(s)
- BoundingBox.new(s.split(/,/))
+ BoundingBox.new(*s.split(/,/))
end
def min_lon
def test_list
changesets = Changeset.find(:all, :order => "created_at DESC", :conditions => ['min_lat IS NOT NULL'], :limit=> 20)
assert changesets.size <= 20
- get :list
+ get :list, {:format => "rhtml"}
assert_response :success
assert_template "list"
# Now check that all 20 (or however many were returned) changesets are in the html
- assert_select "h1", :text => "Recent Changes", :count => 1
+ assert_select "h1", :text => "Changesets", :count => 1
assert_select "table[id='changeset_list'] tr", :count => changesets.size + 1
changesets.each do |changeset|
# FIXME this test needs rewriting - test for table contents
# Checks the display of the user changesets listing
def test_list_user
user = users(:public_user)
- get :list_user, {:display_name => user.display_name}
+ get :list, {:format => "rhtml", :display_name => user.display_name}
assert_response :success
- assert_template 'list_user'
+ assert_template "list"
## FIXME need to add more checks to see which if edits are actually shown if your data is public
end
##
# Check the not found of the list user changesets
def test_list_user_not_found
- get :list_user, {:display_name => "Some random user"}
+ get :list, {:format => "rhtml", :display_name => "Some random user"}
assert_response :not_found
assert_template 'user/no_such_user'
end