]> git.openstreetmap.org Git - rails.git/blobdiff - app/controllers/api/changesets_controller.rb
Rename api changeset show template
[rails.git] / app / controllers / api / changesets_controller.rb
index b4e864f187d4e76d3552186ec6e3e94631f4b528..2bca8813a0f04ddee75c24b91e5f8ca4924f98d6 100644 (file)
@@ -2,10 +2,9 @@
 
 module Api
   class ChangesetsController < ApiController
-    require "xml/libxml"
-
     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 :setup_user_auth, :only => [:show]
     before_action :authorize, :only => [:create, :update, :upload, :close, :subscribe, :unsubscribe]
 
     authorize_resource
@@ -24,8 +23,11 @@ module Api
     # return anything about the nodes, ways and relations in the changeset.
     def show
       @changeset = Changeset.find(params[:id])
-      @include_discussion = params[:include_discussion].presence
-      render "changeset"
+      if params[:include_discussion].presence
+        @comments = @changeset.comments
+        @comments = @comments.unscope(:where => :visible) if params[:show_hidden_comments].presence && can?(:restore, ChangesetComment)
+        @comments = @comments.includes(:author)
+      end
 
       respond_to do |format|
         format.xml
@@ -35,8 +37,6 @@ module Api
 
     # Create a changeset from XML.
     def create
-      assert_method :put
-
       cs = Changeset.from_xml(request.raw_post, :create => true)
 
       # Assume that Changeset.from_xml has thrown an exception if there is an error parsing the xml
@@ -53,8 +53,6 @@ module Api
     # marks a changeset as closed. this may be called multiple times
     # on the same changeset, so is idempotent.
     def close
-      assert_method :put
-
       changeset = Changeset.find(params[:id])
       check_changeset_consistency(changeset, current_user)
 
@@ -80,12 +78,6 @@ module Api
     # Returns: a diffResult document, as described in
     # http://wiki.openstreetmap.org/wiki/OSM_Protocol_Version_0.6
     def upload
-      # only allow POST requests, as the upload method is most definitely
-      # not idempotent, as several uploads with placeholder IDs will have
-      # different side-effects.
-      # see http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.2
-      assert_method :post
-
       changeset = Changeset.find(params[:id])
       check_changeset_consistency(changeset, current_user)
 
@@ -125,13 +117,7 @@ module Api
       # almost sensible ordering available. this would be much nicer if
       # global (SVN-style) versioning were used - then that would be
       # unambiguous.
-      elements.sort! do |a, b|
-        if a.timestamp == b.timestamp
-          a.version <=> b.version
-        else
-          a.timestamp <=> b.timestamp
-        end
-      end
+      elements.sort_by! { |e| [e.timestamp, e.version] }
 
       # generate an output element for each operation. note: we avoid looking
       # at the history because it is simpler - but it would be more correct to
@@ -206,15 +192,12 @@ module Api
     #
     # after succesful update, returns the XML of the changeset.
     def update
-      # request *must* be a PUT.
-      assert_method :put
-
       @changeset = Changeset.find(params[:id])
       new_changeset = Changeset.from_xml(request.raw_post)
 
       check_changeset_consistency(@changeset, current_user)
       @changeset.update_from(new_changeset, current_user)
-      render "changeset"
+      render "show"
 
       respond_to do |format|
         format.xml
@@ -240,7 +223,7 @@ module Api
 
       # Return a copy of the updated changeset
       @changeset = changeset
-      render "changeset"
+      render "show"
 
       respond_to do |format|
         format.xml
@@ -266,7 +249,7 @@ module Api
 
       # Return a copy of the updated changeset
       @changeset = changeset
-      render "changeset"
+      render "show"
 
       respond_to do |format|
         format.xml