X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/14ac1babc2517320a2c90fa9b4ac36a5a6e68018..360d68ea5c756a8b784b425f1346eb333da2e3d2:/app/controllers/changeset_controller.rb diff --git a/app/controllers/changeset_controller.rb b/app/controllers/changeset_controller.rb index ba7cb0cbf..eaa87df7b 100644 --- a/app/controllers/changeset_controller.rb +++ b/app/controllers/changeset_controller.rb @@ -5,18 +5,18 @@ class ChangesetController < ApplicationController require 'xml/libxml' skip_before_filter :verify_authenticity_token, :except => [:list] - before_filter :authorize_web, :only => [:list, :feed] - before_filter :set_locale, :only => [:list, :feed] + before_filter :authorize_web, :only => [:list, :feed, :comments_feed] + before_filter :set_locale, :only => [:list, :feed, :comments_feed] before_filter :authorize, :only => [:create, :update, :delete, :upload, :include, :close, :comment, :subscribe, :unsubscribe, :hide_comment, :unhide_comment] before_filter :require_moderator, :only => [:hide_comment, :unhide_comment] before_filter :require_allow_write_api, :only => [:create, :update, :delete, :upload, :include, :close, :comment, :subscribe, :unsubscribe, :hide_comment, :unhide_comment] before_filter :require_public_data, :only => [:create, :update, :delete, :upload, :include, :close, :comment, :subscribe, :unsubscribe] before_filter :check_api_writable, :only => [:create, :update, :delete, :upload, :include, :comment, :subscribe, :unsubscribe, :hide_comment, :unhide_comment] before_filter :check_api_readable, :except => [:create, :update, :delete, :upload, :download, :query, :list, :feed, :comment, :subscribe, :unsubscribe, :comments_feed] - before_filter(:only => [:list, :feed]) { |c| c.check_database_readable(true) } + before_filter(:only => [:list, :feed, :comments_feed]) { |c| c.check_database_readable(true) } after_filter :compress_output - around_filter :api_call_handle_error, :except => [:list, :feed] - around_filter :web_timeout, :only => [:list, :feed] + around_filter :api_call_handle_error, :except => [:list, :feed, :comments_feed] + around_filter :web_timeout, :only => [:list, :feed, :comments_feed] # Helper methods for checking consistency include ConsistencyValidations @@ -327,27 +327,27 @@ class ChangesetController < ApplicationController raise OSM::APIChangesetNotYetClosedError.new(changeset) if changeset.is_open? # Add a comment to the changeset - attributes = { + comment = changeset.comments.create({ :changeset => changeset, :body => body, :author => @user - } - - comment = changeset.comments.create(attributes) + }) + # Notify current subscribers of the new comment changeset.subscribers.each do |user| if @user != user - Notifier.changeset_comment_notification(comment, user).deliver + Notifier.changeset_comment_notification(comment, user).deliver_now end end - changeset.subscribers << @user unless changeset.subscribers.exists?(@user) + # Add the commenter to the subscribers if necessary + changeset.subscribers << @user unless changeset.subscribers.exists?(@user.id) # Return a copy of the updated changeset render :text => changeset.to_xml.to_s, :content_type => "text/xml" end - ## + ## # Adds a subscriber to the changeset def subscribe # Check the arguments are sane @@ -359,16 +359,18 @@ class ChangesetController < ApplicationController # Find the changeset and check it is valid changeset = Changeset.find(id) raise OSM::APIChangesetNotYetClosedError.new(changeset) if changeset.is_open? - raise OSM::APIChangesetAlreadySubscribedError.new(changeset) if changeset.subscribers.exists?(@user) + raise OSM::APIChangesetAlreadySubscribedError.new(changeset) if changeset.subscribers.exists?(@user.id) + # Add the subscriber changeset.subscribers << @user + # Return a copy of the updated changeset render :text => changeset.to_xml.to_s, :content_type => "text/xml" end - ## + ## # Removes a subscriber from the changeset - def unsubscribe + def unsubscribe # Check the arguments are sane raise OSM::APIBadUserInput.new("No id was given") unless params[:id] @@ -378,15 +380,16 @@ class ChangesetController < ApplicationController # Find the changeset and check it is valid changeset = Changeset.find(id) raise OSM::APIChangesetNotYetClosedError.new(changeset) if changeset.is_open? - raise OSM::APIChangesetNotSubscribedError.new(changeset) unless changeset.subscribers.exists?(@user) + raise OSM::APIChangesetNotSubscribedError.new(changeset) unless changeset.subscribers.exists?(@user.id) + # Remove the subscriber changeset.subscribers.delete(@user) # Return a copy of the updated changeset render :text => changeset.to_xml.to_s, :content_type => "text/xml" end - ## + ## # Sets visible flag on comment to false def hide_comment # Check the arguments are sane @@ -396,16 +399,16 @@ class ChangesetController < ApplicationController id = params[:id].to_i # Find the changeset - @comment = ChangesetComment.find(id) - changeset = @comment.changeset + comment = ChangesetComment.find(id) - @comment.update(:visible => false) + # Hide the comment + comment.update(:visible => false) # Return a copy of the updated changeset - render :text => changeset.to_xml.to_s, :content_type => "text/xml" + render :text => comment.changeset.to_xml.to_s, :content_type => "text/xml" end - ## + ## # Sets visible flag on comment to true def unhide_comment # Check the arguments are sane @@ -415,13 +418,13 @@ class ChangesetController < ApplicationController id = params[:id].to_i # Find the changeset - @comment = ChangesetComment.find(id) - changeset = @comment.changeset + comment = ChangesetComment.find(id) - @comment.update :visible => true + # Unhide the comment + comment.update(:visible => true) # Return a copy of the updated changeset - render :text => changeset.to_xml.to_s, :content_type => "text/xml" + render :text => comment.changeset.to_xml.to_s, :content_type => "text/xml" end ## @@ -434,9 +437,10 @@ class ChangesetController < ApplicationController # Find the changeset changeset = Changeset.find(id) - # Find the comments we want to return + # Return comments for this changeset only @comments = changeset.comments.includes(:author, :changeset).limit(comments_limit) else + # Return comments @comments = ChangesetComment.includes(:author, :changeset).where(:visible => :true).order("created_at DESC").limit(comments_limit).preload(:changeset) end @@ -589,5 +593,4 @@ private 100 end end - end