-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Expand file tree
/
Copy pathreports_controller.rb
More file actions
83 lines (65 loc) · 2.29 KB
/
Copy pathreports_controller.rb
File metadata and controls
83 lines (65 loc) · 2.29 KB
1
2
3
4
5
6
7
8
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# frozen_string_literal: true
class ReportsController < ApplicationController
layout :site_layout
before_action :authorize_web
before_action :set_locale
before_action :check_database_readable
authorize_resource
before_action :check_database_writable, :only => [:new, :create]
def new
return head :bad_request unless required_new_report_params_present?
return redirect_to root_url, :warning => t(".invalid_report_params") unless new_report_params_valid?
@report = Report.new
@report.issue = Issue.find_or_initialize_by(create_new_report_params)
end
def create
@report = current_user.reports.new(report_params)
@report.issue = Issue
.create_with(:assigned_role => default_assigned_role)
.find_or_initialize_by(issue_params)
if @report.save
@report.issue.assigned_role = "administrator" if default_assigned_role == "administrator"
@report.issue.reopen unless @report.issue.open?
@report.issue.save!
@report.issue.reported_user&.spam_check
redirect_to helpers.reportable_url(@report.issue.reportable), :notice => t(".successful_report")
else
flash.now[:warning] = t(".provide_details")
render :action => "new"
end
end
private
def required_new_report_params_present?
create_new_report_params["reportable_id"].present? && create_new_report_params["reportable_type"].present?
end
def new_report_params_valid?
id = create_new_report_params["reportable_id"]
type = create_new_report_params["reportable_type"]
(type == "DiaryComment" && DiaryComment.exists?(id)) ||
(type == "DiaryEntry" && DiaryEntry.exists?(id)) ||
(type == "Note" && Note.exists?(id)) ||
(type == "User" && User.exists?(id))
end
def create_new_report_params
params.permit(:reportable_id, :reportable_type)
end
def report_params
params.expect(:report => [:details, :category])
end
def issue_params
params.require(:report).require(:issue).permit(:reportable_id, :reportable_type)
end
def default_assigned_role
case issue_params[:reportable_type]
when "Note"
"moderator"
when "User"
case report_params[:category]
when "vandal" then "moderator"
else "administrator"
end
else
"administrator"
end
end
end