2024-04-29 00:17:15 +02:00
|
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
2019-10-24 21:52:05 +02:00
|
|
|
|
module Instructeurs
|
|
|
|
|
class GroupeInstructeursController < InstructeurController
|
2024-07-04 13:40:01 +02:00
|
|
|
|
include EmailSanitizableConcern
|
2023-09-21 17:01:27 +02:00
|
|
|
|
include GroupeInstructeursSignatureConcern
|
2023-09-21 13:51:04 +02:00
|
|
|
|
|
2024-02-15 16:47:16 +01:00
|
|
|
|
before_action :ensure_allowed!
|
|
|
|
|
|
2019-10-24 21:52:05 +02:00
|
|
|
|
ITEMS_PER_PAGE = 25
|
|
|
|
|
|
|
|
|
|
def index
|
|
|
|
|
@procedure = procedure
|
|
|
|
|
@groupes_instructeurs = paginated_groupe_instructeurs
|
|
|
|
|
end
|
|
|
|
|
|
2019-10-24 22:17:55 +02:00
|
|
|
|
def show
|
|
|
|
|
@procedure = procedure
|
|
|
|
|
@groupe_instructeur = groupe_instructeur
|
|
|
|
|
@instructeurs = paginated_instructeurs
|
|
|
|
|
end
|
|
|
|
|
|
2019-10-25 09:26:31 +02:00
|
|
|
|
def add_instructeur
|
2024-10-17 17:45:11 +02:00
|
|
|
|
emails = params['emails'].presence || []
|
|
|
|
|
emails = check_if_typo(emails)
|
2024-07-04 13:40:01 +02:00
|
|
|
|
errors = Array.wrap(generate_emails_suggestions_message(@maybe_typos))
|
|
|
|
|
|
2024-10-17 17:45:11 +02:00
|
|
|
|
instructeurs, invalid_emails = groupe_instructeur.add_instructeurs(emails:)
|
2024-07-04 13:40:01 +02:00
|
|
|
|
|
2024-10-17 17:45:11 +02:00
|
|
|
|
if invalid_emails.present?
|
|
|
|
|
errors += [
|
|
|
|
|
t('.wrong_address',
|
|
|
|
|
count: invalid_emails.size,
|
|
|
|
|
emails: invalid_emails.join(', '))
|
|
|
|
|
]
|
2024-07-04 13:40:01 +02:00
|
|
|
|
end
|
|
|
|
|
|
2024-10-17 17:45:11 +02:00
|
|
|
|
if instructeurs.present?
|
|
|
|
|
flash[:notice] = if procedure.routing_enabled?
|
|
|
|
|
t('.assignment', count: instructeurs.size,
|
|
|
|
|
emails: instructeurs.map(&:email).join(', '),
|
|
|
|
|
groupe: groupe_instructeur.label)
|
|
|
|
|
else
|
|
|
|
|
"Les instructeurs ont bien été affectés à la démarche"
|
|
|
|
|
end
|
2019-10-25 09:26:31 +02:00
|
|
|
|
|
2024-10-17 17:45:11 +02:00
|
|
|
|
known_instructeurs, not_verified_instructeurs = instructeurs.partition { |instructeur| instructeur.user.email_verified_at }
|
2023-02-17 15:24:12 +01:00
|
|
|
|
|
2024-10-17 17:45:11 +02:00
|
|
|
|
not_verified_instructeurs.filter(&:should_receive_email_activation?).each do
|
|
|
|
|
InstructeurMailer.confirm_and_notify_added_instructeur(_1, groupe_instructeur, current_instructeur.email).deliver_later
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if known_instructeurs.present?
|
2024-06-27 17:30:36 +02:00
|
|
|
|
GroupeInstructeurMailer
|
2024-10-17 17:45:11 +02:00
|
|
|
|
.notify_added_instructeurs(groupe_instructeur, known_instructeurs, current_instructeur.email)
|
2024-06-27 17:30:36 +02:00
|
|
|
|
.deliver_later
|
|
|
|
|
end
|
2019-10-25 09:26:31 +02:00
|
|
|
|
end
|
|
|
|
|
|
2024-10-17 17:45:11 +02:00
|
|
|
|
@procedure = procedure
|
|
|
|
|
@groupe_instructeur = groupe_instructeur
|
|
|
|
|
@instructeurs = paginated_instructeurs
|
|
|
|
|
|
|
|
|
|
if !errors.empty?
|
|
|
|
|
flash.now[:alert] = errors.join(". ") if !errors.empty?
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
render :show
|
2019-10-25 09:26:31 +02:00
|
|
|
|
end
|
|
|
|
|
|
2019-10-25 10:17:39 +02:00
|
|
|
|
def remove_instructeur
|
|
|
|
|
if groupe_instructeur.instructeurs.one?
|
|
|
|
|
flash[:alert] = "Suppression impossible : il doit y avoir au moins un instructeur dans le groupe"
|
|
|
|
|
else
|
2021-10-26 22:40:48 +02:00
|
|
|
|
instructeur = Instructeur.find(instructeur_id)
|
2021-12-21 19:06:38 +01:00
|
|
|
|
if groupe_instructeur.remove(instructeur)
|
2021-10-26 22:40:48 +02:00
|
|
|
|
flash[:notice] = "L’instructeur « #{instructeur.email} » a été retiré du groupe."
|
2023-02-14 11:17:52 +01:00
|
|
|
|
GroupeInstructeurMailer
|
2023-02-15 11:57:35 +01:00
|
|
|
|
.notify_removed_instructeur(groupe_instructeur, instructeur, current_user.email)
|
2023-02-14 11:17:52 +01:00
|
|
|
|
.deliver_later
|
2021-10-26 22:40:48 +02:00
|
|
|
|
else
|
|
|
|
|
flash[:alert] = "L’instructeur « #{instructeur.email} » n’est pas dans le groupe."
|
|
|
|
|
end
|
2019-10-25 10:17:39 +02:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
redirect_to instructeur_groupe_path(procedure, groupe_instructeur)
|
|
|
|
|
end
|
|
|
|
|
|
2019-10-24 21:52:05 +02:00
|
|
|
|
private
|
|
|
|
|
|
2019-10-25 09:26:31 +02:00
|
|
|
|
def create_instructeur(email)
|
|
|
|
|
user = User.create_or_promote_to_instructeur(
|
|
|
|
|
email,
|
|
|
|
|
SecureRandom.hex,
|
|
|
|
|
administrateurs: [procedure.administrateurs.first]
|
|
|
|
|
)
|
2024-03-11 12:29:06 +01:00
|
|
|
|
|
2019-10-25 09:26:31 +02:00
|
|
|
|
user.instructeur
|
|
|
|
|
end
|
|
|
|
|
|
2019-10-24 21:52:05 +02:00
|
|
|
|
def procedure
|
|
|
|
|
current_instructeur
|
|
|
|
|
.procedures
|
|
|
|
|
.includes(:groupe_instructeurs)
|
|
|
|
|
.find(params[:procedure_id])
|
|
|
|
|
end
|
|
|
|
|
|
2019-10-24 22:17:55 +02:00
|
|
|
|
def groupe_instructeur
|
|
|
|
|
current_instructeur.groupe_instructeurs.find(params[:id])
|
|
|
|
|
end
|
|
|
|
|
|
2019-10-24 21:52:05 +02:00
|
|
|
|
def paginated_groupe_instructeurs
|
|
|
|
|
current_instructeur
|
|
|
|
|
.groupe_instructeurs
|
|
|
|
|
.where(procedure: procedure)
|
|
|
|
|
.page(params[:page])
|
|
|
|
|
.per(ITEMS_PER_PAGE)
|
|
|
|
|
end
|
2019-10-24 22:17:55 +02:00
|
|
|
|
|
|
|
|
|
def paginated_instructeurs
|
|
|
|
|
groupe_instructeur
|
|
|
|
|
.instructeurs
|
|
|
|
|
.page(params[:page])
|
|
|
|
|
.per(ITEMS_PER_PAGE)
|
|
|
|
|
.order(:email)
|
|
|
|
|
end
|
2019-10-25 09:26:31 +02:00
|
|
|
|
|
2019-10-25 10:17:39 +02:00
|
|
|
|
def instructeur_id
|
|
|
|
|
params[:instructeur][:id]
|
|
|
|
|
end
|
2024-02-15 16:47:16 +01:00
|
|
|
|
|
|
|
|
|
def ensure_allowed!
|
|
|
|
|
if !(current_administrateur&.owns?(procedure) || procedure.instructeurs_self_management_enabled?)
|
|
|
|
|
flash[:alert] = "Vous n’avez pas le droit de gérer les instructeurs de cette démarche"
|
|
|
|
|
redirect_to instructeur_procedure_path(procedure)
|
|
|
|
|
end
|
2024-02-15 17:10:11 +01:00
|
|
|
|
rescue ActiveRecord::RecordNotFound
|
|
|
|
|
flash[:alert] = "Vous n’avez pas accès à cette démarche"
|
|
|
|
|
redirect_to root_path
|
2024-02-15 16:47:16 +01:00
|
|
|
|
end
|
2019-10-24 21:52:05 +02:00
|
|
|
|
end
|
|
|
|
|
end
|