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

Page Utilisateur : affichage aussi des rôles attribués automatiquement.

parent ec24b73b
Loading
Loading
Loading
Loading
+1 −0
Changes for CHANGELOG.md: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ Journal des modifications
- Substitution possible du favicon.
- Possibilité d'accorder un sursis pour le dépôt de la verison corrigée de la thèse.
- Page d'accueil : laïus en cas d'utilisateur ayant plusieurs rôles.
- Page Utilisateur : affichage aussi des rôles attribués automatiquement.
- [FIX] Bloquage de la signature multiple de l'engagement d'impartilité
- [FIX] Bloquage de la validation multiple des propositions lors de la validation acteur
- [FIX] Correction du tri des thèses par titre (plantage) et par date de soutenance (inopérant)
+4 −0
Changes for module/Application/src/Application/Controller/Factory/UtilisateurControllerFactory.php: 4 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@ use Application\Controller\UtilisateurController;
use Application\Form\CreationUtilisateurForm;
use Application\Form\InitCompteForm;
use Application\Service\Acteur\ActeurService;
use Application\Service\Doctorant\DoctorantService;
use Application\Service\EcoleDoctorale\EcoleDoctoraleService;
use Application\Service\Etablissement\EtablissementService;
use Application\Service\Individu\IndividuServiceLocateTrait;
@@ -49,6 +50,7 @@ class UtilisateurControllerFactory
         * @var UserService $userService
         * @var UtilisateurSearchService $utilisateurSearchService
         * @var UserInterface $mapper
         * @var DoctorantService $doctorantService
         */
        $acteurService = $container->get(ActeurService::class);
        $roleService = $container->get('RoleService');
@@ -64,6 +66,7 @@ class UtilisateurControllerFactory
        $userService = $container->get('unicaen-auth_user_service');
        $utilisateurSearchService = $container->get(UtilisateurSearchService::class);
        $userMapper = $container->get('zfcuser_user_mapper');
        $doctorantService = $container->get(DoctorantService::class);

        /**
         * @var InitCompteForm $initCompteForm
@@ -105,6 +108,7 @@ class UtilisateurControllerFactory
        $controller->setAuthModuleOptions($authModuleOptions);
        $controller->setSearchService($utilisateurSearchService);
        $controller->setUserMapper($userMapper);
        $controller->setDoctorantService($doctorantService);

        /**
         * @var SourceCodeStringHelper $sourceCodeHelper
+37 −1
Changes for module/Application/src/Application/Controller/UtilisateurController.php: 37 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@

namespace Application\Controller;

use Application\Entity\Db\Acteur;
use Application\Entity\Db\Individu;
use Application\Entity\Db\TypeStructure;
use Application\Entity\Db\Utilisateur;
@@ -12,6 +13,7 @@ use Application\Search\Controller\SearchControllerInterface;
use Application\Search\Controller\SearchControllerTrait;
use Application\Search\SearchServiceAwareTrait;
use Application\Service\Acteur\ActeurServiceAwareTrait;
use Application\Service\Doctorant\DoctorantServiceAwareTrait;
use Application\Service\EcoleDoctorale\EcoleDoctoraleServiceAwareTrait;
use Application\Service\Etablissement\EtablissementServiceAwareTrait;
use Application\Service\Individu\IndividuServiceAwareTrait;
@@ -59,6 +61,7 @@ class UtilisateurController extends \UnicaenAuth\Controller\UtilisateurControlle
    use SourceCodeStringHelperAwareTrait;
    use UserServiceAwareTrait;
    use TokenServiceAwareTrait;
    use DoctorantServiceAwareTrait;

    use InitCompteFormAwareTrait;

@@ -144,9 +147,10 @@ class UtilisateurController extends \UnicaenAuth\Controller\UtilisateurControlle
        /** @var Utilisateur $utilisateur */
        $utilisateur = $this->utilisateurService->getRepository()->find($id);

        $rolesAffectes = [];
        $rolesAffectes = $rolesAffectesAuto = [];
        if ($individu = $utilisateur->getIndividu()) {
            $rolesAffectes = $individu->getRoles();
            $rolesAffectesAuto = $this->collectRolesDynamiquesForIndividu($individu);
        }

        $roles = $this->roleService->findAllRoles();
