2019-01-14 16:25:48 +01:00
|
|
|
module ProcedureContextConcern
|
|
|
|
extend ActiveSupport::Concern
|
|
|
|
|
|
|
|
include Devise::Controllers::StoreLocation
|
|
|
|
include Devise::StoreLocationExtension
|
|
|
|
|
|
|
|
def restore_procedure_context
|
2023-01-03 14:46:10 +01:00
|
|
|
return unless has_stored_procedure_path?
|
2019-01-14 16:25:48 +01:00
|
|
|
|
2023-01-03 14:46:10 +01:00
|
|
|
@procedure = find_procedure_in_context
|
|
|
|
|
|
|
|
if @procedure.blank?
|
|
|
|
invalid_procedure_context
|
|
|
|
else
|
|
|
|
@prefill_token = find_prefill_token_in_context
|
2019-01-14 16:25:48 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
2019-01-16 16:16:15 +01:00
|
|
|
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('/')
|
2019-01-14 16:25:48 +01:00
|
|
|
|
2019-01-16 16:16:15 +01:00
|
|
|
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])
|
2019-01-14 16:25:48 +01:00
|
|
|
else
|
|
|
|
nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2023-01-03 14:46:10 +01:00
|
|
|
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
|
|
|
|
|
2019-01-14 16:25:48 +01:00
|
|
|
def invalid_procedure_context
|
|
|
|
clear_stored_location_for(:user)
|
|
|
|
flash.alert = t('errors.messages.procedure_not_found')
|
|
|
|
redirect_to root_path
|
|
|
|
end
|
|
|
|
end
|