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').",