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

49 lines
1.2 KiB
Ruby
Raw Normal View History

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('/')
if uri.path.start_with?('/commencer/test/')
Procedure.brouillon.find_by(path: path_components[3])
elsif uri.path.start_with?('/commencer/')
Procedure.publiee.find_by(path: path_components[2])
else
nil
end
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