discourse/app/controllers/post_actions_controller.rb

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

87 lines
2.1 KiB
Ruby
Raw Permalink Normal View History

# frozen_string_literal: true
2013-02-06 03:16:51 +08:00
class PostActionsController < ApplicationController
requires_login
before_action :fetch_post_from_params
before_action :fetch_post_action_type_id_from_params
2013-02-06 03:16:51 +08:00
def create
2017-01-06 10:39:44 +08:00
raise Discourse::NotFound if @post.blank?
creator =
PostActionCreator.new(
current_user,
@post,
@post_action_type_id,
is_warning: params[:is_warning],
message: params[:message],
take_action: params[:take_action] == "true",
flag_topic: params[:flag_topic] == "true",
queue_for_review: params[:queue_for_review] == "true",
)
result = creator.perform
2013-02-06 03:16:51 +08:00
if result.failed?
render_json_error(result)
2013-02-07 23:45:24 +08:00
else
2013-05-04 08:52:45 +08:00
# We need to reload or otherwise we are showing the old values on the front end
@post.reload
if @post_action_type_id == PostActionType.types[:like]
limiter = result.post_action.post_action_rate_limiter
response.headers["Discourse-Actions-Remaining"] = limiter.remaining.to_s
response.headers["Discourse-Actions-Max"] = limiter.max.to_s
end
render_post_json(@post, add_raw: false)
2013-02-06 03:16:51 +08:00
end
end
def destroy
result =
PostActionDestroyer.new(
current_user,
Post.find_by(id: params[:id].to_i),
@post_action_type_id,
).perform
if result.failed?
render_json_error(result)
else
render_post_json(result.post, add_raw: false)
end
2013-02-06 03:16:51 +08:00
end
private
2013-02-07 23:45:24 +08:00
def fetch_post_from_params
params.require(:id)
2018-06-07 13:28:18 +08:00
flag_topic = params[:flag_topic]
flag_topic = flag_topic && (flag_topic == true || flag_topic == "true")
2018-06-07 13:28:18 +08:00
post_id =
if flag_topic
2014-02-06 06:54:16 +08:00
begin
Topic.find(params[:id]).posts.first.id
rescue StandardError
raise Discourse::NotFound
end
else
2014-02-06 06:54:16 +08:00
params[:id]
end
finder = Post.where(id: post_id)
# Include deleted posts if the user is a staff
finder = finder.with_deleted if guardian.is_staff?
@post = finder.first
2013-02-06 03:16:51 +08:00
end
2013-05-04 08:52:45 +08:00
def fetch_post_action_type_id_from_params
params.require(:post_action_type_id)
2013-05-04 08:52:45 +08:00
@post_action_type_id = params[:post_action_type_id].to_i
end
2013-02-06 03:16:51 +08:00
end