From: Tom Hughes Date: Mon, 1 Apr 2024 17:37:27 +0000 (+0100) Subject: Merge remote-tracking branch 'upstream/pull/4639' X-Git-Tag: live~908 X-Git-Url: https://git.openstreetmap.org./rails.git/commitdiff_plain/d2688d4d632c32458e6efa053cf4f2b98ff188dc?hp=-c Merge remote-tracking branch 'upstream/pull/4639' --- d2688d4d632c32458e6efa053cf4f2b98ff188dc diff --combined app/controllers/api/changesets_controller.rb index 2bca8813a,6eeb66e82..616d3fdec --- a/app/controllers/api/changesets_controller.rb +++ b/app/controllers/api/changesets_controller.rb @@@ -3,7 -3,7 +3,7 @@@ module Api class ChangesetsController < ApiController before_action :check_api_writable, :only => [:create, :update, :upload, :subscribe, :unsubscribe] - before_action :check_api_readable, :except => [:create, :update, :upload, :download, :query, :subscribe, :unsubscribe] + before_action :check_api_readable, :except => [:index, :create, :update, :upload, :download, :subscribe, :unsubscribe] before_action :setup_user_auth, :only => [:show] before_action :authorize, :only => [:create, :update, :upload, :close, :subscribe, :unsubscribe] @@@ -18,6 -18,44 +18,44 @@@ # Helper methods for checking consistency include ConsistencyValidations + ## + # query changesets by bounding box, time, user or open/closed status. + def index + raise OSM::APIBadUserInput, "cannot use order=oldest with time" if params[:time] && params[:order] == "oldest" + + # find any bounding box + bbox = BoundingBox.from_bbox_params(params) if params["bbox"] + + # create the conditions that the user asked for. some or all of + # these may be nil. + changesets = Changeset.all + changesets = conditions_bbox(changesets, bbox) + changesets = conditions_user(changesets, params["user"], params["display_name"]) + changesets = conditions_time(changesets, params["time"]) + changesets = conditions_from_to(changesets, params["from"], params["to"]) + changesets = conditions_open(changesets, params["open"]) + changesets = conditions_closed(changesets, params["closed"]) + changesets = conditions_ids(changesets, params["changesets"]) + + # sort the changesets + changesets = if params[:order] == "oldest" + changesets.order(:created_at => :asc) + else + changesets.order(:created_at => :desc) + end + + # limit the result + changesets = changesets.limit(result_limit) + + # preload users, tags and comments, and render result + @changesets = changesets.preload(:user, :changeset_tags, :comments) + + respond_to do |format| + format.xml + format.json + end + end + ## # Return XML giving the basic info about the changeset. Does not # return anything about the nodes, ways and relations in the changeset. @@@ -28,6 -66,7 +66,6 @@@ @comments = @comments.unscope(:where => :visible) if params[:show_hidden_comments].presence && can?(:restore, ChangesetComment) @comments = @comments.includes(:author) end - render "changeset" respond_to do |format| format.xml @@@ -144,45 -183,6 +182,6 @@@ end end - ## - # query changesets by bounding box, time, user or open/closed status. - def query - raise OSM::APIBadUserInput, "cannot use order=oldest with time" if params[:time] && params[:order] == "oldest" - - # find any bounding box - bbox = BoundingBox.from_bbox_params(params) if params["bbox"] - - # create the conditions that the user asked for. some or all of - # these may be nil. - changesets = Changeset.all - changesets = conditions_bbox(changesets, bbox) - changesets = conditions_user(changesets, params["user"], params["display_name"]) - changesets = conditions_time(changesets, params["time"]) - changesets = conditions_from_to(changesets, params["from"], params["to"]) - changesets = conditions_open(changesets, params["open"]) - changesets = conditions_closed(changesets, params["closed"]) - changesets = conditions_ids(changesets, params["changesets"]) - - # sort the changesets - changesets = if params[:order] == "oldest" - changesets.order(:created_at => :asc) - else - changesets.order(:created_at => :desc) - end - - # limit the result - changesets = changesets.limit(result_limit) - - # preload users, tags and comments, and render result - @changesets = changesets.preload(:user, :changeset_tags, :comments) - render "changesets" - - respond_to do |format| - format.xml - format.json - end - end - ## # updates a changeset's tags. none of the changeset's attributes are # user-modifiable, so they will be ignored. @@@ -197,7 -197,7 +196,7 @@@ check_changeset_consistency(@changeset, current_user) @changeset.update_from(new_changeset, current_user) - render "changeset" + render "show" respond_to do |format| format.xml @@@ -223,7 -223,7 +222,7 @@@ # Return a copy of the updated changeset @changeset = changeset - render "changeset" + render "show" respond_to do |format| format.xml @@@ -249,7 -249,7 +248,7 @@@ # Return a copy of the updated changeset @changeset = changeset - render "changeset" + render "show" respond_to do |format| format.xml diff --combined config/routes.rb index d00664832,d7fc4627c..d1e4c74ae --- a/config/routes.rb +++ b/config/routes.rb @@@ -25,7 -25,7 +25,7 @@@ OpenStreetMap::Application.routes.draw post "changeset/:id/unsubscribe" => "changesets#unsubscribe", :as => :api_changeset_unsubscribe, :id => /\d+/ put "changeset/:id" => "changesets#update", :id => /\d+/ put "changeset/:id/close" => "changesets#close", :as => :changeset_close, :id => /\d+/ - get "changesets" => "changesets#query" + get "changesets" => "changesets#index" post "changeset/:id/comment" => "changeset_comments#create", :as => :changeset_comment, :id => /\d+/ post "changeset/comment/:id/hide" => "changeset_comments#destroy", :as => :changeset_comment_hide, :id => /\d+/ post "changeset/comment/:id/unhide" => "changeset_comments#restore", :as => :changeset_comment_unhide, :id => /\d+/ @@@ -236,8 -236,8 +236,8 @@@ get "/user/:display_name/diary/rss" => "diary_entries#rss", :defaults => { :format => :rss } get "/diary/:language/rss" => "diary_entries#rss", :defaults => { :format => :rss } get "/diary/rss" => "diary_entries#rss", :defaults => { :format => :rss } - get "/user/:display_name/diary/comments/:page" => "diary_entries#comments", :page => /[1-9][0-9]*/ - get "/user/:display_name/diary/comments/" => "diary_entries#comments", :as => :diary_comments + get "/user/:display_name/diary/comments/:page", :page => /[1-9][0-9]*/, :to => redirect(:path => "/user/%{display_name}/diary/comments") + get "/user/:display_name/diary/comments" => "diary_entries#comments", :as => :diary_comments get "/user/:display_name/diary" => "diary_entries#index" get "/diary/:language" => "diary_entries#index" scope "/user/:display_name" do