Loading CHANGELOG.md +1 −0 Changes for CHANGELOG.md: 1 added line, 0 removed lines. Original line number Diff line number Diff line Loading @@ -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) Loading module/Application/src/Application/Controller/Factory/UtilisateurControllerFactory.php +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 Loading @@ -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; Loading Loading @@ -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'); Loading @@ -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 Loading Loading @@ -105,6 +108,7 @@ class UtilisateurControllerFactory $controller->setAuthModuleOptions($authModuleOptions); $controller->setSearchService($utilisateurSearchService); $controller->setUserMapper($userMapper); $controller->setDoctorantService($doctorantService); /** * @var SourceCodeStringHelper $sourceCodeHelper Loading module/Application/src/Application/Controller/UtilisateurController.php +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 Loading @@ -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; Loading @@ -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; Loading Loading @@ -59,6 +61,7 @@ class UtilisateurController extends \UnicaenAuth\Controller\UtilisateurControlle use SourceCodeStringHelperAwareTrait; use UserServiceAwareTrait; use TokenServiceAwareTrait; use DoctorantServiceAwareTrait; use InitCompteFormAwareTrait; Loading Loading @@ -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(); Loading @@ -167,6 +171,7 @@ class UtilisateurController extends \UnicaenAuth\Controller\UtilisateurControlle 'tokens' => $userTokens, 'roles' => $roles, 'rolesAffectes' => $rolesAffectes, 'rolesAffectesAuto' => $rolesAffectesAuto, 'etablissements' => $etablissements, 'ecoles' => $ecoles, 'unites' => $unites, Loading @@ -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. * Loading module/Application/src/Application/Entity/Db/Repository/DoctorantRepository.php +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 Loading @@ -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 { Loading @@ -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 Loading @@ -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 !"); } } /** Loading module/Application/src/Application/Service/Doctorant/DoctorantService.php +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 Loading @@ -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; Loading Loading @@ -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 Loading
CHANGELOG.md +1 −0 Changes for CHANGELOG.md: 1 added line, 0 removed lines. Original line number Diff line number Diff line Loading @@ -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) Loading
module/Application/src/Application/Controller/Factory/UtilisateurControllerFactory.php +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 Loading @@ -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; Loading Loading @@ -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'); Loading @@ -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 Loading Loading @@ -105,6 +108,7 @@ class UtilisateurControllerFactory $controller->setAuthModuleOptions($authModuleOptions); $controller->setSearchService($utilisateurSearchService); $controller->setUserMapper($userMapper); $controller->setDoctorantService($doctorantService); /** * @var SourceCodeStringHelper $sourceCodeHelper Loading
module/Application/src/Application/Controller/UtilisateurController.php +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 Loading @@ -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; Loading @@ -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; Loading Loading @@ -59,6 +61,7 @@ class UtilisateurController extends \UnicaenAuth\Controller\UtilisateurControlle use SourceCodeStringHelperAwareTrait; use UserServiceAwareTrait; use TokenServiceAwareTrait; use DoctorantServiceAwareTrait; use InitCompteFormAwareTrait; Loading Loading @@ -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(); Loading @@ -167,6 +171,7 @@ class UtilisateurController extends \UnicaenAuth\Controller\UtilisateurControlle 'tokens' => $userTokens, 'roles' => $roles, 'rolesAffectes' => $rolesAffectes, 'rolesAffectesAuto' => $rolesAffectesAuto, 'etablissements' => $etablissements, 'ecoles' => $ecoles, 'unites' => $unites, Loading @@ -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. * Loading
module/Application/src/Application/Entity/Db/Repository/DoctorantRepository.php +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 Loading @@ -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 { Loading @@ -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 Loading @@ -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 !"); } } /** Loading
module/Application/src/Application/Service/Doctorant/DoctorantService.php +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 Loading @@ -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; Loading Loading @@ -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