discourse/app/controllers/post_actions_controller.rb

80 lines
2.3 KiB
Ruby
Raw Normal View History

2013-02-06 03:16:51 +08:00
require_dependency 'discourse'
class PostActionsController < ApplicationController
before_filter :ensure_logged_in, except: :users
before_filter :fetch_post_from_params
2013-05-04 08:52:45 +08:00
before_filter :fetch_post_action_type_id_from_params
2013-02-06 03:16:51 +08:00
def create
2013-05-04 08:52:45 +08:00
guardian.ensure_post_can_act!(@post, PostActionType.types[@post_action_type_id])
2013-02-06 03:16:51 +08:00
args = {}
args[:message] = params[:message] if params[:message].present?
args[:take_action] = true if guardian.is_staff? and params[:take_action] == 'true'
post_action = PostAction.act(current_user, @post, @post_action_type_id, args)
2013-02-06 03:16:51 +08:00
2013-05-04 08:52:45 +08:00
if post_action.blank? || post_action.errors.present?
render_json_error(post_action)
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
post_serializer = PostSerializer.new(@post, scope: guardian, root: false)
render_json_dump(post_serializer)
2013-02-06 03:16:51 +08:00
end
end
def users
2013-05-04 08:52:45 +08:00
guardian.ensure_can_see_post_actors!(@post.topic, @post_action_type_id)
2013-02-06 03:16:51 +08:00
post_actions = @post.post_actions.where(post_action_type_id: @post_action_type_id).includes(:user)
render_serialized(post_actions.to_a, PostActionUserSerializer)
2013-02-06 03:16:51 +08:00
end
def destroy
2013-05-04 08:52:45 +08:00
post_action = current_user.post_actions.where(post_id: params[:id].to_i, post_action_type_id: @post_action_type_id, deleted_at: nil).first
2013-02-06 03:16:51 +08:00
raise Discourse::NotFound if post_action.blank?
2013-05-04 08:52:45 +08:00
2013-02-06 03:16:51 +08:00
guardian.ensure_can_delete!(post_action)
2013-05-04 08:52:45 +08:00
2013-02-06 03:16:51 +08:00
PostAction.remove_act(current_user, @post, post_action.post_action_type_id)
render nothing: true
end
2013-02-07 12:15:48 +08:00
def clear_flags
guardian.ensure_can_clear_flags!(@post)
2013-02-07 12:15:48 +08:00
2013-05-04 08:52:45 +08:00
PostAction.clear_flags!(@post, current_user.id, @post_action_type_id)
2013-02-07 12:15:48 +08:00
@post.reload
2013-02-07 23:45:24 +08:00
if @post.is_flagged?
2013-02-07 12:15:48 +08:00
render json: {success: true, hidden: true}
else
@post.unhide!
render json: {success: true, hidden: false}
end
end
2013-02-06 03:16:51 +08:00
private
2013-02-07 23:45:24 +08:00
def fetch_post_from_params
params.require(:id)
finder = Post.where(id: params[:id])
# Include deleted posts if the user is a moderator (to guardian ?)
finder = finder.with_deleted if current_user.try(:moderator?)
@post = finder.first
2013-02-06 03:16:51 +08:00
guardian.ensure_can_see!(@post)
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