Loading module/Application/config/others/utilisateur.config.php +1 −9 Changes for module/Application/config/others/utilisateur.config.php: 1 added line, 9 removed lines. Original line number Diff line number Diff line <?php use Application\Controller\Factory\UtilisateurControllerFactory; use Application\Controller\UtilisateurController; use Application\Form\CreationUtilisateurForm; use Application\Form\CreationUtilisateurFromIndividuForm; use Application\Form\Factory\CreationUtilisateurFormFactory; Loading Loading @@ -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' => [ Loading module/Application/src/Application/Controller/TheseController.php +2 −2 Changes for module/Application/src/Application/Controller/TheseController.php: 2 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -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(); Loading module/Application/src/Application/Controller/UtilisateurController.php +13 −50 Changes for module/Application/src/Application/Controller/UtilisateurController.php: 13 added lines, 50 removed lines. Original line number Diff line number Diff line Loading @@ -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. * Loading Loading @@ -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, Loading @@ -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); Loading @@ -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); Loading module/Application/src/Application/Controller/ValidationController.php +1 −1 Changes for module/Application/src/Application/Controller/ValidationController.php: 1 added line, 1 removed line. Original line number Diff line number Diff line Loading @@ -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([ Loading module/Application/src/Application/Entity/Db/Repository/UtilisateurRepository.php +18 −7 Changes for module/Application/src/Application/Entity/Db/Repository/UtilisateurRepository.php: 18 added lines, 7 removed lines. Original line number Diff line number Diff line Loading @@ -13,23 +13,34 @@ class UtilisateurRepository extends DefaultEntityRepository * Recherche les utilisateurs lié à un individu. * * @param Individu $individu * @return Utilisateur * @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) { if ($isLocal !== null) { if ($isLocal) { $qb->andWhere($qb->expr()->notIn('u.password', ['shib', 'ldap'])); } else { $qb->andWhere($qb->expr()->in('u.password', ['shib', 'ldap'])); } } $utilisateurs = $qb->getQuery()->getResult(); throw new RuntimeException("Plusieurs (".count($utilisateurs).") Utilisateur partagent le même individu [".$individu->getId()."]", 0, $e); 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 $utilisateur; return $utilisateurs; } /** Loading Loading
module/Application/config/others/utilisateur.config.php +1 −9 Changes for module/Application/config/others/utilisateur.config.php: 1 added line, 9 removed lines. Original line number Diff line number Diff line <?php use Application\Controller\Factory\UtilisateurControllerFactory; use Application\Controller\UtilisateurController; use Application\Form\CreationUtilisateurForm; use Application\Form\CreationUtilisateurFromIndividuForm; use Application\Form\Factory\CreationUtilisateurFormFactory; Loading Loading @@ -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' => [ Loading
module/Application/src/Application/Controller/TheseController.php +2 −2 Changes for module/Application/src/Application/Controller/TheseController.php: 2 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -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(); Loading
module/Application/src/Application/Controller/UtilisateurController.php +13 −50 Changes for module/Application/src/Application/Controller/UtilisateurController.php: 13 added lines, 50 removed lines. Original line number Diff line number Diff line Loading @@ -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. * Loading Loading @@ -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, Loading @@ -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); Loading @@ -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); Loading
module/Application/src/Application/Controller/ValidationController.php +1 −1 Changes for module/Application/src/Application/Controller/ValidationController.php: 1 added line, 1 removed line. Original line number Diff line number Diff line Loading @@ -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([ Loading
module/Application/src/Application/Entity/Db/Repository/UtilisateurRepository.php +18 −7 Changes for module/Application/src/Application/Entity/Db/Repository/UtilisateurRepository.php: 18 added lines, 7 removed lines. Original line number Diff line number Diff line Loading @@ -13,23 +13,34 @@ class UtilisateurRepository extends DefaultEntityRepository * Recherche les utilisateurs lié à un individu. * * @param Individu $individu * @return Utilisateur * @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) { if ($isLocal !== null) { if ($isLocal) { $qb->andWhere($qb->expr()->notIn('u.password', ['shib', 'ldap'])); } else { $qb->andWhere($qb->expr()->in('u.password', ['shib', 'ldap'])); } } $utilisateurs = $qb->getQuery()->getResult(); throw new RuntimeException("Plusieurs (".count($utilisateurs).") Utilisateur partagent le même individu [".$individu->getId()."]", 0, $e); 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 $utilisateur; return $utilisateurs; } /** Loading