mysociety/alaveteli

View on GitHub
app/controllers/alaveteli_pro/account_request_controller.rb

Summary

Maintainability
A
0 mins
Test Coverage
# Does not inherit from AlaveteliPro::BaseController as is pre-login
class AlaveteliPro::AccountRequestController < ApplicationController
  before_action :set_in_pro_area

  before_action :check_pro_pricing,
                only: :create, if: -> { feature_enabled?(:pro_pricing) }

  before_action :authenticate, :grant_pro_access,
                only: :create, if: -> { feature_enabled?(:pro_self_serve) }

  def index
    @title =
      _('FOI Management Tools for journalists, campaigners and researchers')
  end

  def create
    @account_request = AlaveteliPro::AccountRequest.new(
      params[:account_request]
    )

    if @account_request.valid?
      AlaveteliPro::AccountMailer.account_request(@account_request).deliver_now
      flash[:notice] = _('Thanks for your interest in {{pro_site_name}}, ' \
                         "we'll get back to you soon!",
                         pro_site_name: pro_site_name)
      redirect_to frontpage_url
    else
      render 'index'
    end
  end

  private

  def set_in_pro_area
    @in_pro_area = true
  end

  def check_pro_pricing
    redirect_to pro_plans_path
  end

  def grant_pro_access
    current_user.add_role(:pro)

    flash[:new_pro_user] = true
    flash[:notice] = _('Welcome to {{pro_site_name}}!',
                       pro_site_name: pro_site_name)

    redirect_to alaveteli_pro_dashboard_path
  end

  def authenticate
    authenticated? || ask_to_login(
      web: _('To upgrade your account'),
      email: _('Then you can upgrade your account'),
      email_subject: _('To upgrade your account')
    )
  end
end