* Add ApplicationRecord#errors_as_sentence * Refactor existing uses * Use errors as sentence more consistently
96 lines
3.2 KiB
Ruby
96 lines
3.2 KiB
Ruby
class ResponseTemplatesController < ApplicationController
|
|
after_action :verify_authorized
|
|
before_action :authenticate_user!, :ensure_json_request, only: %i[index]
|
|
rescue_from ArgumentError, with: :error_unprocessable_entity
|
|
|
|
MOD_TYPES = %w[mod_comment tag_adjustment].freeze
|
|
ADMIN_TYPES = %w[email_reply abuse_report_email_reply].freeze
|
|
|
|
def index
|
|
raise ArgumentError, "Missing param type_of" if params[:type_of].blank?
|
|
|
|
user_id = params[:type_of] == "personal_comment" ? current_user.id : nil
|
|
@response_templates = ResponseTemplate.where(type_of: params[:type_of], user_id: user_id)
|
|
|
|
if MOD_TYPES.include?(params[:type_of])
|
|
authorize @response_templates, :moderator_index?
|
|
elsif ADMIN_TYPES.include?(params[:type_of])
|
|
authorize @response_templates, :admin_index?
|
|
else
|
|
authorize @response_templates, :index?
|
|
end
|
|
|
|
respond_to do |format|
|
|
format.json { render :index }
|
|
end
|
|
end
|
|
|
|
def create
|
|
authorize ResponseTemplate
|
|
response_template.user_id = current_user.id
|
|
response_template.content_type = "body_markdown"
|
|
response_template.type_of = "personal_comment"
|
|
|
|
if response_template.save
|
|
flash[:settings_notice] = "Your response template \"#{response_template.title}\" was created."
|
|
redirect_to user_settings_path(tab: "response-templates", id: response_template.id)
|
|
else
|
|
flash[:error] = "Response template error: #{response_template.errors_as_sentence}"
|
|
attributes = permitted_attributes(ResponseTemplate)
|
|
redirect_to user_settings_path(
|
|
tab: "response-templates",
|
|
id: response_template.id,
|
|
previous_title: attributes[:title],
|
|
previous_content: attributes[:content],
|
|
)
|
|
end
|
|
end
|
|
|
|
def destroy
|
|
authorize response_template
|
|
|
|
if response_template.destroy
|
|
flash[:settings_notice] = "Your response template \"#{response_template.title}\" was deleted."
|
|
else
|
|
flash[:error] = response_template.errors_as_sentence # this will probably never fail
|
|
end
|
|
|
|
redirect_to user_settings_path(tab: "response-templates")
|
|
end
|
|
|
|
def update
|
|
authorize response_template
|
|
|
|
attributes = permitted_attributes(ResponseTemplate)
|
|
if response_template.update(attributes)
|
|
flash[:settings_notice] = "Your response template \"#{response_template.title}\" was updated."
|
|
redirect_to user_settings_path(tab: "response-templates", id: response_template.id)
|
|
else
|
|
flash[:error] = "Response template error: #{response_template.errors_as_sentence}"
|
|
redirect_to user_settings_path(
|
|
tab: "response-templates",
|
|
id: response_template.id,
|
|
previous_title: attributes[:title],
|
|
previous_content: attributes[:content],
|
|
)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def response_template
|
|
@response_template ||= if params[:id].present?
|
|
ResponseTemplate.find(params[:id])
|
|
else
|
|
ResponseTemplate.new(permitted_attributes(ResponseTemplate))
|
|
end
|
|
end
|
|
|
|
def ensure_json_request
|
|
routing_error unless request.format == :json
|
|
end
|
|
|
|
def error_unprocessable_entity(message)
|
|
render json: { error: message, status: 422 }, status: :unprocessable_entity
|
|
end
|
|
end
|