It's a convention in rails to name your mailers with a Mailer suffix, and is also common to name the class after the recipient (e.g. User, Admin). So UserMailer seems a reasonable choice.
86 lines
2.5 KiB
Ruby
86 lines
2.5 KiB
Ruby
module Api
|
|
class ChangesetCommentsController < ApiController
|
|
before_action :authorize
|
|
|
|
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|
|
|
UserMailer.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
|
|
@changeset = changeset
|
|
render "api/changesets/changeset"
|
|
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
|
|
@changeset = comment.changeset
|
|
render "api/changesets/changeset"
|
|
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
|
|
@changeset = comment.changeset
|
|
render "api/changesets/changeset"
|
|
end
|
|
end
|
|
end
|