2013-02-06 03:16:51 +08:00
|
|
|
require_dependency 'discourse'
|
|
|
|
|
|
|
|
class PostActionsController < ApplicationController
|
2018-02-01 12:17:59 +08:00
|
|
|
requires_login
|
|
|
|
|
2017-08-31 12:06:56 +08:00
|
|
|
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?
|
|
|
|
|
2019-01-04 01:03:01 +08:00
|
|
|
creator = PostActionCreator.new(
|
|
|
|
current_user,
|
2016-12-21 12:01:26 +08:00
|
|
|
@post,
|
2019-01-04 01:03:01 +08:00
|
|
|
@post_action_type_id,
|
|
|
|
is_warning: params[:is_warning],
|
|
|
|
message: params[:message],
|
|
|
|
take_action: params[:take_action] == 'true',
|
|
|
|
flag_topic: params[:flag_topic] == 'true'
|
2016-12-21 12:01:26 +08:00
|
|
|
)
|
2019-01-04 01:03:01 +08:00
|
|
|
result = creator.perform
|
2013-02-06 03:16:51 +08:00
|
|
|
|
2019-01-04 01:03:01 +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
|
2016-03-18 23:17:51 +08:00
|
|
|
|
|
|
|
if @post_action_type_id == PostActionType.types[:like]
|
2019-01-04 01:03:01 +08:00
|
|
|
limiter = result.post_action.post_action_rate_limiter
|
2016-03-18 23:17:51 +08:00
|
|
|
response.headers['Discourse-Actions-Remaining'] = limiter.remaining.to_s
|
|
|
|
response.headers['Discourse-Actions-Max'] = limiter.max.to_s
|
|
|
|
end
|
2019-01-04 01:03:01 +08:00
|
|
|
render_post_json(@post, add_raw: false)
|
2013-02-06 03:16:51 +08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def destroy
|
2019-01-04 01:03:01 +08:00
|
|
|
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
|
|
|
|
|
2014-07-29 01:17:37 +08:00
|
|
|
def defer_flags
|
|
|
|
guardian.ensure_can_defer_flags!(@post)
|
2013-02-07 12:15:48 +08:00
|
|
|
|
2019-01-04 01:03:01 +08:00
|
|
|
if reviewable = @post.reviewable_flag
|
|
|
|
reviewable.perform(current_user, :ignore)
|
|
|
|
end
|
2013-02-07 12:15:48 +08:00
|
|
|
|
2014-08-11 16:48:00 +08:00
|
|
|
render json: { success: true }
|
2013-02-07 12:15:48 +08:00
|
|
|
end
|
|
|
|
|
2013-02-06 03:16:51 +08:00
|
|
|
private
|
|
|
|
|
2018-06-07 13:28:18 +08:00
|
|
|
def fetch_post_from_params
|
|
|
|
params.require(:id)
|
|
|
|
|
|
|
|
flag_topic = params[:flag_topic]
|
|
|
|
flag_topic = flag_topic && (flag_topic == true || flag_topic == "true")
|
|
|
|
|
|
|
|
post_id = if flag_topic
|
|
|
|
begin
|
|
|
|
Topic.find(params[:id]).posts.first.id
|
|
|
|
rescue
|
|
|
|
raise Discourse::NotFound
|
2014-02-06 06:54:16 +08:00
|
|
|
end
|
2018-06-07 13:28:18 +08:00
|
|
|
else
|
|
|
|
params[:id]
|
|
|
|
end
|
2014-02-06 06:54:16 +08:00
|
|
|
|
2018-06-07 13:28:18 +08:00
|
|
|
finder = Post.where(id: post_id)
|
2013-02-09 08:04:14 +08:00
|
|
|
|
2018-06-07 13:28:18 +08:00
|
|
|
# Include deleted posts if the user is a staff
|
|
|
|
finder = finder.with_deleted if guardian.is_staff?
|
2013-02-09 08:04:14 +08:00
|
|
|
|
2018-06-07 13:28:18 +08:00
|
|
|
@post = finder.first
|
|
|
|
end
|
2013-05-04 08:52:45 +08:00
|
|
|
|
2018-06-07 13:28:18 +08:00
|
|
|
def fetch_post_action_type_id_from_params
|
|
|
|
params.require(:post_action_type_id)
|
|
|
|
@post_action_type_id = params[:post_action_type_id].to_i
|
|
|
|
end
|
2013-02-06 03:16:51 +08:00
|
|
|
end
|