diff --git a/module/Application/config/others/utilisateur.config.php b/module/Application/config/others/utilisateur.config.php index ee2a72a98ebbde843248ead914a675da5745e85a..30766de517c79ae25adc54cc5dd540ef3971a7b5 100755 --- a/module/Application/config/others/utilisateur.config.php +++ b/module/Application/config/others/utilisateur.config.php @@ -1,6 +1,7 @@ <?php use Application\Controller\Factory\UtilisateurControllerFactory; +use Application\Controller\UtilisateurController; use Application\Form\CreationUtilisateurForm; use Application\Form\CreationUtilisateurFromIndividuForm; use Application\Form\Factory\CreationUtilisateurFormFactory; @@ -101,15 +102,6 @@ return [ ], ], ], - 'ajouter-pour-individu' => [ - 'type' => Segment::class, - 'options' => [ - 'route' => '/ajouter-pour-individu/:individu', - 'defaults' => [ - 'action' => 'ajouterFromIndividu', - ], - ], - ], 'creer-compte-local-individu' => [ 'type' => Segment::class, 'options' => [ diff --git a/module/Application/src/Application/Controller/TheseController.php b/module/Application/src/Application/Controller/TheseController.php index 9a9d2d8f16e6287cec9cc9dd6e979887e2cda209..c1ecd4350bb585b19ceff228298b9d5933e2d85f 100755 --- a/module/Application/src/Application/Controller/TheseController.php +++ b/module/Application/src/Application/Controller/TheseController.php @@ -255,8 +255,8 @@ class TheseController extends AbstractController $utilisateurs = []; foreach ($these->getActeurs() as $acteur) { - $utilisateur = $this->utilisateurService->getRepository()->findByIndividu($acteur->getIndividu()); - $utilisateurs[$acteur->getId()] = $utilisateur; + $utilisateursTrouves = $this->utilisateurService->getRepository()->findByIndividu($acteur->getIndividu()); // ok + $utilisateurs[$acteur->getId()] = $utilisateursTrouves; } //TODO JP remplacer dans modifierPersopassUrl(); diff --git a/module/Application/src/Application/Controller/UtilisateurController.php b/module/Application/src/Application/Controller/UtilisateurController.php index ff4f7164e3bcada3ae8b21e89a595de39019b9ac..20d91255817d4e605713ad0fa710f9b6de3e02d0 100644 --- a/module/Application/src/Application/Controller/UtilisateurController.php +++ b/module/Application/src/Application/Controller/UtilisateurController.php @@ -156,49 +156,6 @@ class UtilisateurController extends \UnicaenAuth\Controller\UtilisateurControlle ]); } - /** - * @return ViewModel - */ - public function ajouterFromIndividuAction() - { - /** @var Individu $individu */ - $individuId = $this->params('individu'); - $individu = $this->individuService->getRepository()->findOneBy(["id"=>$individuId]); - if ($individu === null) { - throw new RuntimeException("Individu introuvable avec cet id"); - } - - $utilisateur = $this->utilisateurService->getRepository()->findByIndividu($individu); - if ($utilisateur !== null) { - throw new RuntimeException("Il existe déjà un utilisateur lié à l'individu $individu."); - } - - /** @var CreationUtilisateurFromIndividuForm $form */ - $form = $this->getServiceLocator()->get('FormElementManager')->get(CreationUtilisateurFromIndividuForm::class); - $form->setIndividu($individu); - - /** @var Request $request */ - $request = $this->getRequest(); - if ($request->isPost()) { - $data = $request->getPost(); - $form->setData($data); - if ($form->isValid()) { - if (!empty($data['email'])) { - $individu->setEmail($data['email']); - } - $utilisateur = $this->utilisateurService->createFromIndividuAndFormData($individu, $data->toArray()); - $this->flashMessenger()->addSuccessMessage( - "Utilisateur <strong>{$utilisateur->getUsername()}</strong> créé avec succès à partir de l'individu $individu."); - $this->redirect()->toRoute('utilisateur'); - } - } - - return new ViewModel([ - 'form' => $form, - 'individu' => $individu, - ]); - } - /** * Usurpe l'identité d'un autre utilisateur. * @@ -414,9 +371,12 @@ class UtilisateurController extends \UnicaenAuth\Controller\UtilisateurControlle { $individu = $this->getIndividuService()->getRequestedIndividu($this); $acteurs = $this->acteurService->getRepository()->findActeursByIndividu($individu); - $utilisateur = $this->utilisateurService->getRepository()->findByIndividu($individu); - if ($utilisateur === null AND $individu->getEmail() !== null) $utilisateur = $this->utilisateurService->getRepository()->findByUsername($individu->getEmail()); - + $utilisateurs = $this->utilisateurService->getRepository()->findByIndividu($individu, $isLocal = true); // done + // NB: findByIndividu() avec $isLocal = true renverra 1 utilisateur au maximum + $utilisateur = $utilisateurs ? current($utilisateurs) : null; + if ($utilisateur === null AND $individu->getEmail() !== null) { + $utilisateur = $this->utilisateurService->getRepository()->findByUsername($individu->getEmail()); + } return new ViewModel([ 'individu' => $individu, @@ -428,9 +388,9 @@ class UtilisateurController extends \UnicaenAuth\Controller\UtilisateurControlle public function creerCompteLocalIndividuAction() { $individu = $this->getIndividuService()->getRequestedIndividu($this); - $utilisateur = $this->utilisateurService->getRepository()->findByIndividu($individu); + $utilisateurs = $this->utilisateurService->getRepository()->findByIndividu($individu); // done - if ($utilisateur === null) { + if (empty($utilisateurs)) { $user = $this->utilisateurService->createFromIndividu($individu, $individu->getEmail(), 'none'); $this->userService->updateUserPasswordResetToken($user); $url = $this->url()->fromRoute('utilisateur/init-compte', ['token' => $user->getPasswordResetToken()], ['force_canonical' => true], true); @@ -442,9 +402,12 @@ class UtilisateurController extends \UnicaenAuth\Controller\UtilisateurControlle return $this->redirect()->toRoute('utilisateur/gerer-utilisateur', ['individu' => $individu->getId()], [], true); } - public function resetPasswordAction() { + public function resetPasswordAction() + { $individu = $this->getIndividuService()->getRequestedIndividu($this); - $utilisateur = $this->utilisateurService->getRepository()->findByIndividu($individu); + $utilisateurs = $this->utilisateurService->getRepository()->findByIndividu($individu, $isLocal = true); // done + // NB: findByIndividu() avec $isLocal = true renverra 1 utilisateur au maximum + $utilisateur = $utilisateurs ? current($utilisateurs) : null; if ($utilisateur !== null) { $this->userService->updateUserPasswordResetToken($utilisateur); diff --git a/module/Application/src/Application/Controller/ValidationController.php b/module/Application/src/Application/Controller/ValidationController.php index b2e61652344f05afca75117979fdb69adb15587a..562453e9ac3ac96844b27ca4327f51c301bdbf24 100755 --- a/module/Application/src/Application/Controller/ValidationController.php +++ b/module/Application/src/Application/Controller/ValidationController.php @@ -163,7 +163,7 @@ class ValidationController extends AbstractController /** @var Acteur $acteur */ foreach ($these->getActeurs() as $acteur) { $individu = $acteur->getIndividu(); - $utilisateurs[$individu->getId()] = $this->utilisateurService->getRepository()->findByIndividu($individu); + $utilisateurs[$individu->getId()] = $this->utilisateurService->getRepository()->findByIndividu($individu); // ok } $view = new ViewModel([ diff --git a/module/Application/src/Application/Entity/Db/Repository/UtilisateurRepository.php b/module/Application/src/Application/Entity/Db/Repository/UtilisateurRepository.php index 559d5b8fe9f586cea3b9a71e3f52232e9cefa8ad..c1c0d8a76d0c32301f964b7387fd562011893bcd 100644 --- a/module/Application/src/Application/Entity/Db/Repository/UtilisateurRepository.php +++ b/module/Application/src/Application/Entity/Db/Repository/UtilisateurRepository.php @@ -12,24 +12,35 @@ class UtilisateurRepository extends DefaultEntityRepository /** * Recherche les utilisateurs lié à un individu. * - * @param Individu $individu - * @return Utilisateur + * @param Individu $individu + * @param bool|null $isLocal + * @return Utilisateur[] */ - public function findByIndividu(Individu $individu) + public function findByIndividu(Individu $individu, $isLocal = null) { $qb = $this->createQueryBuilder('u') ->join('u.individu', 'i') ->where('i = :individu') ->setParameter('individu', $individu); - try { - $utilisateur = $qb->getQuery()->getOneOrNullResult(); - } catch (NonUniqueResultException $e) { - $utilisateurs = $qb->getQuery()->getResult(); - throw new RuntimeException("Plusieurs (".count($utilisateurs).") Utilisateur partagent le même individu [".$individu->getId()."]", 0, $e); + if ($isLocal !== null) { + if ($isLocal) { + $qb->andWhere($qb->expr()->notIn('u.password', ['shib', 'ldap'])); + } else { + $qb->andWhere($qb->expr()->in('u.password', ['shib', 'ldap'])); + } } - return $utilisateur; + $utilisateurs = $qb->getQuery()->getResult(); + + if ($isLocal && count($utilisateurs) > 1) { + throw new RuntimeException( + "Plusieurs Utilisateur partagent le même individu " . $individu->getId() . " : " . + implode(', ', array_map(function (Utilisateur $u) { return $u->getId(); }, $utilisateurs)) + ); + } + + return $utilisateurs; } /** diff --git a/module/Application/view/application/these/identite.phtml b/module/Application/view/application/these/identite.phtml index 56ca16c029a8fc96446b655b5f5fdda088db3193..c35ed6290483cfcb1b79f6ea45ba30699770d830 100644 --- a/module/Application/view/application/these/identite.phtml +++ b/module/Application/view/application/these/identite.phtml @@ -138,6 +138,7 @@ $financementFormatter->setDisplayAs(FinancementFormatter::DISPLAY_AS_LINE); $results = $acteursFormatter->doFormat($acteurs->toArray()); $previous = ""; foreach ($results as $result) { + $aucunSupannIdDansIndividu = isset($result['alerte-supann-id']); /** @var Acteur $acteur */ $acteur = $result["acteur"]; if ($previous != $result["role"]) { @@ -159,8 +160,8 @@ $financementFormatter->setDisplayAs(FinancementFormatter::DISPLAY_AS_LINE); if (isset($result["etablissement"]) && trim($result["etablissement"]) != "") { $ligne[] = $result["etablissement"]; } - if ($acteur->estDirecteur() && isset($result['alerte-supann-id'])) { - if ($utilisateurs[$acteur->getId()] === null) { + if ($acteur->estDirecteur() && $aucunSupannIdDansIndividu) { + if (empty($utilisateurs[$acteur->getId()])) { $ligne[] = sprintf('<span class="glyphicon glyphicon-warning-sign text-danger" title="%s"></span>', $result['alerte-supann-id']); } else { diff --git a/module/Application/view/application/utilisateur/ajouter-from-individu.phtml b/module/Application/view/application/utilisateur/ajouter-from-individu.phtml deleted file mode 100644 index 21f08179fc57a463ca023240f70ad23041fdf131..0000000000000000000000000000000000000000 --- a/module/Application/view/application/utilisateur/ajouter-from-individu.phtml +++ /dev/null @@ -1,32 +0,0 @@ -<?php - -use Application\Controller\UtilisateurController; -use Application\Entity\Db\Individu; -use Zend\Form\Form; -use Application\View\Renderer\PhpRenderer; - -/** - * @var Form $form - * @var Individu $individu - * @var PhpRenderer $this - * - * @see UtilisateurController::ajouterFromIndividuAction() - */ -?> - -<?php $this->headTitle($this->translate("Création d'utilisateur par individu")) ?> - -<h1 class="page-header"><?php echo $this->translate("Création d'utilisateur à partir d'un individu existant"); ?> </h1> - -<p class="lead"> - Cette page permet de créer un utilisateur <em>manuellement</em> à partir de - <strong><?php echo $individu ?> (<?php echo $individu->getId() ?>)</strong>, individu existant en base de données. -</p> -<p class="lead"> - <strong>NB:</strong> l'adresse électronique sera l'identifiant de connexion de l'utilisateur, - elle doit donc être unique. -</p> - -<div class="col-md-4"> - <?php echo $this->form()->render($form->prepare()) ?> -</div> \ No newline at end of file diff --git a/module/Application/view/application/validation/these-corrigee/validation-correction.phtml b/module/Application/view/application/validation/these-corrigee/validation-correction.phtml index a7c3e3a90d6568ad1ff4c9759cbf2c53f40d9b45..b90e5f34865ca10580f117ab3d442258f8ee9f47 100644 --- a/module/Application/view/application/validation/these-corrigee/validation-correction.phtml +++ b/module/Application/view/application/validation/these-corrigee/validation-correction.phtml @@ -49,7 +49,7 @@ $canUnvalidate = $this->isAllowed($these, ValidationPrivileges::VALIDATION_CORRE <li> <?php echo $i = $validation->getIndividu() ?> n'a pas encore validé. <?php if (! $i->getSupannId()): ?> - <?php if ($utilisateurs[$i->getId()] === null) : ?> + <?php if (empty($utilisateurs[$i->getId()])) : ?> <?php $message = sprintf( "Cette personne ne pourra pas utiliser l'application car il manque des informations la concernant dans %s (source code '%s').",