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