diff --git a/assets/scripts/vanilla/controllers/back_partner_view/form_partner.js b/assets/scripts/vanilla/controllers/back_partner_view/form_partner.js
index 1b9841b23..96d0cb9c3 100644
--- a/assets/scripts/vanilla/controllers/back_partner_view/form_partner.js
+++ b/assets/scripts/vanilla/controllers/back_partner_view/form_partner.js
@@ -48,7 +48,9 @@ function histoUpdateFieldsVisibility () {
function histoUpdateValueFromData (elementName, elementData, target) {
document.querySelector(elementName).value = target.getAttribute(elementData)
}
-function histoUpdatePermissionsFromRole (editOrCreate, toggleValue) {
+
+//TODO : remove editOrCreate param after feature_multi_territories deletion (will always be 'partner')
+function histoUpdatePermissionsFromRole (editOrCreate) {
const elementTogglePermissionAffectation = document.querySelector('#user_' + editOrCreate + '_permission_affectation_toggle input')
const elementTextPermissionAffectation = document.querySelector('#user_' + editOrCreate + '_permission_affectation_text')
if (!elementTogglePermissionAffectation || !elementTextPermissionAffectation) {
@@ -68,12 +70,6 @@ function histoUpdatePermissionsFromRole (editOrCreate, toggleValue) {
elementTextPermissionAffectation.classList.remove('fr-hidden')
} else {
elementTogglePermissionAffectation.removeAttribute('disabled')
- if (toggleValue === false && elementTogglePermissionAffectation.checked) {
- elementTogglePermissionAffectation.click()
- }
- if (editOrCreate === 'edit' && toggleValue === true && !elementTogglePermissionAffectation.checked) {
- elementTogglePermissionAffectation.click()
- }
elementTextPermissionAffectation.classList.add('fr-hidden')
}
}
@@ -116,61 +112,6 @@ document.querySelectorAll('.btn-delete-partner').forEach(swbtn => {
})
})
})
-let userEditedId = null
-
-function clearErrors () {
- const divErrorElements = document.querySelectorAll('.fr-input-group--error')
- divErrorElements.forEach((divErrorElement) => {
- divErrorElement.classList.remove('fr-input-group--error')
- const pErrorElement = divErrorElement.querySelector('.fr-error-text')
- if (pErrorElement) {
- pErrorElement.classList.add('fr-hidden')
- }
- })
-}
-document.querySelectorAll('.btn-edit-partner-user').forEach(swbtn => {
- swbtn.addEventListener('click', evt => {
- clearErrors()
- const target = evt.target
- document.querySelectorAll('.fr-modal-user-edit_useremail').forEach(userItem => {
- userItem.textContent = target.getAttribute('data-useremail')
- })
- userEditedId = target.getAttribute('data-userid')
- if (target.getAttribute('data-submit-url')) {
- document.querySelector('#fr-modal-user-edit form').action = target.getAttribute('data-submit-url')
- }
- histoUpdateValueFromData('#user_edit_userid', 'data-userid', target)
- histoUpdateValueFromData('#user_edit_email', 'data-useremail', target)
- histoUpdateValueFromData('#user_edit_nom', 'data-usernom', target)
- histoUpdateValueFromData('#user_edit_prenom', 'data-userprenom', target)
- const isMailingActive = target.getAttribute('data-userismailingactive')
- if (isMailingActive === '1') {
- document.querySelector('#user_edit_is_mailing_active-1').checked = true
- } else {
- document.querySelector('#user_edit_is_mailing_active-2').checked = true
- }
-
- const elementPermissionAffectation = document.querySelector('#user_edit_permission_affectation')
- if (elementPermissionAffectation) {
- elementPermissionAffectation.removeAttribute('disabled')
- }
-
- const userRole = target.getAttribute('data-userrole')
- const rolesSelect = document.querySelector('#user_edit_roles')
- rolesSelect.value = userRole
- histoUpdatePermissionsFromRole('edit', target.getAttribute('data-userpermissionaffectation') === '1')
-
- document.querySelector('#user_edit_form').addEventListener('submit', (e) => {
- histoUpdateSubmitButton('#user_edit_form_submit', 'Edition en cours...')
- })
- })
-})
-if (document.querySelector('.fr-btn-add-user')) {
- document.querySelector('.fr-btn-add-user').addEventListener('click', () => {
- clearErrors()
- userEditedId = null
- })
-}
if (document.querySelector('#partner_type')) {
histoUpdateFieldsVisibility()
@@ -179,19 +120,6 @@ if (document.querySelector('#partner_type')) {
})
}
-if (document.querySelector('#user_create_roles')) {
- document.querySelector('#user_create_roles').addEventListener('change', () => {
- histoUpdatePermissionsFromRole('create', null)
- })
- histoUpdatePermissionsFromRole('create', null)
-}
-if (document.querySelector('#user_edit_roles')) {
- document.querySelector('#user_edit_roles').addEventListener('change', () => {
- histoUpdatePermissionsFromRole('edit', null)
- })
- histoUpdatePermissionsFromRole('edit', null)
-}
-
const territorySelect = document.querySelector("#partner_territory");
if (territorySelect) {
@@ -240,10 +168,33 @@ deletePartnerForm.forEach(form => {
})
//TODO : delete with feature_multi_territories deletion
+function clearErrors () {
+ const divErrorElements = document.querySelectorAll('.fr-input-group--error')
+ divErrorElements.forEach((divErrorElement) => {
+ divErrorElement.classList.remove('fr-input-group--error')
+ const pErrorElement = divErrorElement.querySelector('.fr-error-text')
+ if (pErrorElement) {
+ pErrorElement.classList.add('fr-hidden')
+ }
+ })
+}
+
+if (document.querySelector('.fr-btn-add-user')) {
+ document.querySelector('.fr-btn-add-user').addEventListener('click', () => {
+ clearErrors()
+ })
+}
+
+if (document.querySelector('#user_create_roles')) {
+ document.querySelector('#user_create_roles').addEventListener('change', () => {
+ histoUpdatePermissionsFromRole('create')
+ })
+ histoUpdatePermissionsFromRole('create')
+}
+
const checkUserMail = (el) => {
const formData = new FormData()
formData.append('email', el.value)
- formData.append('userEditedId', userEditedId)
formData.append('_token', el.getAttribute('data-token'))
fetch('/bo/partenaires/checkmail', {
method: 'POST',
@@ -281,7 +232,7 @@ emailInputs.forEach(emailInput => {
checkUserMail(this)
})
})
-//END TODO
+//END TODO : delete with feature_multi_territories deletion
loadWindowWithLocalStorage('click', '[data-filter-list-partner]', 'search-partner-form')
updateLocalStorageOnEvent('input', '#partner-input', 'back_link_partners')
@@ -290,48 +241,67 @@ updateLocalStorageOnEvent('change', '#partner-filters-types', 'back_link_partner
updateLocalStorageWithPaginationParams('click', '#partner-pagination a', 'back_link_partners')
//add for multi territories
+document.querySelectorAll('.btn-edit-partner-user').forEach(swbtn => {
+ swbtn.addEventListener('click', event => {
+ const refreshUrl = event.target.dataset.refreshUrl;
+ document.querySelector('#fr-modal-user-edit button[type="submit"]').disabled = true;
+ document.querySelector('#fr-modal-user-edit-title').innerHTML = 'Chargement en cours...'
+ document.querySelector('#fr-modal-user-edit-form-container').innerHTML = 'Chargement en cours...'
+ fetch(refreshUrl).then(response => {
+ updateModaleFromResponse(response, '#fr-modal-user-edit', addEventListenerOnRoleChange)
+ })
+ })
+})
+
const modalPartnerUserCreate = document?.querySelector('#fr-modal-user-create')
-const btnSubmit = modalPartnerUserCreate?.querySelector('button[type="submit"]')
if(modalPartnerUserCreate){
modalPartnerUserCreate.addEventListener('dsfr.conceal', (event) => {
const refreshUrl = event.target.dataset.refreshUrl;
- btnSubmit.disabled = true
+ modalPartnerUserCreate.querySelector('button[type="submit"]').disabled = true;
fetch(refreshUrl).then(response => {
- managePartnerAddUserFormResponse(response)
+ updateModaleFromResponse(response, '#fr-modal-user-create', addEventListenerOnRoleChange)
})
})
}
-function attachSubmitPartnerAddUserForm () {
- document.querySelector('#partner-add-user-form').addEventListener('submit', (e) => {
- e.preventDefault()
- btnSubmit.disabled = true
- const formData = new FormData(e.target)
- fetch(e.target.action, {method: 'POST', body: formData}).then(response => {
- managePartnerAddUserFormResponse(response)
+function addEventListenerOnRoleChange(){
+ if (document.querySelector('#user_partner_role')) {
+ document.querySelector('#user_partner_role').addEventListener('change', () => {
+ histoUpdatePermissionsFromRole('partner')
})
- })
+ histoUpdatePermissionsFromRole('partner')
+ }
}
-function managePartnerAddUserFormResponse(response) {
- console.log(response);
- if (response.redirected) {
- window.location.href = response.url
- }else if (response.ok) {
+function updateModaleFromResponse(response, modalSelector, callback = null){
+ if (response.ok) {
response.json().then((response) => {
- document.querySelector('#partner-add-user-title').innerHTML = response.title
- document.querySelector('#partner-add-user-form-container').innerHTML = response.content
- attachSubmitPartnerAddUserForm()
- if (document.querySelector('#user_partner_role')) {
- document.querySelector('#user_partner_role').addEventListener('change', () => {
- histoUpdatePermissionsFromRole('partner', null)
- })
- histoUpdatePermissionsFromRole('partner', null)
+ if (response.redirect) {
+ window.location.href = response.url
+ window.location.reload()
+ }else{
+ document.querySelector(modalSelector + '-title').innerHTML = response.title
+ document.querySelector(modalSelector + '-form-container').innerHTML = response.content
+ attachSubmitFormModal(modalSelector, callback)
+ if (typeof callback === 'function') {
+ callback();
}
- btnSubmit.disabled = false
+ document.querySelector(modalSelector +' button[type="submit"]').disabled = false
+ }
})
}else{
const content = '
Erreur
Une erreur est survenue veuillez fermer cette fenêtre.
'
- document.querySelector('#partner-add-user-form-container').innerHTML = content
+ document.querySelector(modalSelector + '-form-container').innerHTML = content
}
}
+
+function attachSubmitFormModal (modalSelector, callback) {
+ document.querySelector(modalSelector + ' form').addEventListener('submit', (e) => {
+ e.preventDefault()
+ document.querySelector(modalSelector + ' button[type="submit"]').disabled = true
+ const formData = new FormData(e.target)
+ fetch(e.target.action, {method: 'POST', body: formData}).then(response => {
+ updateModaleFromResponse(response, modalSelector, callback)
+ })
+ })
+}
diff --git a/src/Controller/Back/PartnerController.php b/src/Controller/Back/PartnerController.php
index 2fd1c6b69..2bed4ca59 100755
--- a/src/Controller/Back/PartnerController.php
+++ b/src/Controller/Back/PartnerController.php
@@ -11,6 +11,7 @@
use App\Entity\User;
use App\Entity\UserPartner;
use App\Factory\UserFactory;
+use App\Form\EditUserPartnerType;
use App\Form\PartnerPerimetreType;
use App\Form\PartnerType;
use App\Form\SearchPartnerType;
@@ -43,6 +44,7 @@
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
+use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Security\Http\Attribute\IsGranted;
use Symfony\Component\Serializer\Exception\ExceptionInterface;
use Symfony\Component\Validator\Validator\ValidatorInterface;
@@ -378,7 +380,9 @@ public function addUserPartnerMulti(
$message = 'L\'utilisateur a bien été créé. Un e-mail de confirmation a été envoyé à '.$user->getEmail();
$this->addFlash('success', $message);
- return $this->redirectToRoute('back_partner_view', ['id' => $partner->getId(), '_fragment' => 'agents']);
+ $url = $this->generateUrl('back_partner_view', ['id' => $partner->getId(), '_fragment' => 'agents'], UrlGeneratorInterface::ABSOLUTE_URL);
+
+ return $this->json(['redirect' => true, 'url' => $url]);
}
$formMultiMail->get('email')->addError(new FormError('Agent introuvalbe avec cette adresse e-mail.'));
}
@@ -422,7 +426,9 @@ public function addUserPartner(
$message = 'L\'utilisateur a bien été créé. Un e-mail de confirmation a été envoyé à '.$user->getEmail();
$this->addFlash('success', $message);
- return $this->redirectToRoute('back_partner_view', ['id' => $partner->getId(), '_fragment' => 'agents']);
+ $url = $this->generateUrl('back_partner_view', ['id' => $partner->getId(), '_fragment' => 'agents'], UrlGeneratorInterface::ABSOLUTE_URL);
+
+ return $this->json(['redirect' => true, 'url' => $url]);
}
$content = $this->renderView('_partials/_modal_user_create_form.html.twig', ['formUserPartner' => $formUserPartner]);
@@ -496,94 +502,38 @@ public function addUser(
return $this->redirectToRoute('back_partner_view', ['id' => $partner->getId(), '_fragment' => 'agents'], Response::HTTP_SEE_OTHER);
}
- #[Route('/{id}/editerutilisateur', name: 'back_partner_user_edit', methods: ['POST'])]
+ #[Route('/{partner}/editerutilisateur/{user}', name: 'back_partner_user_edit')]
public function editUser(
- Request $request,
Partner $partner,
+ User $user,
+ Request $request,
UserManager $userManager,
- UserRepository $userRepository,
- PartnerRepository $partnerRepository,
- ValidatorInterface $validator,
- ): Response {
- $userId = $request->request->get('user_id');
- $user = $userManager->find((int) $userId);
- /** @var User $user */
- if (!$userId || !$user || !$user->hasPartner($partner)) {
- $this->addFlash('error', 'Utilisateur introuvable.');
-
- return $this->redirectToRoute('back_partner_index', [], Response::HTTP_SEE_OTHER);
- }
- if (!$this->isCsrfTokenValid('partner_user_edit', $request->request->get('_token'))) {
- $this->addFlash('error', 'Token CSRF invalide, merci d\'actualiser la page et réessayer.');
-
- return $this->redirectToRoute('back_partner_view', ['id' => $partner->getId(), '_fragment' => 'agents'], Response::HTTP_SEE_OTHER);
- }
+ ): JsonResponse|RedirectResponse {
$this->denyAccessUnlessGranted('USER_EDIT', $user);
-
- $data = $request->get('user_edit');
- if (!EmailFormatValidator::validate($data['email'])) {
- $this->addFlash('error', 'L\'adresse e-mail n\'est pas valide.');
-
- return $this->redirectToRoute('back_partner_view', ['id' => $partner->getId(), '_fragment' => 'agents'], Response::HTTP_SEE_OTHER);
- }
- if ($data['email'] != $user->getEmail()) {
- $userExist = $userRepository->findOneBy(['email' => $data['email']]);
- if ($userExist && !\in_array('ROLE_USAGER', $userExist->getRoles())) {
- $this->addFlash('error', 'Un utilisateur existe déjà avec cette adresse e-mail.');
-
- return $this->redirectToRoute('back_partner_view', ['id' => $partner->getId(), '_fragment' => 'agents'], Response::HTTP_SEE_OTHER);
- }
- $partnerExist = $partnerRepository->findOneBy(['email' => $data['email']]);
- if ($partnerExist) {
- $this->addFlash('error', 'Un partenaire existe déjà avec cette adresse e-mail.');
-
- return $this->redirectToRoute('back_partner_view', ['id' => $partner->getId(), '_fragment' => 'agents'], Response::HTTP_SEE_OTHER);
+ $originalEmail = $user->getEmail();
+ $editUserRoute = $this->generateUrl('back_partner_user_edit', ['partner' => $partner->getId(), 'user' => $user->getId(), 'from' => $request->query->get('from')]);
+ $formUserPartner = $this->createForm(EditUserPartnerType::class, $user, ['action' => $editUserRoute]);
+ $formUserPartner->handleRequest($request);
+ if ($formUserPartner->isSubmitted() && $formUserPartner->isValid()) {
+ if ($originalEmail != $user->getEmail()) {
+ $user->setPassword('');
+ $userManager->sendAccountActivationNotification($user);
}
- }
- if ($data['roles'] != $user->getRoles()[0]) {
- if (!$this->canAttributeRole($data['roles'])) {
- return $this->redirectToRoute('back_partner_view', ['id' => $partner->getId(), '_fragment' => 'agents'], Response::HTTP_SEE_OTHER);
+ $userManager->flush();
+ $this->addFlash('success', 'L\'utilisateur a bien été modifié.');
+ $url = $this->generateUrl('back_partner_view', ['id' => $partner->getId(), '_fragment' => 'agents'], UrlGeneratorInterface::ABSOLUTE_URL);
+ if ('users' == $request->query->get('from')) {
+ $url = $this->generateUrl('back_user_index', [], UrlGeneratorInterface::ABSOLUTE_URL);
}
- }
- $updateData = [
- 'nom' => $data['nom'],
- 'prenom' => $data['prenom'],
- 'roles' => $data['roles'],
- 'email' => $data['email'],
- 'isMailingActive' => $data['isMailingActive'],
- 'hasPermissionAffectation' => $data['hasPermissionAffectation'] ?? false,
- ];
- if (!$this->isGranted(PartnerVoter::ASSIGN_PERMISSION_AFFECTATION, $partner)) {
- unset($updateData['hasPermissionAffectation']);
- } else {
- $updateData['hasPermissionAffectation'] = $updateData['hasPermissionAffectation'] ?? false;
+ return $this->json(['redirect' => true, 'url' => $url]);
}
+ $content = $this->renderView('_partials/_modal_user_edit_form.html.twig', ['formUserPartner' => $formUserPartner]);
- $user = $userManager->updateUserFromData(
- user: $user,
- data: $updateData,
- save: false
- );
-
- $errors = $validator->validate($user);
- foreach ($errors as $error) {
- $this->addFlash('error', $error->getMessage());
- }
- if (0 === \count($errors)) {
- $userManager->save($user);
- $message = 'L\'utilisateur a bien été modifié.';
- $this->addFlash('success', $message);
- }
-
- $redirect_to = $request->request->get('redirect_to');
- if ('userList' === $redirect_to) {
- return $this->redirectToRoute('back_user_index', [], Response::HTTP_SEE_OTHER);
- }
-
- return $this->redirectToRoute('back_partner_view', ['id' => $partner->getId(), '_fragment' => 'agents'], Response::HTTP_SEE_OTHER);
+ return $this->json(['content' => $content, 'title' => 'Modifier le compte de : '.$user->getEmail()]);
}
+ // TODO : delete with feature_multi_territories deletion
private function canAttributeRole(string $role): bool
{
if (empty($role)) {
diff --git a/src/Entity/User.php b/src/Entity/User.php
index c527ba0f1..07a97673f 100644
--- a/src/Entity/User.php
+++ b/src/Entity/User.php
@@ -23,6 +23,7 @@
#[ORM\Entity(repositoryClass: UserRepository::class)]
#[UniqueEntity('email', message: '{{ value }} existe déja, merci de saisir un nouvel e-mail')]
#[ORM\HasLifecycleCallbacks()]
+#[AppAssert\UserPartnerEmailMulti(groups: ['user_partner_mail_multi'])]
#[AppAssert\UserPartnerEmail(groups: ['user_partner_mail'])]
class User implements UserInterface, EntityHistoryInterface, PasswordAuthenticatedUserInterface, TwoFactorInterface
{
diff --git a/src/Form/EditUserPartnerType.php b/src/Form/EditUserPartnerType.php
new file mode 100755
index 000000000..0946a1edd
--- /dev/null
+++ b/src/Form/EditUserPartnerType.php
@@ -0,0 +1,98 @@
+roles = [];
+ if ($security->isGranted('ROLE_ADMIN')) {
+ $this->roles['Super Admin'] = 'ROLE_ADMIN';
+ }
+ if ($security->isGranted('ROLE_ADMIN_TERRITORY')) {
+ $this->roles['Resp. Territoire'] = 'ROLE_ADMIN_TERRITORY';
+ }
+ $this->roles['Admin. partenaire'] = 'ROLE_ADMIN_PARTNER';
+ $this->roles['Agent'] = 'ROLE_USER_PARTNER';
+ }
+
+ public function buildForm(FormBuilderInterface $builder, array $options): void
+ {
+ $user = $builder->getData();
+ if ($user->getUserPartners()->count() > 1) {
+ $this->roles = [
+ 'Admin. partenaire' => 'ROLE_ADMIN_PARTNER',
+ 'Agent' => 'ROLE_USER_PARTNER',
+ ];
+ }
+ $builder
+ ->add('nom', null, [
+ 'required' => false,
+ ])
+ ->add('prenom', null, [
+ 'required' => false,
+ ])
+ ->add('email', TextType::class, [
+ 'required' => false,
+ 'label' => 'Courriel',
+ 'row_attr' => [
+ 'class' => 'fr-mb-1w',
+ ],
+ ])
+ ->add('role', ChoiceType::class, [
+ 'choices' => $this->roles,
+ 'label' => 'Rôle',
+ 'mapped' => false,
+ ])
+ ->add('isMailingActive', ChoiceType::class, [
+ 'choices' => [
+ 'Oui' => true,
+ 'Non' => false,
+ ],
+ 'expanded' => true,
+ 'label' => 'Recevoir les e-mails ?',
+ 'help' => 'Si vous cochez oui, des e-mails concernant les signalements seront envoyés à cette adresse.',
+ ]);
+ if (1 === $user->getUserPartners()->count() && $this->security->isGranted('ASSIGN_PERMISSION_AFFECTATION', $user->getPartners()->first())) {
+ $builder->add('hasPermissionAffectation', CheckboxType::class, [
+ 'label' => 'Cet utilisateur peut affecter d\'autres partenaires à ses signalements',
+ 'required' => false,
+ 'row_attr' => [
+ 'class' => 'fr-toggle',
+ ],
+ 'attr' => ['class' => 'fr-toggle__input'],
+ 'label_attr' => [
+ 'class' => 'fr-toggle__label',
+ 'data-fr-checked-label' => 'Activé',
+ 'data-fr-unchecked-label' => 'Désactivé',
+ ],
+ ]);
+ }
+ }
+
+ public function configureOptions(OptionsResolver $resolver): void
+ {
+ $resolver->setDefaults([
+ 'data_class' => User::class,
+ 'validation_groups' => ['user_partner_mail', 'user_partner'],
+ ]);
+ }
+
+ public function getBlockPrefix(): string
+ {
+ return 'user_partner';
+ }
+}
diff --git a/src/Form/UserPartnerEmailType.php b/src/Form/UserPartnerEmailType.php
index b242aa616..ae8b50b4a 100644
--- a/src/Form/UserPartnerEmailType.php
+++ b/src/Form/UserPartnerEmailType.php
@@ -24,7 +24,7 @@ public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => User::class,
- 'validation_groups' => ['user_partner_mail'],
+ 'validation_groups' => ['user_partner_mail_multi'],
]);
}
}
diff --git a/src/Form/UserPartnerType.php b/src/Form/UserPartnerType.php
index b03453a52..7e86c124b 100755
--- a/src/Form/UserPartnerType.php
+++ b/src/Form/UserPartnerType.php
@@ -83,7 +83,7 @@ public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => User::class,
- 'validation_groups' => ['user_partner_mail', 'user_partner'],
+ 'validation_groups' => ['user_partner_mail_multi', 'user_partner'],
]);
}
}
diff --git a/src/Manager/UserManager.php b/src/Manager/UserManager.php
index a79dfc3d6..1e9fa3073 100644
--- a/src/Manager/UserManager.php
+++ b/src/Manager/UserManager.php
@@ -33,6 +33,7 @@ public function __construct(
parent::__construct($managerRegistry, $entityName);
}
+ // TODO : delete with feature_multi_territories deletion
public function updateUserFromData(User $user, array $data, bool $save = true): User
{
$emailUpdated = false;
@@ -212,7 +213,7 @@ public function getSystemUser(): ?User
return $this->getRepository()->findOneBy(['email' => $this->parameterBag->get('user_system_email')]);
}
- private function sendAccountActivationNotification(User $user): void
+ public function sendAccountActivationNotification(User $user): void
{
if (!\in_array('ROLE_USAGER', $user->getRoles())
&& User::STATUS_ARCHIVE !== $user->getStatut()
diff --git a/src/Validator/UserPartnerEmailMulti.php b/src/Validator/UserPartnerEmailMulti.php
new file mode 100644
index 000000000..5e951bfd2
--- /dev/null
+++ b/src/Validator/UserPartnerEmailMulti.php
@@ -0,0 +1,14 @@
+getEmail();
+ if (!EmailFormatValidator::validate($email)) {
+ $this->context->buildViolation('L\'adresse e-mail est invalide.')->atPath('email')->addViolation();
+
+ return;
+ }
+ $partnerExist = $this->partnerRepository->findOneBy(['email' => $email]);
+ if ($partnerExist) {
+ $this->context->buildViolation('Un partenaire existe déjà avec cette adresse e-mail.')->atPath('email')->addViolation();
+ }
+ $userExist = $this->userRepository->findAgentByEmail($email);
+ if (!$userExist) {
+ return;
+ }
+ if ($userExist->isTerritoryAdmin()) {
+ $this->context->buildViolation('Un utilisateur Responsable Territoire existe déjà avec cette adresse e-mail.')->atPath('email')->addViolation();
+ }
+ if ($userExist->isSuperAdmin()) {
+ $this->context->buildViolation('Un utilisateur Super Admin existe déjà avec cette adresse e-mail.')->atPath('email')->addViolation();
+ }
+ if ($userExist->hasPermissionAffectation()) {
+ $this->context->buildViolation('Un utilisateur ayant les droits d\'affectation existe déjà avec cette adresse e-mail.')->atPath('email')->addViolation();
+ }
+ if ($userExist->hasPartnerInTerritory($user->getFirstTerritory())) {
+ $this->context->buildViolation('Un utilisateur avec cette adresse e-mail existe déja sur le territoire.')->atPath('email')->addViolation();
+ }
+ }
+}
diff --git a/src/Validator/UserPartnerEmailValidator.php b/src/Validator/UserPartnerEmailValidator.php
index e34f7e9be..0054a7642 100644
--- a/src/Validator/UserPartnerEmailValidator.php
+++ b/src/Validator/UserPartnerEmailValidator.php
@@ -40,21 +40,9 @@ public function validate($user, Constraint $constraint): void
if ($partnerExist) {
$this->context->buildViolation('Un partenaire existe déjà avec cette adresse e-mail.')->atPath('email')->addViolation();
}
- $userExist = $this->userRepository->findAgentByEmail($email);
- if (!$userExist) {
- return;
- }
- if ($userExist->isTerritoryAdmin()) {
- $this->context->buildViolation('Un utilisateur Responsable Territoire existe déjà avec cette adresse e-mail.')->atPath('email')->addViolation();
- }
- if ($userExist->isSuperAdmin()) {
- $this->context->buildViolation('Un utilisateur Super Admin existe déjà avec cette adresse e-mail.')->atPath('email')->addViolation();
- }
- if ($userExist->hasPermissionAffectation()) {
- $this->context->buildViolation('Un utilisateur ayant les droits d\'affectation existe déjà avec cette adresse e-mail.')->atPath('email')->addViolation();
- }
- if ($userExist->hasPartnerInTerritory($user->getFirstTerritory())) {
- $this->context->buildViolation('Un utilisateur avec cette adresse e-mail existe déja sur le territoire.')->atPath('email')->addViolation();
+ $userExist = $this->userRepository->findOneBy(['email' => $email]);
+ if ($userExist && $userExist->getId() !== $user->getId()) {
+ $this->context->buildViolation('Un utilisateur existe déjà avec cette adresse e-mail.')->atPath('email')->addViolation();
}
}
}
diff --git a/templates/_partials/_modal_user_create.html.twig b/templates/_partials/_modal_user_create.html.twig
index caf81a391..4fb5c6386 100755
--- a/templates/_partials/_modal_user_create.html.twig
+++ b/templates/_partials/_modal_user_create.html.twig
@@ -7,13 +7,13 @@
-
-
+
Chargement en cours...
+
Chargement en cours...