@@ -167,6 +171,7 @@ class UtilisateurController extends \UnicaenAuth\Controller\UtilisateurControlle
            'tokens' => $userTokens,
            'roles' => $roles,
            'rolesAffectes' => $rolesAffectes,
            'rolesAffectesAuto' => $rolesAffectesAuto,
            'etablissements' => $etablissements,
            'ecoles' => $ecoles,
            'unites' => $unites,
@@ -175,6 +180,37 @@ class UtilisateurController extends \UnicaenAuth\Controller\UtilisateurControlle

    }

    /**
     * @param \Application\Entity\Db\Individu $individu
     * @return \Application\Entity\Db\Role[]
     */
    private function collectRolesDynamiquesForIndividu(Individu $individu): array
    {
        $roles = [];

        // rôles d'acteur
        $acteurs = $this->acteurService->getRepository()->findActeursByIndividu($individu);
        if ($acteurs) {
            $acteursDirecteurThese = $this->acteurService->filterActeursDirecteurThese($acteurs);
            $acteursCoDirecteurThese = $this->acteurService->filterActeursCoDirecteurThese($acteurs);
            $acteursPresidentJury = $this->acteurService->filterActeursPresidentJury($acteurs);
            $acteursRapporteurJury = $this->acteurService->filterActeursRapporteurJury($acteurs);
            $roles = array_merge($roles, array_map(
                function (Acteur $a) {
                    return $a->getRole();
                },
                array_merge($acteursDirecteurThese, $acteursCoDirecteurThese, $acteursPresidentJury, $acteursRapporteurJury)
            ));
        }

        $doctorant = $this->doctorantService->getRepository()->findOneByIndividu($individu);
        if ($doctorant) {
            $roles[] = $this->roleService->getRepository()->findRoleDoctorantForEtab($doctorant->getEtablissement());
        }

        return array_unique($roles);
    }

    /**
     * AJAX.
     *
+6 −2
Changes for module/Application/src/Application/Entity/Db/Repository/DoctorantRepository.php: 6 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ use Application\Entity\Db\Individu;
use Application\Entity\Db\These;
use Doctrine\ORM\NonUniqueResultException;
use Doctrine\ORM\Query\Expr\Join;
use UnicaenApp\Exception\RuntimeException;

class DoctorantRepository extends DefaultEntityRepository
{
@@ -33,9 +34,8 @@ class DoctorantRepository extends DefaultEntityRepository
    /**
     * @param Individu $individu
     * @return Doctorant|null
     * @throws NonUniqueResultException
     */
    public function findOneByIndividu(Individu $individu)
    public function findOneByIndividu(Individu $individu): ?Doctorant
    {
        $qb = $this->createQueryBuilder('d');
        $qb
@@ -44,7 +44,11 @@ class DoctorantRepository extends DefaultEntityRepository
            ->andWhereNotHistorise()
            ->setParameter('individu', $individu);

        try {
            return $qb->getQuery()->getOneOrNullResult();
        } catch (NonUniqueResultException $e) {
            throw new RuntimeException("Anomalie rencontrée : 2 doctorants liés au même individu !");
        }
    }

    /**
+2 −5
Changes for module/Application/src/Application/Service/Doctorant/DoctorantService.php: 2 added lines, 5 removed lines.
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ namespace Application\Service\Doctorant;

use Application\Entity\Db\Doctorant;
use Application\Entity\Db\DoctorantCompl;
use Application\Entity\Db\Individu;
use Application\Entity\Db\Repository\DoctorantRepository;
use Application\Entity\Db\Utilisateur;
use Application\Entity\UserWrapper;
@@ -61,14 +62,10 @@ class DoctorantService extends BaseService
     * @param UserWrapper $user
     * @return Doctorant|null
     */
    public function findOneByUserWrapper(UserWrapper $user)
    public function findOneByUserWrapper(UserWrapper $user): ?Doctorant
    {
        if ($individu = $user->getIndividu()) {
            try {
            return $this->getRepository()->findOneByIndividu($individu);
            } catch (NonUniqueResultException $e) {
                throw new RuntimeException("Anomalie: Plusieurs doctorants pour un individu ont été trouvés");
            }
        }

        $id = $user->getSupannId();
Loading