discourse/app/controllers/post_actions_controller.rb

76 lines
2.3 KiB
Ruby
Raw Normal View History

2013-02-05 13:16:51 -06:00
require_dependency 'discourse'
class PostActionsController < ApplicationController
before_filter :ensure_logged_in, except: :users
before_filter :fetch_post_from_params
def create
id = params[:post_action_type_id].to_i
if action = PostActionType.where(id: id).first
guardian.ensure_post_can_act!(@post, PostActionType.Types.invert[id])
2013-02-08 15:55:40 -06:00
post_action = PostAction.act(current_user, @post, action.id, params[:message])
if post_action.blank? or post_action.errors.present?
render_json_error(post_action)
else
# 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)
end
2013-02-05 13:16:51 -06:00
2013-02-07 09:45:24 -06:00
else
raise Discourse::InvalidParameters.new(:post_action_type_id)
2013-02-05 13:16:51 -06:00
end
end
def users
requires_parameter(:post_action_type_id)
post_action_type_id = params[:post_action_type_id].to_i
guardian.ensure_can_see_post_actors!(@post.topic, post_action_type_id)
users = User.
joins(:post_actions).
where(["post_actions.post_id = ? and post_actions.post_action_type_id = ? and post_actions.deleted_at IS NULL", @post.id, post_action_type_id]).all
render_serialized(users, BasicUserSerializer)
end
def destroy
requires_parameter(:post_action_type_id)
post_action = current_user.post_actions.where(post_id: params[:id].to_i, post_action_type_id: params[:post_action_type_id].to_i, deleted_at: nil).first
raise Discourse::NotFound if post_action.blank?
guardian.ensure_can_delete!(post_action)
PostAction.remove_act(current_user, @post, post_action.post_action_type_id)
render nothing: true
end
2013-02-06 22:15:48 -06:00
def clear_flags
requires_parameter(:post_action_type_id)
raise Discourse::InvalidAccess unless guardian.is_admin?
PostAction.clear_flags!(@post, current_user.id, params[:post_action_type_id].to_i)
@post.reload
2013-02-07 09:45:24 -06:00
if @post.is_flagged?
2013-02-06 22:15:48 -06:00
render json: {success: true, hidden: true}
else
@post.unhide!
render json: {success: true, hidden: false}
end
end
2013-02-05 13:16:51 -06:00
private
2013-02-07 09:45:24 -06:00
def fetch_post_from_params
2013-02-05 13:16:51 -06:00
requires_parameter(:id)
2013-02-07 09:45:24 -06:00
@post = Post.where(id: params[:id]).first
2013-02-05 13:16:51 -06:00
guardian.ensure_can_see!(@post)
end
end