Commit c072df4c authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

[FIX] Corrections pour le cas où le supannId est null

parent 47471953
Loading
Loading
Loading
Loading
+1 −1
Changes for module/Application/src/Application/Entity/Db/Repository/IndividuRepository.php: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -43,7 +43,7 @@ class IndividuRepository extends DefaultEntityRepository
        // C'est l'identifiant trouvé dans le "supann{Ref|Emp|Etu}Id" présent dans les données d'authentification
        // qui nous permet de trouver l'Individu correspodant à l'Utilisateur.
        $supannId = $userWrapper->getSupannId();
        if ($supannId === null) {
        if (! $supannId) {
            // Si on a rien à se mettre sous la dent, on ne cherche pas plus loin !
            return null;
        }
+3 −1
Changes for module/Application/src/Application/Event/UserAuthenticatedEventListener.php: 3 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -73,8 +73,10 @@ class UserAuthenticatedEventListener extends AuthenticatedUserSavedAbstractListe
        // renseigne le lien utilisateur-->individu
        /** @var Utilisateur $utilisateur */
        $utilisateur = $e->getDbUser();
        if ($individu !== null) {
            $this->utilisateurService->setIndividuForUtilisateur($individu, $utilisateur);
        }
    }

    /**
     * @param UserWrapper $userWrapper
@@ -116,7 +118,7 @@ class UserAuthenticatedEventListener extends AuthenticatedUserSavedAbstractListe
            }
        }

        // création de l'Individu si besoin
        // création de l'Individu si besoin et si possible
        if ($createIndividu) {
            $individu = $this->individuService->createIndividuFromUserWrapperAndEtab($userWrapper, $etablissement);
        }
+9 −1
Changes for module/Application/src/Application/Provider/IdentityProvider.php: 9 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -117,7 +117,12 @@ class IdentityProvider implements ProviderInterface, ChainableProvider
     */
    private function getRolesFromActeur(): array
    {
        $acteurs = $this->acteurService->findAllActeursByUser($this->userWrapper);
        $individu = $this->userWrapper->getIndividu();
        if ($individu === null) {
            return [];
        }

        $acteurs = $this->acteurService->getRepository()->findActeursByIndividu($individu);

        $acteursDirecteurThese = $this->acteurService->filterActeursDirecteurThese($acteurs);
        $acteursCoDirecteurThese = $this->acteurService->filterActeursCoDirecteurThese($acteurs);
@@ -139,13 +144,16 @@ class IdentityProvider implements ProviderInterface, ChainableProvider
        // peut-être disposons-nous de l'Individu (cas d'une authentification locale)
        $individu = $this->userWrapper->getIndividu();

        $individuRoles = [];
        if ($individu !== null) {
            $individuRoles = $this->roleService->findIndividuRolesByIndividu($individu);
        } else {
            $id = $this->userWrapper->getSupannId();
            if ($id) {
                $pattern = $this->sourceCodeStringHelper->generateSearchPatternForAnyPrefix($id);
                $individuRoles = $this->roleService->findIndividuRolesByIndividuSourceCodePattern($pattern);
            }
        }

        usort($individuRoles, IndividuRole::getComparisonFunction());

+7 −26
Changes for module/Application/src/Application/Service/Individu/IndividuService.php: 7 added lines, 26 removed lines.
Original line number Diff line number Diff line
@@ -82,10 +82,15 @@ class IndividuService extends BaseService
                                                         Etablissement $etablissement,
                                                         Utilisateur $utilisateur = null)
    {
        $sourceCode = $this->sourceCodeStringHelper->addEtablissementPrefixTo($userWrapper->getSupannId(), $etablissement);
        $supannId = $userWrapper->getSupannId();
        if (! $supannId) {
            return null;
        }

        $sourceCode = $this->sourceCodeStringHelper->addEtablissementPrefixTo($supannId, $etablissement);

        $entity = new Individu();
        $entity->setSupannId($userWrapper->getSupannId());
        $entity->setSupannId($supannId);
        $entity->setNomUsuel($userWrapper->getNom() ?: "X"); // NB: le nom est obligatoire mais pas forcément disponible
        $entity->setNomPatronymique($userWrapper->getNom());
        $entity->setPrenom($userWrapper->getPrenom());
@@ -104,30 +109,6 @@ class IndividuService extends BaseService
        return $entity;
    }

    /**
     * @param Individu    $entity
     * @param UserWrapper $userWrapper
     * @param Utilisateur $utilisateur
     */
    public function updateIndividuFromUserWrapper(Individu $entity,
                                                  UserWrapper $userWrapper,
                                                  Utilisateur $utilisateur = null)
    {
        $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->getAppPseudoUtilisateur());

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

    /**
     * Met à jour le SOURCE_CODE d'un individu à partir de l'établissement spécifié.
     *