Class: FlagsController

Inherits:
ApplicationController show all
Defined in:
/var/apps/qpixel/app/controllers/flags_controller.rb

Overview

Provides web and API actions that relate to flagging.

Instance Method Summary collapse

Methods inherited from ApplicationController

#dashboard, #keyboard_tools, #upload

Instance Method Details

#escalateObject



90
91
92
93
94
95
96
# File '/var/apps/qpixel/app/controllers/flags_controller.rb', line 90

def escalate
  @flag = Flag.find params[:id]
  @flag.update(escalated: true, escalated_by: current_user, escalated_at: DateTime.now,
               escalation_comment: params[:comment])
  FlagMailer.with(flag: @flag).flag_escalated.deliver_now
  render json: { status: 'success' }
end

#escalated_queueObject



55
56
57
58
59
60
61
62
# File '/var/apps/qpixel/app/controllers/flags_controller.rb', line 55

def escalated_queue
  @flags = Flag.unhandled
               .includes(:post, :user)
               .where(escalated: true)
               .order(@sort_type => @sort_order)
               .paginate(page: params[:page], per_page: 20)
  render :queue
end

#handledObject



71
72
73
74
75
76
# File '/var/apps/qpixel/app/controllers/flags_controller.rb', line 71

def handled
  @flags = Flag.handled
               .includes(:post, :user, :handled_by)
               .order(@sort_type => @sort_order)
               .paginate(page: params[:page], per_page: 50)
end

#historyObject



45
46
47
48
49
50
51
52
53
# File '/var/apps/qpixel/app/controllers/flags_controller.rb', line 45

def history
  @user = helpers.user_with_me params[:id]
  unless @user == current_user || current_user.at_least_moderator?
    not_found!
    return
  end
  @flags = @user.flags.includes(:post).order(id: :desc).paginate(page: params[:page], per_page: 50)
  @statuses = @flags.group(:status).count(:status)
end

#newObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File '/var/apps/qpixel/app/controllers/flags_controller.rb', line 9

def new
  type = if params[:flag_type].present?
           PostFlagType.find params[:flag_type]
         end

  recent_flags = Flag.by(current_user).recent.count
  max_flags_per_day = SiteSetting[current_user.privilege?('unrestricted') ? 'RL_Flags' : 'RL_NewUserFlags']

  if recent_flags >= max_flags_per_day
    flag_limit_msg = I18n.t('flags.errors.rate_limited', count: max_flags_per_day)

    AuditLog.rate_limit_log(event_type: 'flag', related: Post.find(params[:post_id]), user: current_user,
                            comment: "limit: #{max_flags_per_day}\n\ntype:#{type}\ncomment:\n#{params[:reason].to_i}")

    render json: { status: 'failed', message: flag_limit_msg }, status: :forbidden
    return
  end

  if type&.name == "needs author's attention"
    create_as_feedback_comment Post.find(params[:post_id]), current_user, params[:reason]
    render json: { status: 'success', message: I18n.t('flags.success.create_author_attention') },
           status: :created
    return
  end

  @flag = Flag.new(post_flag_type: type, reason: params[:reason], post_id: params[:post_id],
                   post_type: params[:post_type], user: current_user)
  if @flag.save
    render json: { status: 'success', message: I18n.t('flags.success.create_generic') },
           status: :created
  else
    render json: { status: 'failed', message: I18n.t('flags.errors.create_generic') },
           status: :bad_request
  end
end

#queueObject



64
65
66
67
68
69
# File '/var/apps/qpixel/app/controllers/flags_controller.rb', line 64

def queue
  @flags = Flag.unhandled
               .includes(:post, :user)
               .order(@sort_type => @sort_order)
               .paginate(page: params[:page], per_page: 20)
end

#resolveObject



78
79
80
81
82
83
84
85
86
87
88
# File '/var/apps/qpixel/app/controllers/flags_controller.rb', line 78

def resolve
  if @flag.resolve(status: params[:result],
                   message: params[:message],
                   handled_by: current_user)
    render json: { status: 'success' }
  else
    render json: { status: 'failed',
                   message: 'Failed to save new status.' },
           status: :internal_server_error
  end
end