demarches-normaliennes/app/controllers/concerns/procedure_context_concern.rb

42 lines
1 KiB
Ruby

module ProcedureContextConcern
extend ActiveSupport::Concern
include Devise::Controllers::StoreLocation
include Devise::StoreLocationExtension
def restore_procedure_context
return unless has_stored_procedure_path?
@procedure = find_procedure_in_context
if @procedure.blank?
invalid_procedure_context
else
@prefill_token = find_prefill_token_in_context
end
end
private
def has_stored_procedure_path?
get_stored_location_for(:user)&.start_with?('/commencer/')
end
def find_procedure_in_context
uri = URI(get_stored_location_for(:user))
path_components = uri.path.split('/')
Procedure.publiees_ou_brouillons.find_by(path: path_components[2])
end
def find_prefill_token_in_context
uri = URI(get_stored_location_for(:user))
CGI.parse(uri.query).dig("prefill_token")&.first if uri.query
end
def invalid_procedure_context
clear_stored_location_for(:user)
flash.alert = t('errors.messages.procedure_not_found')
redirect_to root_path
end
end