Loading CHANGELOG.md +2 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,8 @@ Journal des modifications ----- - Nouveau critère de bloquage des soutenances basé sur la validité des rapporteurs. - Retrait de la mention qualité absente sur le justificatif de co-encadrement - Ajustement de la date/heure de rendu des rapports - Modification du lien dans les mails vers les rapporteurs (description complète : token, role, redirect) 3.0.6 ----- Loading module/Application/src/Application/Service/CoEncadrant/Exporter/JustificatifCoencadrements/justificatif-coencadrements.phtml +1 −1 Original line number Diff line number Diff line Loading @@ -121,7 +121,7 @@ use Application\View\Renderer\PhpRenderer; <p> Ce document certifie que <?php echo $coencadrant->getIndividu()->getPrenom1(); ?> <?php echo $coencadrant->getIndividu()->getNomUsuel(); ?>, actuellement <?php echo ($coencadrant->getQualite() !== " ")?$coencadrant->getQualite():"<span style='color:darkred;'>qualité manquante</span>"; ?> à actuellement <?php echo ($coencadrant->getQualite() !== " ")?$coencadrant->getQualite():""; ?> à <?php echo ($coencadrant->getEtablissement())?$coencadrant->getEtablissement()->getLibelle():"<span style='color:darkred;'>établissement manquant</span>"; ?>, a assuré la fonction de co-encadrant sur pour les thèses suivantes : </p> Loading module/Soutenance/src/Soutenance/Controller/EngagementImpartialiteController.php +33 −2 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ use Soutenance\Service\Evenement\EvenementServiceAwareTrait; use Soutenance\Service\Membre\MembreServiceAwareTrait; use Soutenance\Service\Notifier\NotifierSoutenanceServiceAwareTrait; use Soutenance\Service\Proposition\PropositionServiceAwareTrait; use UnicaenAuthToken\Service\TokenServiceAwareTrait; use Zend\View\Model\ViewModel; /** Loading @@ -27,6 +28,7 @@ class EngagementImpartialiteController extends AbstractController use MembreServiceAwareTrait; use NotifierSoutenanceServiceAwareTrait; use PropositionServiceAwareTrait; use TokenServiceAwareTrait; public function engagementImpartialiteAction() { Loading Loading @@ -58,8 +60,24 @@ class EngagementImpartialiteController extends AbstractController /** @var Membre $membre */ foreach ($proposition->getMembres() as $membre) { if ($membre->getActeur() and $membre->estRapporteur()) { $validation = $this->getEngagementImpartialiteService()->getEngagementImpartialiteByMembre($these, $membre); if (!$validation) $this->getNotifierSoutenanceService()->triggerDemandeSignatureEngagementImpartialite($these, $proposition, $membre); if (!$validation) { $utilisateurs = $membre->getActeur()->getIndividu()->getUtilisateurs(); $token = null; foreach ($utilisateurs as $utilisateur) { $token = $this->tokenService->findUserTokenByUserId($utilisateur->getId()); if (! $token->isExpired()) break; } if ($token !== null) { $url_rapporteur = $this->url()->fromRoute("soutenance/index-rapporteur", ['these' => $these->getId()], ['force_canonical' => true], true); $url = $this->url()->fromRoute('zfcuser/login', ['type' => 'token'], ['query' => ['token' => $token->getToken(), 'redirect' => $url_rapporteur, 'role' => $membre->getActeur()->getRole()->getRoleId()], 'force_canonical' => true], true); } else { $url = $this->url()->fromRoute("soutenance/index-rapporteur", ['these' => $these->getId()], ['force_canonical' => true], true); } $this->getNotifierSoutenanceService()->triggerDemandeSignatureEngagementImpartialite($these, $proposition, $membre, $url); } } } Loading @@ -74,7 +92,20 @@ class EngagementImpartialiteController extends AbstractController $membre = $this->getMembreService()->getRequestedMembre($this); if ($membre->getActeur()) { $this->getNotifierSoutenanceService()->triggerDemandeSignatureEngagementImpartialite($these, $proposition, $membre); $utilisateurs = $membre->getActeur()->getIndividu()->getUtilisateurs(); $token = null; foreach ($utilisateurs as $utilisateur) { $token = $this->tokenService->findUserTokenByUserId($utilisateur->getId()); if (! $token->isExpired()) break; } if ($token !== null) { $url_rapporteur = $this->url()->fromRoute("soutenance/index-rapporteur", ['these' => $these->getId()], ['force_canonical' => true], true); $url = $this->url()->fromRoute('zfcuser/login', ['type' => 'token'], ['query' => ['token' => $token->getToken(), 'redirect' => $url_rapporteur, 'role' => $membre->getActeur()->getRole()->getRoleId()], 'force_canonical' => true], true); } else { $url = $this->url()->fromRoute("soutenance/index-rapporteur", ['these' => $these->getId()], ['force_canonical' => true], true); } $this->getNotifierSoutenanceService()->triggerDemandeSignatureEngagementImpartialite($these, $proposition, $membre, $url); } $this->redirect()->toRoute('soutenance/presoutenance', ['these' => $these->getId()], [], true); Loading module/Soutenance/src/Soutenance/Controller/EngagementImpartialiteControllerFactory.php +5 −0 Original line number Diff line number Diff line Loading @@ -9,6 +9,8 @@ use Soutenance\Service\Evenement\EvenementService; use Soutenance\Service\Membre\MembreService; use Soutenance\Service\Notifier\NotifierSoutenanceService; use Soutenance\Service\Proposition\PropositionService; use UnicaenAuthToken\Service\TokenService; use UnicaenAuthToken\Service\TokenServiceAwareTrait; class EngagementImpartialiteControllerFactory { Loading @@ -25,6 +27,7 @@ class EngagementImpartialiteControllerFactory * @var MembreService $membreService * @var NotifierSoutenanceService $notifierService * @var EngagementImpartialiteService $engagementImpartialiteService * @var TokenService $tokenService */ $acteurService = $container->get(ActeurService::class); $evenementService = $container->get(EvenementService::class); Loading @@ -32,6 +35,7 @@ class EngagementImpartialiteControllerFactory $membreService = $container->get(MembreService::class); $notifierService = $container->get(NotifierSoutenanceService::class); $engagementImpartialiteService = $container->get(EngagementImpartialiteService::class); $tokenService = $container->get(TokenService::class); /** @var EngagementImpartialiteController $controller */ $controller = new EngagementImpartialiteController(); Loading @@ -41,6 +45,7 @@ class EngagementImpartialiteControllerFactory $controller->setMembreService($membreService); $controller->setNotifierSoutenanceService($notifierService); $controller->setEngagementImpartialiteService($engagementImpartialiteService); $controller->setTokenService($tokenService); return $controller; } Loading module/Soutenance/src/Soutenance/Controller/PresoutenanceController.php +17 −7 Original line number Diff line number Diff line Loading @@ -85,7 +85,7 @@ class PresoutenanceController extends AbstractController $this->renderer = $renderer; } public function presoutenanceAction() public function presoutenanceAction() : ViewModel { $these = $this->requestedThese(); $proposition = $this->getPropositionService()->findByThese($these); Loading Loading @@ -121,7 +121,7 @@ class PresoutenanceController extends AbstractController ]); } public function dateRenduRapportAction() public function dateRenduRapportAction() : ViewModel { $these = $this->requestedThese(); $proposition = $this->getPropositionService()->findByThese($these); Loading Loading @@ -244,10 +244,6 @@ class PresoutenanceController extends AbstractController $this->getNotifierSoutenanceService()->triggerConnexionRapporteur($proposition, $user, $url); } // $url = $this->url()->fromRoute('utilisateur/init-compte', ['token' => $user->getPasswordResetToken()], ['force_canonical' => true], true); // $this->getNotifierSoutenanceService()->triggerInitialisationCompte($these, $user, $url); return new ViewModel([ 'title' => "Association de " . $membre->getDenomination() . " à un acteur " . $this->appInfos()->getNom(), 'acteurs' => $acteurs_libres, Loading Loading @@ -303,7 +299,21 @@ class PresoutenanceController extends AbstractController } foreach ($rapporteurs as $rapporteur) { $this->getNotifierSoutenanceService()->triggerDemandeAvisSoutenance($these, $proposition, $rapporteur); $utilisateurs = $rapporteur->getActeur()->getIndividu()->getUtilisateurs(); $token = null; foreach ($utilisateurs as $utilisateur) { $token = $this->tokenService->findUserTokenByUserId($utilisateur->getId()); if (! $token->isExpired()) break; } if ($token !== null) { $url_rapporteur = $this->url()->fromRoute("soutenance/index-rapporteur", ['these' => $these->getId()], ['force_canonical' => true], true); $url = $this->url()->fromRoute('zfcuser/login', ['type' => 'token'], ['query' => ['token' => $token->getToken(), 'redirect' => $url_rapporteur, 'role' => $rapporteur->getActeur()->getRole()->getRoleId()], 'force_canonical' => true], true); } else { $url = $this->url()->fromRoute("soutenance/index-rapporteur", ['these' => $these->getId()], ['force_canonical' => true], true); } $this->getNotifierSoutenanceService()->triggerDemandeAvisSoutenance($these, $proposition, $rapporteur, $url); } $this->getEvenementService()->ajouterEvenement($proposition, Evenement::EVENEMENT_PRERAPPORT); Loading Loading
CHANGELOG.md +2 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,8 @@ Journal des modifications ----- - Nouveau critère de bloquage des soutenances basé sur la validité des rapporteurs. - Retrait de la mention qualité absente sur le justificatif de co-encadrement - Ajustement de la date/heure de rendu des rapports - Modification du lien dans les mails vers les rapporteurs (description complète : token, role, redirect) 3.0.6 ----- Loading
module/Application/src/Application/Service/CoEncadrant/Exporter/JustificatifCoencadrements/justificatif-coencadrements.phtml +1 −1 Original line number Diff line number Diff line Loading @@ -121,7 +121,7 @@ use Application\View\Renderer\PhpRenderer; <p> Ce document certifie que <?php echo $coencadrant->getIndividu()->getPrenom1(); ?> <?php echo $coencadrant->getIndividu()->getNomUsuel(); ?>, actuellement <?php echo ($coencadrant->getQualite() !== " ")?$coencadrant->getQualite():"<span style='color:darkred;'>qualité manquante</span>"; ?> à actuellement <?php echo ($coencadrant->getQualite() !== " ")?$coencadrant->getQualite():""; ?> à <?php echo ($coencadrant->getEtablissement())?$coencadrant->getEtablissement()->getLibelle():"<span style='color:darkred;'>établissement manquant</span>"; ?>, a assuré la fonction de co-encadrant sur pour les thèses suivantes : </p> Loading
module/Soutenance/src/Soutenance/Controller/EngagementImpartialiteController.php +33 −2 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ use Soutenance\Service\Evenement\EvenementServiceAwareTrait; use Soutenance\Service\Membre\MembreServiceAwareTrait; use Soutenance\Service\Notifier\NotifierSoutenanceServiceAwareTrait; use Soutenance\Service\Proposition\PropositionServiceAwareTrait; use UnicaenAuthToken\Service\TokenServiceAwareTrait; use Zend\View\Model\ViewModel; /** Loading @@ -27,6 +28,7 @@ class EngagementImpartialiteController extends AbstractController use MembreServiceAwareTrait; use NotifierSoutenanceServiceAwareTrait; use PropositionServiceAwareTrait; use TokenServiceAwareTrait; public function engagementImpartialiteAction() { Loading Loading @@ -58,8 +60,24 @@ class EngagementImpartialiteController extends AbstractController /** @var Membre $membre */ foreach ($proposition->getMembres() as $membre) { if ($membre->getActeur() and $membre->estRapporteur()) { $validation = $this->getEngagementImpartialiteService()->getEngagementImpartialiteByMembre($these, $membre); if (!$validation) $this->getNotifierSoutenanceService()->triggerDemandeSignatureEngagementImpartialite($these, $proposition, $membre); if (!$validation) { $utilisateurs = $membre->getActeur()->getIndividu()->getUtilisateurs(); $token = null; foreach ($utilisateurs as $utilisateur) { $token = $this->tokenService->findUserTokenByUserId($utilisateur->getId()); if (! $token->isExpired()) break; } if ($token !== null) { $url_rapporteur = $this->url()->fromRoute("soutenance/index-rapporteur", ['these' => $these->getId()], ['force_canonical' => true], true); $url = $this->url()->fromRoute('zfcuser/login', ['type' => 'token'], ['query' => ['token' => $token->getToken(), 'redirect' => $url_rapporteur, 'role' => $membre->getActeur()->getRole()->getRoleId()], 'force_canonical' => true], true); } else { $url = $this->url()->fromRoute("soutenance/index-rapporteur", ['these' => $these->getId()], ['force_canonical' => true], true); } $this->getNotifierSoutenanceService()->triggerDemandeSignatureEngagementImpartialite($these, $proposition, $membre, $url); } } } Loading @@ -74,7 +92,20 @@ class EngagementImpartialiteController extends AbstractController $membre = $this->getMembreService()->getRequestedMembre($this); if ($membre->getActeur()) { $this->getNotifierSoutenanceService()->triggerDemandeSignatureEngagementImpartialite($these, $proposition, $membre); $utilisateurs = $membre->getActeur()->getIndividu()->getUtilisateurs(); $token = null; foreach ($utilisateurs as $utilisateur) { $token = $this->tokenService->findUserTokenByUserId($utilisateur->getId()); if (! $token->isExpired()) break; } if ($token !== null) { $url_rapporteur = $this->url()->fromRoute("soutenance/index-rapporteur", ['these' => $these->getId()], ['force_canonical' => true], true); $url = $this->url()->fromRoute('zfcuser/login', ['type' => 'token'], ['query' => ['token' => $token->getToken(), 'redirect' => $url_rapporteur, 'role' => $membre->getActeur()->getRole()->getRoleId()], 'force_canonical' => true], true); } else { $url = $this->url()->fromRoute("soutenance/index-rapporteur", ['these' => $these->getId()], ['force_canonical' => true], true); } $this->getNotifierSoutenanceService()->triggerDemandeSignatureEngagementImpartialite($these, $proposition, $membre, $url); } $this->redirect()->toRoute('soutenance/presoutenance', ['these' => $these->getId()], [], true); Loading
module/Soutenance/src/Soutenance/Controller/EngagementImpartialiteControllerFactory.php +5 −0 Original line number Diff line number Diff line Loading @@ -9,6 +9,8 @@ use Soutenance\Service\Evenement\EvenementService; use Soutenance\Service\Membre\MembreService; use Soutenance\Service\Notifier\NotifierSoutenanceService; use Soutenance\Service\Proposition\PropositionService; use UnicaenAuthToken\Service\TokenService; use UnicaenAuthToken\Service\TokenServiceAwareTrait; class EngagementImpartialiteControllerFactory { Loading @@ -25,6 +27,7 @@ class EngagementImpartialiteControllerFactory * @var MembreService $membreService * @var NotifierSoutenanceService $notifierService * @var EngagementImpartialiteService $engagementImpartialiteService * @var TokenService $tokenService */ $acteurService = $container->get(ActeurService::class); $evenementService = $container->get(EvenementService::class); Loading @@ -32,6 +35,7 @@ class EngagementImpartialiteControllerFactory $membreService = $container->get(MembreService::class); $notifierService = $container->get(NotifierSoutenanceService::class); $engagementImpartialiteService = $container->get(EngagementImpartialiteService::class); $tokenService = $container->get(TokenService::class); /** @var EngagementImpartialiteController $controller */ $controller = new EngagementImpartialiteController(); Loading @@ -41,6 +45,7 @@ class EngagementImpartialiteControllerFactory $controller->setMembreService($membreService); $controller->setNotifierSoutenanceService($notifierService); $controller->setEngagementImpartialiteService($engagementImpartialiteService); $controller->setTokenService($tokenService); return $controller; } Loading
module/Soutenance/src/Soutenance/Controller/PresoutenanceController.php +17 −7 Original line number Diff line number Diff line Loading @@ -85,7 +85,7 @@ class PresoutenanceController extends AbstractController $this->renderer = $renderer; } public function presoutenanceAction() public function presoutenanceAction() : ViewModel { $these = $this->requestedThese(); $proposition = $this->getPropositionService()->findByThese($these); Loading Loading @@ -121,7 +121,7 @@ class PresoutenanceController extends AbstractController ]); } public function dateRenduRapportAction() public function dateRenduRapportAction() : ViewModel { $these = $this->requestedThese(); $proposition = $this->getPropositionService()->findByThese($these); Loading Loading @@ -244,10 +244,6 @@ class PresoutenanceController extends AbstractController $this->getNotifierSoutenanceService()->triggerConnexionRapporteur($proposition, $user, $url); } // $url = $this->url()->fromRoute('utilisateur/init-compte', ['token' => $user->getPasswordResetToken()], ['force_canonical' => true], true); // $this->getNotifierSoutenanceService()->triggerInitialisationCompte($these, $user, $url); return new ViewModel([ 'title' => "Association de " . $membre->getDenomination() . " à un acteur " . $this->appInfos()->getNom(), 'acteurs' => $acteurs_libres, Loading Loading @@ -303,7 +299,21 @@ class PresoutenanceController extends AbstractController } foreach ($rapporteurs as $rapporteur) { $this->getNotifierSoutenanceService()->triggerDemandeAvisSoutenance($these, $proposition, $rapporteur); $utilisateurs = $rapporteur->getActeur()->getIndividu()->getUtilisateurs(); $token = null; foreach ($utilisateurs as $utilisateur) { $token = $this->tokenService->findUserTokenByUserId($utilisateur->getId()); if (! $token->isExpired()) break; } if ($token !== null) { $url_rapporteur = $this->url()->fromRoute("soutenance/index-rapporteur", ['these' => $these->getId()], ['force_canonical' => true], true); $url = $this->url()->fromRoute('zfcuser/login', ['type' => 'token'], ['query' => ['token' => $token->getToken(), 'redirect' => $url_rapporteur, 'role' => $rapporteur->getActeur()->getRole()->getRoleId()], 'force_canonical' => true], true); } else { $url = $this->url()->fromRoute("soutenance/index-rapporteur", ['these' => $these->getId()], ['force_canonical' => true], true); } $this->getNotifierSoutenanceService()->triggerDemandeAvisSoutenance($these, $proposition, $rapporteur, $url); } $this->getEvenementService()->ajouterEvenement($proposition, Evenement::EVENEMENT_PRERAPPORT); Loading