]> git.openstreetmap.org Git - rails.git/blobdiff - app/controllers/api/changeset_comments_controller.rb
Move the api methods from changeset_comments_controller into the api namespaced contr...
[rails.git] / app / controllers / api / changeset_comments_controller.rb
diff --git a/app/controllers/api/changeset_comments_controller.rb b/app/controllers/api/changeset_comments_controller.rb
new file mode 100644 (file)
index 0000000..6093f52
--- /dev/null
@@ -0,0 +1,85 @@
+module Api
+  class ChangesetCommentsController < ApplicationController
+    skip_before_action :verify_authenticity_token
+    before_action :authorize
+    before_action :api_deny_access_handler
+
+    authorize_resource
+
+    before_action :require_public_data, :only => [:create]
+    before_action :check_api_writable
+    before_action :check_api_readable, :except => [:create]
+    around_action :api_call_handle_error
+    around_action :api_call_timeout
+
+    ##
+    # Add a comment to a changeset
+    def create
+      # Check the arguments are sane
+      raise OSM::APIBadUserInput, "No id was given" unless params[:id]
+      raise OSM::APIBadUserInput, "No text was given" if params[:text].blank?
+
+      # Extract the arguments
+      id = params[:id].to_i
+      body = params[:text]
+
+      # Find the changeset and check it is valid
+      changeset = Changeset.find(id)
+      raise OSM::APIChangesetNotYetClosedError, changeset if changeset.is_open?
+
+      # Add a comment to the changeset
+      comment = changeset.comments.create(:changeset => changeset,
+                                          :body => body,
+                                          :author => current_user)
+
+      # Notify current subscribers of the new comment
+      changeset.subscribers.visible.each do |user|
+        Notifier.changeset_comment_notification(comment, user).deliver_later if current_user != user
+      end
+
+      # Add the commenter to the subscribers if necessary
+      changeset.subscribers << current_user unless changeset.subscribers.exists?(current_user.id)
+
+      # Return a copy of the updated changeset
+      render :xml => changeset.to_xml.to_s
+    end
+
+    ##
+    # Sets visible flag on comment to false
+    def destroy
+      # Check the arguments are sane
+      raise OSM::APIBadUserInput, "No id was given" unless params[:id]
+
+      # Extract the arguments
+      id = params[:id].to_i
+
+      # Find the changeset
+      comment = ChangesetComment.find(id)
+
+      # Hide the comment
+      comment.update(:visible => false)
+
+      # Return a copy of the updated changeset
+      render :xml => comment.changeset.to_xml.to_s
+    end
+
+    ##
+    # Sets visible flag on comment to true
+    def restore
+      # Check the arguments are sane
+      raise OSM::APIBadUserInput, "No id was given" unless params[:id]
+
+      # Extract the arguments
+      id = params[:id].to_i
+
+      # Find the changeset
+      comment = ChangesetComment.find(id)
+
+      # Unhide the comment
+      comment.update(:visible => true)
+
+      # Return a copy of the updated changeset
+      render :xml => comment.changeset.to_xml.to_s
+    end
+  end
+end