Commit 2e93a702 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Merge branch 'update-individu-after-auth' into develop

parents d87f1d2e 3c7dcd94
Loading
Loading
Loading
Loading
+16 −4
Original line number Diff line number Diff line
@@ -3,11 +3,11 @@
namespace Application\Event;

use Application\Entity\Db\Utilisateur;
use Application\Entity\UserWrapper;
use Application\Entity\UserWrapperFactory;
use Application\Service\Etablissement\EtablissementServiceAwareTrait;
use Application\Service\Individu\IndividuServiceAwareTrait;
use Application\Service\Utilisateur\UtilisateurServiceAwareTrait;
use Application\SourceCodeStringHelper;
use UnicaenAuth\Event\Listener\AuthenticatedUserSavedAbstractListener;
use UnicaenAuth\Event\UserAuthenticatedEvent;
use UnicaenAuth\Service\UserContext as UserContextService;
@@ -63,21 +63,33 @@ class UserAuthenticatedEventListener extends AuthenticatedUserSavedAbstractListe
        $userWrapperFactory = new UserWrapperFactory();
        $userWrapper = $userWrapperFactory->createInstanceFromUserAuthenticatedEvent($e);

        $individuUpdateRequired = true;

        if ($userWrapper->getIndividu() !== null) {
            $individu = $userWrapper->getIndividu();
        } else {
            $domaineEtab = $userWrapper->getDomainFromEppn();
            $etablissement = $this->getEtablissementService()->getRepository()->findOneByDomaine($domaineEtab);

            // création de l'Individu si besoin
            $sourceCode = $etablissement->prependPrefixTo($userWrapper->getSupannId());
            // recherche de l'Individu correspondant à l'utilisateur
            $sourceCodeHelper = new SourceCodeStringHelper();
            $sourceCode = $sourceCodeHelper->addPrefixEtablissementTo($userWrapper->getSupannId(), $etablissement);
            $individu = $this->individuService->getRepository()->findOneBySourceCode($sourceCode);

            // création de l'Individu si inexistant
            if (null === $individu) {
                $createur = $this->utilisateurService->getRepository()->fetchAppPseudoUser();
                $individu = $this->individuService->createFromUserWrapperAndEtab($userWrapper, $etablissement, $createur);
                $individu = $this->individuService->createIndividuFromUserWrapperAndEtab($userWrapper, $etablissement, $createur);
                $individuUpdateRequired = false;
            }
        }

        // mise à jour éventuelle de l'Individu à partir des données d'identité
        if ($individuUpdateRequired) {
            $modificateur = $this->utilisateurService->getRepository()->fetchAppPseudoUser();
            $this->individuService->updateIndividuFromUserWrapper($individu, $userWrapper, $modificateur);
        }

        // renseigne le lien utilisateur-->individu
        /** @var Utilisateur $utilisateur */
        $utilisateur = $e->getDbUser();
+27 −2
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@ class IndividuService extends BaseService
     * @return Individu
     * @deprecated À supprimer car non utilisée
     */
    public function createFromPeopleAndEtab(People $people, Etablissement $etablissement)
    public function createIndividuFromPeopleAndEtab(People $people, Etablissement $etablissement)
    {
        $sns = (array)$people->get('sn');
        $usuel = array_pop($sns);
@@ -63,7 +63,7 @@ class IndividuService extends BaseService
     * @param Utilisateur   $utilisateur   Auteur éventuel de la création
     * @return Individu
     */
    public function createFromUserWrapperAndEtab(UserWrapper $userWrapper,
    public function createIndividuFromUserWrapperAndEtab(UserWrapper $userWrapper,
                                                         Etablissement $etablissement,
                                                         Utilisateur $utilisateur = null)
    {
@@ -89,6 +89,31 @@ class IndividuService extends BaseService
        return $entity;
    }

    /**
     * @param Individu    $entity
     * @param UserWrapper $userWrapper
     * @param Utilisateur $utilisateur
     */
    public function updateIndividuFromUserWrapper(Individu $entity,
                                                  UserWrapper $userWrapper,
                                                  Utilisateur $utilisateur)
    {
        $entity->setSupannId($userWrapper->getSupannId());
        $entity->setNomUsuel($userWrapper->getNom() ?: "X"); // NB: le nom est obligatoire mais quid si indisponible ?
        $entity->setNomPatronymique($userWrapper->getNom());
        $entity->setPrenom($userWrapper->getPrenom());
        $entity->setCivilite($userWrapper->getCivilite());
        $entity->setEmail($userWrapper->getEmail());
        $entity->setHistoModificateur($utilisateur);

        $this->getEntityManager()->persist($entity);
        try {
            $this->getEntityManager()->flush($entity);
        } catch (OptimisticLockException $e) {
            throw new RuntimeException("Impossible d'enregistrer l'Individu", null, $e);
        }
    }

    public function existIndividuUtilisateurByEmail($email) {
        $exist_individu = $this->getEntityManager()->getRepository(Individu::class)->findOneBy(["email" => $email]);
        $exist_utilisateur = $this->getEntityManager()->getRepository(Utilisateur::class)->findOneBy(["email" => $email]);