Merge pull request #10524 from mfo/US/expert-invitation-by-admin
ETQ administrateur, lorsque je gère ma liste d'expert invités sur une démarche, je suis guidé pour eviter les typos
This commit is contained in:
commit
896ee76d74
10 changed files with 106 additions and 45 deletions
|
@ -1,25 +1,32 @@
|
|||
module Administrateurs
|
||||
class ExpertsProceduresController < AdministrateurController
|
||||
include EmailSanitizableConcern
|
||||
before_action :retrieve_procedure
|
||||
before_action :retrieve_experts_procedure, only: [:index]
|
||||
before_action :retrieve_experts_emails, only: [:index]
|
||||
|
||||
def index
|
||||
@experts_procedure = @procedure
|
||||
.experts_procedures
|
||||
.where(revoked_at: nil)
|
||||
.sort_by { |expert_procedure| expert_procedure.expert.email }
|
||||
@experts_emails = experts_procedure_emails
|
||||
end
|
||||
|
||||
def create
|
||||
emails = params['emails'].presence || [].to_json
|
||||
emails = JSON.parse(emails).map(&:strip).map(&:downcase)
|
||||
emails = JSON.parse(emails).map { EmailSanitizer.sanitize(_1) }
|
||||
@maybe_typos, emails = emails
|
||||
.map { |email| [email, EmailChecker.check(email:)[:suggestions]&.first] }
|
||||
.partition { _1[1].present? }
|
||||
errors = if !@maybe_typos.empty?
|
||||
["Attention, nous pensons avoir identifié une faute de frappe dans les invitations : #{@maybe_typos.map(&:first).join(', ')}. Veuillez, #{view_context.link_to(" verifier l'orthographe", "#maybe_typos_errors")} des invitations."]
|
||||
else
|
||||
[]
|
||||
end
|
||||
emails += [EmailSanitizer.sanitize(params['final_email'])] if params['final_email'].present?
|
||||
|
||||
valid_users, invalid_users = emails
|
||||
.map { |email| User.create_or_promote_to_expert(email, SecureRandom.hex) }
|
||||
.partition(&:valid?)
|
||||
|
||||
if invalid_users.any?
|
||||
flash[:alert] = invalid_users
|
||||
errors += invalid_users
|
||||
.filter { |user| user.errors.present? }
|
||||
.map { |user| "#{user.email} : #{user.errors.full_messages_for(:email).join(', ')}" }
|
||||
end
|
||||
|
@ -32,12 +39,16 @@ module Administrateurs
|
|||
end
|
||||
end
|
||||
|
||||
flash[:notice] = t('.experts_assignment',
|
||||
flash.now[:notice] = t('.experts_assignment',
|
||||
count: valid_users.count,
|
||||
value: valid_users.map(&:email).join(', '),
|
||||
procedure: @procedure.id)
|
||||
end
|
||||
redirect_to admin_procedure_experts_path(@procedure)
|
||||
|
||||
flash.now[:alert] = errors.join(". ") if !errors.empty?
|
||||
retrieve_experts_procedure
|
||||
retrieve_experts_emails
|
||||
render :index
|
||||
end
|
||||
|
||||
def update
|
||||
|
@ -57,8 +68,12 @@ module Administrateurs
|
|||
|
||||
private
|
||||
|
||||
def experts_procedure_emails
|
||||
@procedure.experts.map(&:email).sort
|
||||
def retrieve_experts_procedure
|
||||
@experts_procedure ||= @procedure.experts_procedures.where(revoked_at: nil).sort_by { _1.expert.email }
|
||||
end
|
||||
|
||||
def retrieve_experts_emails
|
||||
@experts_emails ||= @experts_procedure.map { _1.expert.email }
|
||||
end
|
||||
|
||||
def expert_procedure_params
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
class EmailCheckerController < ApplicationController
|
||||
def show
|
||||
render json: EmailChecker.new.check(email: params[:email])
|
||||
render json: EmailChecker.check(email: params[:email])
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue