2013-02-05 14:16:51 -05:00
require_dependency 'discourse'
class PostActionsController < ApplicationController
2015-09-30 12:28:13 -04:00
before_filter :ensure_logged_in
2013-02-05 14:16:51 -05:00
before_filter :fetch_post_from_params
2013-05-04 02:52:45 +02:00
before_filter :fetch_post_action_type_id_from_params
2013-02-05 14:16:51 -05:00
def create
2014-09-03 14:43:07 -04:00
taken = PostAction . counts_for ( [ @post ] , current_user ) [ @post . id ]
guardian . ensure_post_can_act! ( @post , PostActionType . types [ @post_action_type_id ] , taken_actions : taken )
2016-04-03 19:44:14 -04:00
guardian . ensure_post_can_act! ( @post , PostActionType . types [ @post_action_type_id ] , is_warning : params [ :is_warning ] )
2013-02-05 14:16:51 -05:00
2013-05-31 17:38:28 -04:00
args = { }
args [ :message ] = params [ :message ] if params [ :message ] . present?
2016-04-03 11:33:56 -04:00
args [ :is_warning ] = params [ :is_warning ] if params [ :is_warning ] . present? && guardian . is_staff?
2014-07-28 19:17:37 +02:00
args [ :take_action ] = true if guardian . is_staff? && params [ :take_action ] == 'true'
2014-02-13 15:10:02 -05:00
args [ :flag_topic ] = true if params [ :flag_topic ] == 'true'
2013-05-31 17:38:28 -04:00
post_action = PostAction . act ( current_user , @post , @post_action_type_id , args )
2013-02-05 14:16:51 -05:00
2013-05-04 02:52:45 +02:00
if post_action . blank? || post_action . errors . present?
render_json_error ( post_action )
2013-02-07 16:45:24 +01:00
else
2013-05-04 02:52:45 +02:00
# We need to reload or otherwise we are showing the old values on the front end
@post . reload
2016-03-18 11:17:51 -04:00
if @post_action_type_id == PostActionType . types [ :like ]
limiter = 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
2014-09-25 12:02:41 +10:00
render_post_json ( @post , _add_raw = false )
2013-02-05 14:16:51 -05:00
end
end
def destroy
2014-05-06 14:41:59 +01:00
post_action = current_user . post_actions . find_by ( post_id : params [ :id ] . to_i , post_action_type_id : @post_action_type_id , deleted_at : nil )
2013-02-05 14:16:51 -05:00
raise Discourse :: NotFound if post_action . blank?
2013-05-04 02:52:45 +02:00
2013-02-05 14:16:51 -05:00
guardian . ensure_can_delete! ( post_action )
2013-05-04 02:52:45 +02:00
2013-02-05 14:16:51 -05:00
PostAction . remove_act ( current_user , @post , post_action . post_action_type_id )
2014-09-02 17:37:19 -04:00
@post . reload
2014-09-25 12:02:41 +10:00
render_post_json ( @post , _add_raw = false )
2013-02-05 14:16:51 -05:00
end
2014-07-28 19:17:37 +02:00
def defer_flags
guardian . ensure_can_defer_flags! ( @post )
2013-02-07 15:15:48 +11:00
2014-07-28 19:17:37 +02:00
PostAction . defer_flags! ( @post , current_user )
2013-02-07 15:15:48 +11:00
2014-08-11 10:48:00 +02:00
render json : { success : true }
2013-02-07 15:15:48 +11:00
end
2013-02-05 14:16:51 -05:00
private
2013-02-07 16:45:24 +01:00
def fetch_post_from_params
2013-06-05 00:23:51 -07:00
params . require ( :id )
2014-02-05 17:54:16 -05:00
2014-02-13 12:56:31 +11:00
flag_topic = params [ :flag_topic ]
flag_topic = flag_topic && ( flag_topic == true || flag_topic == " true " )
post_id = if flag_topic
2014-02-05 17:54:16 -05:00
begin
Topic . find ( params [ :id ] ) . posts . first . id
rescue
raise Discourse :: NotFound
end
else
params [ :id ]
end
finder = Post . where ( id : post_id )
2013-02-08 19:04:14 -05:00
2014-08-07 19:12:35 +02:00
# Include deleted posts if the user is a staff
finder = finder . with_deleted if guardian . is_staff?
2013-02-08 19:04:14 -05:00
@post = finder . first
2013-02-05 14:16:51 -05:00
guardian . ensure_can_see! ( @post )
end
2013-05-04 02:52:45 +02:00
def fetch_post_action_type_id_from_params
2013-06-05 00:23:51 -07:00
params . require ( :post_action_type_id )
2013-05-04 02:52:45 +02:00
@post_action_type_id = params [ :post_action_type_id ] . to_i
end
2013-02-05 14:16:51 -05:00
end