instructeur need to confirm mail after invitation

This commit is contained in:
Lisa Durand 2024-06-25 15:14:26 +02:00
parent 169f07cadd
commit d7893b9102
No known key found for this signature in database
GPG key ID: 0DF91F2CA1E8B816
10 changed files with 79 additions and 12 deletions

View file

@ -239,9 +239,15 @@ module Administrateurs
"Les instructeurs ont bien été affectés à la démarche"
end
GroupeInstructeurMailer
.notify_added_instructeurs(groupe_instructeur, instructeurs, current_administrateur.email)
.deliver_later
known_instructeurs, new_instructeurs = instructeurs.partition { |instructeur| instructeur.user.email_verified_at }
new_instructeurs.each { InstructeurMailer.confirm_and_notify_added_instructeur(_1, groupe_instructeur, current_administrateur.email).deliver_later }
if known_instructeurs.present?
GroupeInstructeurMailer
.notify_added_instructeurs(groupe_instructeur, known_instructeurs, current_administrateur.email)
.deliver_later
end
end
if procedure.routing_enabled?

View file

@ -25,7 +25,7 @@ class AgentConnect::AgentController < ApplicationController
instructeur = Instructeur.find_by(users: { email: santized_email(user_info) })
if instructeur.nil?
user = User.create_or_promote_to_instructeur(santized_email(user_info), Devise.friendly_token[0, 20])
user = User.create_or_promote_to_instructeur(santized_email(user_info), Devise.friendly_token[0, 20], agent_connect: true)
instructeur = user.instructeur
end

View file

@ -65,7 +65,6 @@ module Instructeurs
administrateurs: [procedure.administrateurs.first]
)
user.invite_instructeur! if user.valid?
user.instructeur
end

View file

@ -47,4 +47,21 @@ class InstructeurMailer < ApplicationMailer
def self.critical_email?(action_name)
action_name == "send_login_token"
end
def confirm_and_notify_added_instructeur(instructeur, group, current_instructeur_email)
@instructeur = instructeur
@group = group
@current_instructeur_email = current_instructeur_email
@reset_password_token = instructeur.user.send(:set_reset_password_token)
subject = if group.procedure.groupe_instructeurs.many?
"Vous avez été ajouté(e) au groupe \"#{group.label}\" de la démarche \"#{group.procedure.libelle}\""
else
"Vous avez été affecté(e) à la démarche \"#{group.procedure.libelle}\""
end
bypass_unverified_mail_protection!
mail(to: instructeur.email, subject: subject)
end
end

View file

@ -58,7 +58,6 @@ class GroupeInstructeur < ApplicationRecord
if not_found_emails.present?
instructeurs_to_add += not_found_emails.map do |email|
user = User.create_or_promote_to_instructeur(email, SecureRandom.hex, administrateurs: procedure.administrateurs)
user.invite_instructeur!
user.instructeur
end
end

View file

@ -97,10 +97,16 @@ class User < ApplicationRecord
AdministrateurMailer.activate_before_expiration(self, reset_password_token).deliver_later
end
def self.create_or_promote_to_instructeur(email, password, administrateurs: [])
user = User
.create_with(password: password, confirmed_at: Time.zone.now, email_verified_at: Time.zone.now)
.find_or_create_by(email: email)
def self.create_or_promote_to_instructeur(email, password, administrateurs: [], agent_connect: false)
if agent_connect
user = User
.create_with(password: password, confirmed_at: Time.zone.now, email_verified_at: Time.zone.now)
.find_or_create_by(email: email)
else
user = User
.create_with(password: password, confirmed_at: Time.zone.now)
.find_or_create_by(email: email)
end
if user.valid?
if user.instructeur.nil?

View file

@ -0,0 +1,28 @@
%p= t(:hello, scope: [:views, :shared, :greetings])
%p
- number_of_groups = @group.procedure.groupe_instructeurs.many? ? 'many_groups' : 'one_group'
= t(".email_body.#{number_of_groups}", groupe: @group.label, email: @current_instructeur_email, procedure: @group.procedure.libelle)
%p
Votre compte a été créé pour l'adresse email
%strong #{@instructeur.email}.
%p
Pour lactiver, cliquez sur le lien suivant : 
= link_to(users_activate_url(token: @reset_password_token), users_activate_url(token: @reset_password_token))
%p
Lors de vos prochaines connexions sur #{Current.application_name} cliquez sur le bouton « Se connecter » positionné sur le haut de page ou bien sur ce lien : 
= link_to new_user_session_url, new_user_session_url
- if AgentConnectService.enabled?
%p
Vous êtes un agent de l'état et avez accès à AgentConnect ? Vous pouvez utiliser la connexion AgentConnect en suivant ce lien : 
= link_to agent_connect_url, agent_connect_url
%p
Nous vous invitons aussi à consulter notre tutoriel à destination des nouveaux instructeurs :
= link_to(INSTRUCTEUR_TUTORIAL_URL, INSTRUCTEUR_TUTORIAL_URL)
= render partial: "layouts/mailers/signature"

View file

@ -0,0 +1,6 @@
en:
instructeur_mailer:
confirm_and_notify_added_instructeur:
email_body:
one_group: "You were assigned to the procedure « %{procedure} » by « %{email} »."
many_groups: "You were assigned to the group « %{groupe} » by « %{email} », in charge of procedure « %{procedure} »."

View file

@ -0,0 +1,6 @@
fr:
instructeur_mailer:
confirm_and_notify_added_instructeur:
email_body:
one_group: "Vous avez été affecté(e) à la démarche « %{procedure} » par « %{email} »."
many_groups: "Vous avez été ajouté(e) au groupe « %{groupe} » par « %{email} », en charge de la démarche « %{procedure} »."

View file

@ -117,7 +117,7 @@ describe User, type: :model do
user = subject
expect(user.valid_password?(password)).to be true
expect(user.confirmed_at).to be_present
expect(user.email_verified_at).to be_present
expect(user.email_verified_at).not_to be_present
expect(user.instructeur).to be_present
end
@ -230,7 +230,7 @@ describe User, type: :model do
it 'verifies its email' do
user = subject
expect(user.email_verified_at).to be_present
expect(user.email_verified_at).not_to be_present
end
end