Implement /user/$user/edits/rss, partially solves #1737
This commit is contained in:
parent
991c940138
commit
011237c2c5
5 changed files with 84 additions and 1 deletions
|
@ -1,7 +1,7 @@
|
||||||
# The ChangesetController is the RESTful interface to Changeset objects
|
# The ChangesetController is the RESTful interface to Changeset objects
|
||||||
|
|
||||||
class ChangesetController < ApplicationController
|
class ChangesetController < ApplicationController
|
||||||
layout 'site'
|
layout 'site', :except => :rss
|
||||||
require 'xml/libxml'
|
require 'xml/libxml'
|
||||||
|
|
||||||
before_filter :authorize_web, :only => [:list, :list_user, :list_bbox]
|
before_filter :authorize_web, :only => [:list, :list_user, :list_bbox]
|
||||||
|
@ -299,6 +299,31 @@ class ChangesetController < ApplicationController
|
||||||
end
|
end
|
||||||
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
|
# list changesets in a bbox
|
||||||
def list_bbox
|
def list_bbox
|
||||||
|
|
|
@ -11,3 +11,8 @@
|
||||||
<p><%= t'changeset.list_user.for_all_changes', :recent_changes_link => link_to(t('changeset.list_user.recent_changes'), :controller => "browse", :action => "changesets") %></p>
|
<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>
|
<br>
|
||||||
|
|
||||||
|
<%= rss_link_to :action => 'rss' %>
|
||||||
|
|
||||||
|
<% content_for :head do %>
|
||||||
|
<%= auto_discovery_link_tag :atom, :action => 'rss' %>
|
||||||
|
<% end %>
|
||||||
|
|
49
app/views/changeset/rss.rxml
Normal file
49
app/views/changeset/rss.rxml
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
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
|
||||||
|
|
|
@ -238,6 +238,9 @@ en:
|
||||||
no_visible_edits_by: "No visible edits by {{name}}."
|
no_visible_edits_by: "No visible edits by {{name}}."
|
||||||
for_all_changes: "For changes by all users see {{recent_changes_link}}"
|
for_all_changes: "For changes by all users see {{recent_changes_link}}"
|
||||||
recent_changes: "Recent Changes"
|
recent_changes: "Recent Changes"
|
||||||
|
list_user_rss:
|
||||||
|
title: "Edits by {{user}}"
|
||||||
|
description: "Recent changesets by {{user}}"
|
||||||
diary_entry:
|
diary_entry:
|
||||||
new:
|
new:
|
||||||
title: New Diary Entry
|
title: New Diary Entry
|
||||||
|
|
|
@ -143,6 +143,7 @@ ActionController::Routing::Routes.draw do |map|
|
||||||
# user pages
|
# user pages
|
||||||
map.connect '/user/:display_name', :controller => 'user', :action => 'view'
|
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_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/make_friend', :controller => 'user', :action => 'make_friend'
|
||||||
map.connect '/user/:display_name/remove_friend', :controller => 'user', :action => 'remove_friend'
|
map.connect '/user/:display_name/remove_friend', :controller => 'user', :action => 'remove_friend'
|
||||||
map.connect '/user/:display_name/diary', :controller => 'diary_entry', :action => 'list'
|
map.connect '/user/:display_name/diary', :controller => 'diary_entry', :action => 'list'
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue