Loading CHANGELOG.md +1 −0 Changes for CHANGELOG.md: 1 added line, 0 removed lines. Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ Journal des modifications 13.5.0 ------ - Formations : petites améliorations concernant les enquêtes. - [FIX] Formations suivies : rétablissement de l'accès au dépôt de justificatif d'absence. 13.4.0 Loading module/Formation/config/others/enquete.config.php +18 −1 Changes for module/Formation/config/others/enquete.config.php: 18 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -3,6 +3,8 @@ namespace Formation; use Application\Navigation\ApplicationNavigationFactory; use Formation\Assertion\Enquete\EnqueteAssertion; use Formation\Assertion\Enquete\EnqueteAssertionFactory; use Formation\Controller\EnqueteQuestionController; use Formation\Controller\EnqueteQuestionControllerFactory; use Formation\Controller\EnqueteReponseController; Loading Loading @@ -33,9 +35,23 @@ use Formation\Service\EnqueteReponse\Search\EnqueteReponseSearchServiceFactory; use Laminas\Router\Http\Literal; use Laminas\Router\Http\Segment; use UnicaenPrivilege\Guard\PrivilegeController; use UnicaenPrivilege\Provider\Rule\PrivilegeRuleProvider; return [ 'bjyauthorize' => [ 'rule_providers' => [ PrivilegeRuleProvider::class => [ 'allow' => [ [ 'privileges' => [ EnquetePrivileges::ENQUETE_REPONSE_REPONDRE, ], 'resources' => ['Inscription'], 'assertion' => EnqueteAssertion::class, ], ], ], ], 'guards' => [ PrivilegeController::class => [ [ Loading Loading @@ -98,6 +114,7 @@ return [ 'privileges' => [ EnquetePrivileges::ENQUETE_REPONSE_REPONDRE, ], 'assertion' => EnqueteAssertion::class, ], [ 'controller' => EnqueteReponseRechercheController::class, Loading Loading @@ -337,8 +354,8 @@ return [ EnqueteCategorieService::class => EnqueteCategorieServiceFactory::class, EnqueteQuestionService::class => EnqueteQuestionServiceFactory::class, EnqueteReponseService::class => EnqueteReponseServiceFactory::class, EnqueteReponseSearchService::class => EnqueteReponseSearchServiceFactory::class, EnqueteAssertion::class => EnqueteAssertionFactory::class, ], ], 'controllers' => [ Loading module/Formation/src/Formation/Assertion/Enquete/EnqueteAssertion.php 0 → 100644 +86 −0 Changes for module/Formation/src/Formation/Assertion/Enquete/EnqueteAssertion.php: 86 added lines, 0 removed lines. Original line number Diff line number Diff line <?php namespace Formation\Assertion\Enquete; use Application\Assertion\AbstractAssertion; use Application\Entity\Db\Role; use Application\Service\UserContextServiceAwareInterface; use Doctorant\Service\DoctorantServiceAwareTrait; use Formation\Entity\Db\Inscription; use Formation\Provider\Privilege\EnquetePrivileges; use Formation\Service\Inscription\InscriptionServiceAwareTrait; use Laminas\Permissions\Acl\Assertion\AssertionInterface; use Laminas\Permissions\Acl\Resource\ResourceInterface; use UnicaenApp\Service\MessageCollectorAwareInterface; class EnqueteAssertion extends AbstractAssertion implements AssertionInterface, UserContextServiceAwareInterface, MessageCollectorAwareInterface { use DoctorantServiceAwareTrait; use InscriptionServiceAwareTrait; public function __invoke(array $page): bool { return $this->assertPage($page); } private function assertPage(array $page): bool { return true; } protected function assertController($controller, $action = null, $privilege = null): bool { if (!parent::assertController($controller, $action, $privilege)) { return false; } $inscriptionId = $this->getMvcEvent()->getRouteMatch()->getParam('inscription'); $inscription = $inscriptionId ? $this->inscriptionService->getRepository()->find($inscriptionId) : null; switch ($action) { case 'repondre-questions': case 'valider-questions': if (!$this->scopeValide($inscription)) { return false; } break; } return true; } /** @var Inscription $entity */ protected function assertEntity(ResourceInterface $entity, $privilege = null): bool { if (!parent::assertEntity($entity, $privilege)) { return false; } $inscription = $entity; if ($privilege == EnquetePrivileges::ENQUETE_REPONSE_REPONDRE) { if (!$this->scopeValide($inscription)) { return false; } } return true; } public function scopeValide(?Inscription $inscription): bool { $role = $this->userContextService->getSelectedIdentityRole(); if (!$role) { return false; } switch ($role->getCode()) { case Role::CODE_DOCTORANT : $individu = $this->userContextService->getIdentityIndividu(); $doctorant = $inscription?->getDoctorant(); $userDoctorant = $this->doctorantService->getRepository()->findOneByIndividu($individu); return $doctorant === $userDoctorant; } return true; } } No newline at end of file module/Formation/src/Formation/Assertion/Enquete/EnqueteAssertionFactory.php 0 → 100644 +38 −0 Changes for module/Formation/src/Formation/Assertion/Enquete/EnqueteAssertionFactory.php: 38 added lines, 0 removed lines. Original line number Diff line number Diff line <?php namespace Formation\Assertion\Enquete; use Doctorant\Service\DoctorantService; use Formation\Service\Inscription\InscriptionService; use Laminas\Mvc\Application; use Psr\Container\ContainerExceptionInterface; use Psr\Container\ContainerInterface; use Psr\Container\NotFoundExceptionInterface; class EnqueteAssertionFactory { /** * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ public function __invoke(ContainerInterface $container): EnqueteAssertion { /** * @see DoctorantService $doctorantService * @see InscriptionService $inscriptionService */ $doctorantService = $container->get(DoctorantService::class); $inscriptionService = $container->get(InscriptionService::class); $assertion = new EnqueteAssertion(); $assertion->setDoctorantService($doctorantService); $assertion->setInscriptionService($inscriptionService); /* @var Application $application */ $application = $container->get('Application'); $mvcEvent = $application->getMvcEvent(); $assertion->setMvcEvent($mvcEvent); return $assertion; } } No newline at end of file module/Formation/src/Formation/Controller/EnqueteQuestionController.php +4 −11 Changes for module/Formation/src/Formation/Controller/EnqueteQuestionController.php: 4 added lines, 11 removed lines. Original line number Diff line number Diff line Loading @@ -343,23 +343,16 @@ class EnqueteQuestionController extends AbstractController { $categories = $this->getEntityManager()->getRepository(EnqueteCategorie::class)->findAll(); $delai = $inscription->getSursisEnquete() ?: $this->getParametreService()->getValeurForParametre(FormationParametres::CATEGORIE, FormationParametres::DELAI_ENQUETE); $heurodatagesSession = $inscription->getSession()->getHeurodatages(); $date = null; foreach($heurodatagesSession as $heurodatageSession){ $date = $heurodatageSession->getEtat()->getCode() === Etat::CODE_CLOTUREE ? DateTime::createFromFormat('d/m/Y', $heurodatageSession->getHeurodatage()->format('d/m/Y')) : $date; if($date){ $date->add(new DateInterval('P'.$delai.'D')); } } $delaiEnqueteParametre = $this->parametreService->getValeurForParametre(FormationParametres::CATEGORIE, FormationParametres::DELAI_ENQUETE); $dateButoir = $inscription->computeDateButoirEnquete($delaiEnqueteParametre); return new ViewModel([ 'inscription' => $inscription, 'questions' => $questions, 'categories' => $categories, 'form' => $form, 'date' => $date, 'delai' => $delai 'date' => $dateButoir, 'delai' => $inscription->getSursisEnquete() ?: $delaiEnqueteParametre, ]); } 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 @@ -3,6 +3,7 @@ Journal des modifications 13.5.0 ------ - Formations : petites améliorations concernant les enquêtes. - [FIX] Formations suivies : rétablissement de l'accès au dépôt de justificatif d'absence. 13.4.0 Loading
module/Formation/config/others/enquete.config.php +18 −1 Changes for module/Formation/config/others/enquete.config.php: 18 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -3,6 +3,8 @@ namespace Formation; use Application\Navigation\ApplicationNavigationFactory; use Formation\Assertion\Enquete\EnqueteAssertion; use Formation\Assertion\Enquete\EnqueteAssertionFactory; use Formation\Controller\EnqueteQuestionController; use Formation\Controller\EnqueteQuestionControllerFactory; use Formation\Controller\EnqueteReponseController; Loading Loading @@ -33,9 +35,23 @@ use Formation\Service\EnqueteReponse\Search\EnqueteReponseSearchServiceFactory; use Laminas\Router\Http\Literal; use Laminas\Router\Http\Segment; use UnicaenPrivilege\Guard\PrivilegeController; use UnicaenPrivilege\Provider\Rule\PrivilegeRuleProvider; return [ 'bjyauthorize' => [ 'rule_providers' => [ PrivilegeRuleProvider::class => [ 'allow' => [ [ 'privileges' => [ EnquetePrivileges::ENQUETE_REPONSE_REPONDRE, ], 'resources' => ['Inscription'], 'assertion' => EnqueteAssertion::class, ], ], ], ], 'guards' => [ PrivilegeController::class => [ [ Loading Loading @@ -98,6 +114,7 @@ return [ 'privileges' => [ EnquetePrivileges::ENQUETE_REPONSE_REPONDRE, ], 'assertion' => EnqueteAssertion::class, ], [ 'controller' => EnqueteReponseRechercheController::class, Loading Loading @@ -337,8 +354,8 @@ return [ EnqueteCategorieService::class => EnqueteCategorieServiceFactory::class, EnqueteQuestionService::class => EnqueteQuestionServiceFactory::class, EnqueteReponseService::class => EnqueteReponseServiceFactory::class, EnqueteReponseSearchService::class => EnqueteReponseSearchServiceFactory::class, EnqueteAssertion::class => EnqueteAssertionFactory::class, ], ], 'controllers' => [ Loading
module/Formation/src/Formation/Assertion/Enquete/EnqueteAssertion.php 0 → 100644 +86 −0 Changes for module/Formation/src/Formation/Assertion/Enquete/EnqueteAssertion.php: 86 added lines, 0 removed lines. Original line number Diff line number Diff line <?php namespace Formation\Assertion\Enquete; use Application\Assertion\AbstractAssertion; use Application\Entity\Db\Role; use Application\Service\UserContextServiceAwareInterface; use Doctorant\Service\DoctorantServiceAwareTrait; use Formation\Entity\Db\Inscription; use Formation\Provider\Privilege\EnquetePrivileges; use Formation\Service\Inscription\InscriptionServiceAwareTrait; use Laminas\Permissions\Acl\Assertion\AssertionInterface; use Laminas\Permissions\Acl\Resource\ResourceInterface; use UnicaenApp\Service\MessageCollectorAwareInterface; class EnqueteAssertion extends AbstractAssertion implements AssertionInterface, UserContextServiceAwareInterface, MessageCollectorAwareInterface { use DoctorantServiceAwareTrait; use InscriptionServiceAwareTrait; public function __invoke(array $page): bool { return $this->assertPage($page); } private function assertPage(array $page): bool { return true; } protected function assertController($controller, $action = null, $privilege = null): bool { if (!parent::assertController($controller, $action, $privilege)) { return false; } $inscriptionId = $this->getMvcEvent()->getRouteMatch()->getParam('inscription'); $inscription = $inscriptionId ? $this->inscriptionService->getRepository()->find($inscriptionId) : null; switch ($action) { case 'repondre-questions': case 'valider-questions': if (!$this->scopeValide($inscription)) { return false; } break; } return true; } /** @var Inscription $entity */ protected function assertEntity(ResourceInterface $entity, $privilege = null): bool { if (!parent::assertEntity($entity, $privilege)) { return false; } $inscription = $entity; if ($privilege == EnquetePrivileges::ENQUETE_REPONSE_REPONDRE) { if (!$this->scopeValide($inscription)) { return false; } } return true; } public function scopeValide(?Inscription $inscription): bool { $role = $this->userContextService->getSelectedIdentityRole(); if (!$role) { return false; } switch ($role->getCode()) { case Role::CODE_DOCTORANT : $individu = $this->userContextService->getIdentityIndividu(); $doctorant = $inscription?->getDoctorant(); $userDoctorant = $this->doctorantService->getRepository()->findOneByIndividu($individu); return $doctorant === $userDoctorant; } return true; } } No newline at end of file
module/Formation/src/Formation/Assertion/Enquete/EnqueteAssertionFactory.php 0 → 100644 +38 −0 Changes for module/Formation/src/Formation/Assertion/Enquete/EnqueteAssertionFactory.php: 38 added lines, 0 removed lines. Original line number Diff line number Diff line <?php namespace Formation\Assertion\Enquete; use Doctorant\Service\DoctorantService; use Formation\Service\Inscription\InscriptionService; use Laminas\Mvc\Application; use Psr\Container\ContainerExceptionInterface; use Psr\Container\ContainerInterface; use Psr\Container\NotFoundExceptionInterface; class EnqueteAssertionFactory { /** * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ public function __invoke(ContainerInterface $container): EnqueteAssertion { /** * @see DoctorantService $doctorantService * @see InscriptionService $inscriptionService */ $doctorantService = $container->get(DoctorantService::class); $inscriptionService = $container->get(InscriptionService::class); $assertion = new EnqueteAssertion(); $assertion->setDoctorantService($doctorantService); $assertion->setInscriptionService($inscriptionService); /* @var Application $application */ $application = $container->get('Application'); $mvcEvent = $application->getMvcEvent(); $assertion->setMvcEvent($mvcEvent); return $assertion; } } No newline at end of file
module/Formation/src/Formation/Controller/EnqueteQuestionController.php +4 −11 Changes for module/Formation/src/Formation/Controller/EnqueteQuestionController.php: 4 added lines, 11 removed lines. Original line number Diff line number Diff line Loading @@ -343,23 +343,16 @@ class EnqueteQuestionController extends AbstractController { $categories = $this->getEntityManager()->getRepository(EnqueteCategorie::class)->findAll(); $delai = $inscription->getSursisEnquete() ?: $this->getParametreService()->getValeurForParametre(FormationParametres::CATEGORIE, FormationParametres::DELAI_ENQUETE); $heurodatagesSession = $inscription->getSession()->getHeurodatages(); $date = null; foreach($heurodatagesSession as $heurodatageSession){ $date = $heurodatageSession->getEtat()->getCode() === Etat::CODE_CLOTUREE ? DateTime::createFromFormat('d/m/Y', $heurodatageSession->getHeurodatage()->format('d/m/Y')) : $date; if($date){ $date->add(new DateInterval('P'.$delai.'D')); } } $delaiEnqueteParametre = $this->parametreService->getValeurForParametre(FormationParametres::CATEGORIE, FormationParametres::DELAI_ENQUETE); $dateButoir = $inscription->computeDateButoirEnquete($delaiEnqueteParametre); return new ViewModel([ 'inscription' => $inscription, 'questions' => $questions, 'categories' => $categories, 'form' => $form, 'date' => $date, 'delai' => $delai 'date' => $dateButoir, 'delai' => $inscription->getSursisEnquete() ?: $delaiEnqueteParametre, ]); } Loading