X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/8dae890a7645fba17a44d84f78be03d993e22ccb..d593d3d2dd6986aa07f5d5268d3e0d7b808590db:/app/controllers/changeset_controller.rb diff --git a/app/controllers/changeset_controller.rb b/app/controllers/changeset_controller.rb index 531ec17ee..56fab0fc4 100644 --- a/app/controllers/changeset_controller.rb +++ b/app/controllers/changeset_controller.rb @@ -7,12 +7,12 @@ class ChangesetController < ApplicationController skip_before_action :verify_authenticity_token, :except => [:list] before_action :authorize_web, :only => [:list, :feed, :comments_feed] before_action :set_locale, :only => [:list, :feed, :comments_feed] - before_action :authorize, :only => [:create, :update, :delete, :upload, :include, :close, :comment, :subscribe, :unsubscribe, :hide_comment, :unhide_comment] + before_action :authorize, :only => [:create, :update, :upload, :close, :comment, :subscribe, :unsubscribe, :hide_comment, :unhide_comment] before_action :require_moderator, :only => [:hide_comment, :unhide_comment] - before_action :require_allow_write_api, :only => [:create, :update, :delete, :upload, :include, :close, :comment, :subscribe, :unsubscribe, :hide_comment, :unhide_comment] - before_action :require_public_data, :only => [:create, :update, :delete, :upload, :include, :close, :comment, :subscribe, :unsubscribe] - before_action :check_api_writable, :only => [:create, :update, :delete, :upload, :include, :comment, :subscribe, :unsubscribe, :hide_comment, :unhide_comment] - before_action :check_api_readable, :except => [:create, :update, :delete, :upload, :download, :query, :list, :feed, :comment, :subscribe, :unsubscribe, :comments_feed] + before_action :require_allow_write_api, :only => [:create, :update, :upload, :close, :comment, :subscribe, :unsubscribe, :hide_comment, :unhide_comment] + before_action :require_public_data, :only => [:create, :update, :upload, :close, :comment, :subscribe, :unsubscribe] + before_action :check_api_writable, :only => [:create, :update, :upload, :comment, :subscribe, :unsubscribe, :hide_comment, :unhide_comment] + before_action :check_api_readable, :except => [:create, :update, :upload, :download, :query, :list, :feed, :comment, :subscribe, :unsubscribe, :comments_feed] before_action(:only => [:list, :feed, :comments_feed]) { |c| c.check_database_readable(true) } around_action :api_call_handle_error, :except => [:list, :feed, :comments_feed] around_action :api_call_timeout, :except => [:list, :feed, :comments_feed, :upload] @@ -28,7 +28,7 @@ class ChangesetController < ApplicationController cs = Changeset.from_xml(request.raw_post, true) # Assume that Changeset.from_xml has thrown an exception if there is an error parsing the xml - cs.user_id = current_user.id + cs.user = current_user cs.save_with_tags! # Subscribe user to changeset comments @@ -216,6 +216,12 @@ class ChangesetController < ApplicationController changesets = conditions_closed(changesets, params["closed"]) changesets = conditions_ids(changesets, params["changesets"]) + # sort and limit the changesets + changesets = changesets.order("created_at DESC").limit(100) + + # preload users, tags and comments + changesets = changesets.preload(:user, :changeset_tags, :comments) + # create the results document results = OSM::API.new.get_xml_doc @@ -290,9 +296,7 @@ class ChangesetController < ApplicationController changesets = changesets.where(:user_id => current_user.nearby) end - if @params[:max_id] - changesets = changesets.where("changesets.id <= ?", @params[:max_id]) - end + changesets = changesets.where("changesets.id <= ?", @params[:max_id]) if @params[:max_id] @edits = changesets.order("changesets.id DESC").limit(20).preload(:user, :changeset_tags, :comments) @@ -328,9 +332,7 @@ class ChangesetController < ApplicationController # Notify current subscribers of the new comment changeset.subscribers.visible.each do |user| - if current_user != user - Notifier.changeset_comment_notification(comment, user).deliver_now - end + Notifier.changeset_comment_notification(comment, user).deliver_now if current_user != user end # Add the commenter to the subscribers if necessary @@ -351,7 +353,6 @@ class ChangesetController < ApplicationController # Find the changeset and check it is valid changeset = Changeset.find(id) - raise OSM::APIChangesetNotYetClosedError, changeset if changeset.is_open? raise OSM::APIChangesetAlreadySubscribedError, changeset if changeset.subscribers.exists?(current_user.id) # Add the subscriber @@ -372,7 +373,6 @@ class ChangesetController < ApplicationController # Find the changeset and check it is valid changeset = Changeset.find(id) - raise OSM::APIChangesetNotYetClosedError, changeset if changeset.is_open? raise OSM::APIChangesetNotSubscribedError, changeset unless changeset.subscribers.exists?(current_user.id) # Remove the subscriber @@ -496,7 +496,7 @@ class ChangesetController < ApplicationController # changesets if they're non-public setup_user_auth - raise OSM::APINotFoundError if current_user.nil? || current_user.id != u.id + raise OSM::APINotFoundError if current_user.nil? || current_user != u end changesets.where(:user_id => u.id) @@ -507,7 +507,7 @@ class ChangesetController < ApplicationController # restrict changes to those closed during a particular time period def conditions_time(changesets, time) if time.nil? - return changesets + changesets elsif time.count(",") == 1 # if there is a range, i.e: comma separated, then the first is # low, second is high - same as with bounding boxes. @@ -516,13 +516,13 @@ class ChangesetController < ApplicationController times = time.split(/,/) raise OSM::APIBadUserInput, "bad time range" if times.size != 2 - from, to = times.collect { |t| DateTime.parse(t) } - return changesets.where("closed_at >= ? and created_at <= ?", from, to) + from, to = times.collect { |t| Time.parse(t) } + changesets.where("closed_at >= ? and created_at <= ?", from, to) else # if there is no comma, assume its a lower limit on time - return changesets.where("closed_at >= ?", DateTime.parse(time)) + changesets.where("closed_at >= ?", Time.parse(time)) end - # stupid DateTime seems to throw both of these for bad parsing, so + # stupid Time seems to throw both of these for bad parsing, so # we have to catch both and ensure the correct code path is taken. rescue ArgumentError => ex raise OSM::APIBadUserInput, ex.message.to_s