Skip to content
Snippets Groups Projects
Commit e8f0e488 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Possibilité d'avoir un même Individu rattaché à plusieurs Utilisateur

parent 32a487ec
No related branches found
No related tags found
No related merge requests found
<?php <?php
use Application\Controller\Factory\UtilisateurControllerFactory; use Application\Controller\Factory\UtilisateurControllerFactory;
use Application\Controller\UtilisateurController;
use Application\Form\CreationUtilisateurForm; use Application\Form\CreationUtilisateurForm;
use Application\Form\CreationUtilisateurFromIndividuForm; use Application\Form\CreationUtilisateurFromIndividuForm;
use Application\Form\Factory\CreationUtilisateurFormFactory; use Application\Form\Factory\CreationUtilisateurFormFactory;
...@@ -101,15 +102,6 @@ return [ ...@@ -101,15 +102,6 @@ return [
], ],
], ],
], ],
'ajouter-pour-individu' => [
'type' => Segment::class,
'options' => [
'route' => '/ajouter-pour-individu/:individu',
'defaults' => [
'action' => 'ajouterFromIndividu',
],
],
],
'creer-compte-local-individu' => [ 'creer-compte-local-individu' => [
'type' => Segment::class, 'type' => Segment::class,
'options' => [ 'options' => [
......
...@@ -255,8 +255,8 @@ class TheseController extends AbstractController ...@@ -255,8 +255,8 @@ class TheseController extends AbstractController
$utilisateurs = []; $utilisateurs = [];
foreach ($these->getActeurs() as $acteur) { foreach ($these->getActeurs() as $acteur) {
$utilisateur = $this->utilisateurService->getRepository()->findByIndividu($acteur->getIndividu()); $utilisateursTrouves = $this->utilisateurService->getRepository()->findByIndividu($acteur->getIndividu()); // ok
$utilisateurs[$acteur->getId()] = $utilisateur; $utilisateurs[$acteur->getId()] = $utilisateursTrouves;
} }
//TODO JP remplacer dans modifierPersopassUrl(); //TODO JP remplacer dans modifierPersopassUrl();
......
...@@ -156,49 +156,6 @@ class UtilisateurController extends \UnicaenAuth\Controller\UtilisateurControlle ...@@ -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. * Usurpe l'identité d'un autre utilisateur.
* *
...@@ -414,9 +371,12 @@ class UtilisateurController extends \UnicaenAuth\Controller\UtilisateurControlle ...@@ -414,9 +371,12 @@ class UtilisateurController extends \UnicaenAuth\Controller\UtilisateurControlle
{ {
$individu = $this->getIndividuService()->getRequestedIndividu($this); $individu = $this->getIndividuService()->getRequestedIndividu($this);
$acteurs = $this->acteurService->getRepository()->findActeursByIndividu($individu); $acteurs = $this->acteurService->getRepository()->findActeursByIndividu($individu);
$utilisateur = $this->utilisateurService->getRepository()->findByIndividu($individu); $utilisateurs = $this->utilisateurService->getRepository()->findByIndividu($individu, $isLocal = true); // done
if ($utilisateur === null AND $individu->getEmail() !== null) $utilisateur = $this->utilisateurService->getRepository()->findByUsername($individu->getEmail()); // 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([ return new ViewModel([
'individu' => $individu, 'individu' => $individu,
...@@ -428,9 +388,9 @@ class UtilisateurController extends \UnicaenAuth\Controller\UtilisateurControlle ...@@ -428,9 +388,9 @@ class UtilisateurController extends \UnicaenAuth\Controller\UtilisateurControlle
public function creerCompteLocalIndividuAction() public function creerCompteLocalIndividuAction()
{ {
$individu = $this->getIndividuService()->getRequestedIndividu($this); $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'); $user = $this->utilisateurService->createFromIndividu($individu, $individu->getEmail(), 'none');
$this->userService->updateUserPasswordResetToken($user); $this->userService->updateUserPasswordResetToken($user);
$url = $this->url()->fromRoute('utilisateur/init-compte', ['token' => $user->getPasswordResetToken()], ['force_canonical' => true], true); $url = $this->url()->fromRoute('utilisateur/init-compte', ['token' => $user->getPasswordResetToken()], ['force_canonical' => true], true);
...@@ -442,9 +402,12 @@ class UtilisateurController extends \UnicaenAuth\Controller\UtilisateurControlle ...@@ -442,9 +402,12 @@ class UtilisateurController extends \UnicaenAuth\Controller\UtilisateurControlle
return $this->redirect()->toRoute('utilisateur/gerer-utilisateur', ['individu' => $individu->getId()], [], true); return $this->redirect()->toRoute('utilisateur/gerer-utilisateur', ['individu' => $individu->getId()], [], true);
} }
public function resetPasswordAction() { public function resetPasswordAction()
{
$individu = $this->getIndividuService()->getRequestedIndividu($this); $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) { if ($utilisateur !== null) {
$this->userService->updateUserPasswordResetToken($utilisateur); $this->userService->updateUserPasswordResetToken($utilisateur);
......
...@@ -163,7 +163,7 @@ class ValidationController extends AbstractController ...@@ -163,7 +163,7 @@ class ValidationController extends AbstractController
/** @var Acteur $acteur */ /** @var Acteur $acteur */
foreach ($these->getActeurs() as $acteur) { foreach ($these->getActeurs() as $acteur) {
$individu = $acteur->getIndividu(); $individu = $acteur->getIndividu();
$utilisateurs[$individu->getId()] = $this->utilisateurService->getRepository()->findByIndividu($individu); $utilisateurs[$individu->getId()] = $this->utilisateurService->getRepository()->findByIndividu($individu); // ok
} }
$view = new ViewModel([ $view = new ViewModel([
......
...@@ -13,23 +13,34 @@ class UtilisateurRepository extends DefaultEntityRepository ...@@ -13,23 +13,34 @@ class UtilisateurRepository extends DefaultEntityRepository
* Recherche les utilisateurs lié à un individu. * Recherche les utilisateurs lié à un individu.
* *
* @param Individu $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') $qb = $this->createQueryBuilder('u')
->join('u.individu', 'i') ->join('u.individu', 'i')
->where('i = :individu') ->where('i = :individu')
->setParameter('individu', $individu); ->setParameter('individu', $individu);
try { if ($isLocal !== null) {
$utilisateur = $qb->getQuery()->getOneOrNullResult(); if ($isLocal) {
} catch (NonUniqueResultException $e) { $qb->andWhere($qb->expr()->notIn('u.password', ['shib', 'ldap']));
} else {
$qb->andWhere($qb->expr()->in('u.password', ['shib', 'ldap']));
}
}
$utilisateurs = $qb->getQuery()->getResult(); $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;
} }
/** /**
......
...@@ -138,6 +138,7 @@ $financementFormatter->setDisplayAs(FinancementFormatter::DISPLAY_AS_LINE); ...@@ -138,6 +138,7 @@ $financementFormatter->setDisplayAs(FinancementFormatter::DISPLAY_AS_LINE);
$results = $acteursFormatter->doFormat($acteurs->toArray()); $results = $acteursFormatter->doFormat($acteurs->toArray());
$previous = ""; $previous = "";
foreach ($results as $result) { foreach ($results as $result) {
$aucunSupannIdDansIndividu = isset($result['alerte-supann-id']);
/** @var Acteur $acteur */ /** @var Acteur $acteur */
$acteur = $result["acteur"]; $acteur = $result["acteur"];
if ($previous != $result["role"]) { if ($previous != $result["role"]) {
...@@ -159,8 +160,8 @@ $financementFormatter->setDisplayAs(FinancementFormatter::DISPLAY_AS_LINE); ...@@ -159,8 +160,8 @@ $financementFormatter->setDisplayAs(FinancementFormatter::DISPLAY_AS_LINE);
if (isset($result["etablissement"]) && trim($result["etablissement"]) != "") { if (isset($result["etablissement"]) && trim($result["etablissement"]) != "") {
$ligne[] = $result["etablissement"]; $ligne[] = $result["etablissement"];
} }
if ($acteur->estDirecteur() && isset($result['alerte-supann-id'])) { if ($acteur->estDirecteur() && $aucunSupannIdDansIndividu) {
if ($utilisateurs[$acteur->getId()] === null) { if (empty($utilisateurs[$acteur->getId()])) {
$ligne[] = sprintf('<span class="glyphicon glyphicon-warning-sign text-danger" title="%s"></span>', $ligne[] = sprintf('<span class="glyphicon glyphicon-warning-sign text-danger" title="%s"></span>',
$result['alerte-supann-id']); $result['alerte-supann-id']);
} else { } else {
......
<?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
...@@ -49,7 +49,7 @@ $canUnvalidate = $this->isAllowed($these, ValidationPrivileges::VALIDATION_CORRE ...@@ -49,7 +49,7 @@ $canUnvalidate = $this->isAllowed($these, ValidationPrivileges::VALIDATION_CORRE
<li> <li>
<?php echo $i = $validation->getIndividu() ?> n'a pas encore validé. <?php echo $i = $validation->getIndividu() ?> n'a pas encore validé.
<?php if (! $i->getSupannId()): ?> <?php if (! $i->getSupannId()): ?>
<?php if ($utilisateurs[$i->getId()] === null) : ?> <?php if (empty($utilisateurs[$i->getId()])) : ?>
<?php <?php
$message = sprintf( $message = sprintf(
"Cette personne ne pourra pas utiliser l'application car il manque des informations la concernant dans %s (source code '%s').", "Cette personne ne pourra pas utiliser l'application car il manque des informations la concernant dans %s (source code '%s').",
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment