mysociety/alaveteli

View on GitHub
app/controllers/public_body_change_requests_controller.rb

Summary

Maintainability
A
0 mins
Test Coverage
class PublicBodyChangeRequestsController < ApplicationController
  before_action :catch_spam, only: [:create]
  before_action :set_render_recaptcha

  def new
    @change_request =
      PublicBodyChangeRequest.new

    if params[:body]
      @change_request.public_body =
        PublicBody.find_by_url_name_with_historic(params[:body])
    end

    @title =
      if @change_request.public_body
        _('Ask us to update the email address for {{public_body_name}}',
          public_body_name: @change_request.public_body.name)
      else
        _('Ask us to add an authority')
      end
  end

  def create
    @change_request =
      PublicBodyChangeRequest.
        from_params(params[:public_body_change_request], @user)

    verified =
      if @render_recaptcha
        recaptcha_args = {
          model: @change_request,
          message: _('There was an error with the reCAPTCHA. ' \
                        'Please try again.')
        }

        verify_recaptcha(recaptcha_args)
      else
        true
      end

    if verified && @change_request.save
      @change_request.send_message
      redirect_to frontpage_url, notice: @change_request.thanks_notice
    else
      render action: 'new'
    end
  end

  private

  def catch_spam
    if params[:public_body_change_request].key?(:comment)
      unless params[:public_body_change_request][:comment].empty?
        redirect_to frontpage_url
      end
    end
  end

  def set_render_recaptcha
    @render_recaptcha = !@user
  end
end