]> git.openstreetmap.org Git - rails.git/blob - app/controllers/reports_controller.rb
Merge remote-tracking branch 'upstream/pull/3804'
[rails.git] / app / controllers / reports_controller.rb
1 class ReportsController < ApplicationController
2   layout "site"
3
4   before_action :authorize_web
5   before_action :set_locale
6
7   authorize_resource
8
9   def new
10     if required_new_report_params_present?
11       @report = Report.new
12       @report.issue = Issue.find_or_initialize_by(create_new_report_params)
13     else
14       redirect_to root_path, :notice => t(".missing_params")
15     end
16   end
17
18   def create
19     @report = current_user.reports.new(report_params)
20     @report.issue = Issue
21                     .create_with(:assigned_role => default_assigned_role)
22                     .find_or_initialize_by(issue_params)
23
24     if @report.save
25       @report.issue.assigned_role = "administrator" if default_assigned_role == "administrator"
26       @report.issue.reopen unless @report.issue.open?
27       @report.issue.save!
28
29       redirect_to helpers.reportable_url(@report.issue.reportable), :notice => t(".successful_report")
30     else
31       flash.now[:notice] = t(".provide_details")
32       render :action => "new"
33     end
34   end
35
36   private
37
38   def required_new_report_params_present?
39     create_new_report_params["reportable_id"].present? && create_new_report_params["reportable_type"].present?
40   end
41
42   def create_new_report_params
43     params.permit(:reportable_id, :reportable_type)
44   end
45
46   def report_params
47     params.require(:report).permit(:details, :category)
48   end
49
50   def issue_params
51     params.require(:report).require(:issue).permit(:reportable_id, :reportable_type)
52   end
53
54   def default_assigned_role
55     case issue_params[:reportable_type]
56     when "Note"
57       "moderator"
58     when "User"
59       case report_params[:category]
60       when "vandal" then "moderator"
61       else "administrator"
62       end
63     else
64       "administrator"
65     end
66   end
67 end