# The ChangesetController is the RESTful interface to Changeset objects
class ChangesetController < ApplicationController
- layout 'site'
+ layout 'site', :except => :rss
require 'xml/libxml'
before_filter :authorize_web, :only => [:list, :list_user, :list_bbox]
render :template => 'user/no_such_user', :status => :not_found
end
end
+
+ ##
+ # list edits (changesets) belonging to a user
+ def rss
+ 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)
+ end
+ else
+ @not_found_user = params[:display_name]
+ render :template => 'user/no_such_user', :status => :not_found
+ end
+ end
##
# list changesets in a bbox
<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>
+<%= rss_link_to :action => 'rss' %>
+
+<% content_for :head do %>
+<%= auto_discovery_link_tag :atom, :action => 'rss' %>
+<% end %>
--- /dev/null
+xml.instruct!
+
+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 t('changeset.list_user_rss.title', :user => @display_name)
+ xml.description t('changeset.list_user_rss.description', :user => @display_name)
+ xml.link url_for(:controller => "user", :action => "edits", :id => @display_name, :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(:controller => "user", :action => "edits", :id => @display_name, :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)
+ xml.comments url_for(:controller => "message", :action => "new", :id => changeset.user.id, :only_path => false)
+
+ 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
+
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"
+ list_user_rss:
+ title: "Edits by {{user}}"
+ description: "Recent changesets by {{user}}"
diary_entry:
new:
title: New Diary Entry
# 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/rss', :controller => 'changeset', :action => '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'