Merge remote-tracking branch 'upstream/pull/4639'
This commit is contained in:
commit
d2688d4d63
6 changed files with 43 additions and 44 deletions
|
@ -10,7 +10,7 @@ class ApiAbility
|
|||
can :show, :version
|
||||
|
||||
if Settings.status != "database_offline"
|
||||
can [:show, :download, :query], Changeset
|
||||
can [:index, :show, :download], Changeset
|
||||
can [:index, :create, :feed, :show, :search], Note
|
||||
can :index, Tracepoint
|
||||
can [:index, :show], User
|
||||
|
|
|
@ -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 @@ module Api
|
|||
# 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.
|
||||
|
@ -144,45 +182,6 @@ module Api
|
|||
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.
|
||||
|
|
|
@ -25,7 +25,7 @@ OpenStreetMap::Application.routes.draw do
|
|||
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+/
|
||||
|
|
|
@ -51,11 +51,11 @@ module Api
|
|||
)
|
||||
assert_routing(
|
||||
{ :path => "/api/0.6/changesets", :method => :get },
|
||||
{ :controller => "api/changesets", :action => "query" }
|
||||
{ :controller => "api/changesets", :action => "index" }
|
||||
)
|
||||
assert_routing(
|
||||
{ :path => "/api/0.6/changesets.json", :method => :get },
|
||||
{ :controller => "api/changesets", :action => "query", :format => "json" }
|
||||
{ :controller => "api/changesets", :action => "index", :format => "json" }
|
||||
)
|
||||
end
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue