X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/1778fa3d9c25ae1a98386d3dcbb426eda5e62fbf..947a41edee95df9e75cce0452277e2a00a8b5fa5:/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 index 000000000..6093f529e --- /dev/null +++ b/app/controllers/api/changeset_comments_controller.rb @@ -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