Loading CHANGELOG.md +1 −0 Changes for CHANGELOG.md: 1 added line, 0 removed lines. Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ Journal des modifications ----- - Ajout de la mention "La réservation du lieu de soutenance n'est pas faite automatiquement et reste à votre charge" - Meilleure gestion des tokens des membres d'une soutenance - Déclaration tardive de visoconférence ajouté aux interventions de soutenance 3.0.8 ----- Loading doc/release-notes/v3.0.10.md +6 −0 Changes for doc/release-notes/v3.0.10.md: 6 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -14,3 +14,9 @@ git fetch --tags && git checkout --force 3.0.10 && bash ./install.sh - apache2-mod-php7.3 : `service apache2 reload` ## 2. Dans la base de données Modification liée aux ajouts de nouvelle intervention de soutenance. ```sql alter table soutenance_intervention add complement text; ``` No newline at end of file module/Soutenance/config/others/intervention.config.php +22 −0 Changes for module/Soutenance/config/others/intervention.config.php: 22 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -54,6 +54,8 @@ return [ 'controller' => InterventionController::class, 'action' => [ 'toggle-president-distanciel', 'ajouter-visioconference-tardive', 'supprimer-visioconference-tardive', ], 'privileges' => InterventionPrivileges::INTERVENTION_MODIFIER, ], Loading Loading @@ -129,6 +131,26 @@ return [ ], ], ], 'ajouter-visioconference-tardive' => [ 'type' => Segment::class, 'may_terminate' => true, 'options' => [ 'route' => '/ajouter-visioconference-tardive', 'defaults' => [ 'action' => 'ajouter-visioconference-tardive', ], ], ], 'supprimer-visioconference-tardive' => [ 'type' => Segment::class, 'may_terminate' => true, 'options' => [ 'route' => '/supprimer-visioconference-tardive/:intervention', 'defaults' => [ 'action' => 'supprimer-visioconference-tardive', ], ], ], ], ], ], Loading module/Soutenance/src/Soutenance/Controller/InterventionController.php +89 −1 Changes for module/Soutenance/src/Soutenance/Controller/InterventionController.php: 89 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -3,21 +3,30 @@ namespace Soutenance\Controller; use Application\Controller\AbstractController; use Application\Entity\Db\NatureFichier; use Application\Entity\Db\VersionFichier; use Application\Service\FichierThese\FichierTheseServiceAwareTrait; use Application\Service\These\TheseServiceAwareTrait; use Soutenance\Entity\Intervention; use Soutenance\Entity\Justificatif; use Soutenance\Entity\Membre; use Soutenance\Entity\Parametre; use Soutenance\Service\Intervention\InterventionServiceAwareTrait; use Soutenance\Service\Justificatif\JustificatifServiceAwareTrait; use Soutenance\Service\Membre\MembreServiceAwareTrait; use Soutenance\Service\Parametre\ParametreServiceAwareTrait; use Soutenance\Service\Proposition\PropositionServiceAwareTrait; use UnicaenApp\Exception\RuntimeException; use UnicaenApp\Service\EntityManagerAwareTrait; use Zend\Http\Response; use Zend\View\Model\ViewModel; class InterventionController extends AbstractController { use EntityManagerAwareTrait; use FichierTheseServiceAwareTrait; use InterventionServiceAwareTrait; use JustificatifServiceAwareTrait; use MembreServiceAwareTrait; use ParametreServiceAwareTrait; use PropositionServiceAwareTrait; use TheseServiceAwareTrait; Loading @@ -27,16 +36,24 @@ class InterventionController extends AbstractController { return new ViewModel([]); } public function afficherAction() public function afficherAction() : ViewModel { $these = $this->getTheseService()->getRequestedThese($this); $proposition = $this->getPropositionService()->findByThese($these); $justificatifs = $this->getJustificatifService()->generateListeJustificatif($proposition, true); $distanciels = $this->getInterventionService()->getInterventionByTheseAndType($these, Intervention::TYPE_DISTANCIEL); $visios = $this->getInterventionService()->getInterventionByTheseAndType($these, Intervention::TYPE_VISIO_TARDIVE); $membres = []; foreach($proposition->getMembres() as $membre) { $membres[$membre->getId()] = $membre; } return new ViewModel([ 'these' => $these, 'distanciel' => (!empty($distanciels))?current($distanciels):null, 'visios' => (!empty($visios))?$visios:null, 'proposition' => $proposition, 'membres' => $membres, 'justificatifs' => $justificatifs, 'urlFichierThese' => $this->urlFichierThese(), 'FORMULAIRE_DELEGUATION' => $this->getParametreService()->getParametreByCode(Parametre::CODE_FORMULAIRE_DELEGUATION)->getValeur(), Loading Loading @@ -66,4 +83,75 @@ class InterventionController extends AbstractController { return $this->redirect()->toRoute('soutenance/intervention/afficher', ['these' => $these->getId()], [], true); } public function ajouterVisioconferenceTardiveAction() : ViewModel { $these = $this->getTheseService()->getRequestedThese($this); $proposition = $this->getPropositionService()->findByThese($these); $request = $this->getRequest(); if ($request->isPost()) { $data = $request->getPost(); $files = $request->getFiles(); $membre = $this->getMembreService()->find($data['membre']); if ($membre !== null and ($files !== null AND !empty($files))) { // 1 - Justificatif $files = ['files' => $files->toArray()]; $nature = $this->fichierTheseService->fetchNatureFichier(NatureFichier::CODE_DELEGUATION_SIGNATURE); $version = $this->fichierTheseService->fetchVersionFichier(VersionFichier::CODE_ORIG); $fichiers = $this->fichierTheseService->createFichierThesesFromUpload($these, $files, $nature, $version); $justificatif = new Justificatif(); $justificatif->setProposition($proposition); $justificatif->setFichier($fichiers[0]); $justificatif->setMembre($membre); $this->getJustificatifService()->create($justificatif); // 2 - Modification du membre $membre->setVisio(true); $this->getMembreService()->update($membre); // 3- Déclaration de l'intervention $intervention = new Intervention(); $intervention->setType(Intervention::TYPE_VISIO_TARDIVE); $intervention->setThese($these); $intervention->setComplement($data['membre']); $this->getInterventionService()->create($intervention); } exit(); } $membres = $proposition->getMembres()->toArray(); $membres = array_filter($membres, function(Membre $membre) { return $membre->isVisio() === false; }); return new ViewModel([ 'title' => "Ajout d'une déclaration de visioconférence tardive pour un membre du jury", 'membres' => $membres, 'these' => $these, ]); } public function supprimerVisioconferenceTardiveAction() : Response { $intervention = $this->getInterventionService()->getRequestedIntervention($this); $these = $intervention->getThese(); $proposition = $this->getPropositionService()->findByThese($these); /** retrait de la déclaration de viso sur le membre et du justificatif */ $membre = $this->getMembreService()->find($intervention->getComplement()); if ($membre !== null) { $membre->setVisio(false); $this->getMembreService()->update($membre); $justificatif = $proposition->getJustificatif(NatureFichier::CODE_DELEGUATION_SIGNATURE, $membre); if ($justificatif !== null) { $this->getJustificatifService()->historise($justificatif); } } $this->getInterventionService()->delete($intervention); return $this->redirect()->toRoute('soutenance/intervention/afficher', ['these' => $these->getId()], [], true); } } No newline at end of file module/Soutenance/src/Soutenance/Controller/InterventionControllerFactory.php +8 −0 Changes for module/Soutenance/src/Soutenance/Controller/InterventionControllerFactory.php: 8 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -2,11 +2,13 @@ namespace Soutenance\Controller; use Application\Service\FichierThese\FichierTheseService; use Application\Service\These\TheseService; use Doctrine\ORM\EntityManager; use Interop\Container\ContainerInterface; use Soutenance\Service\Intervention\InterventionService; use Soutenance\Service\Justificatif\JustificatifService; use Soutenance\Service\Membre\MembreService; use Soutenance\Service\Parametre\ParametreService; use Soutenance\Service\Proposition\PropositionService; Loading @@ -20,23 +22,29 @@ class InterventionControllerFactory { /** * @var EntityManager $entityManager * @var FichierTheseService $fichierTheseService * @var InterventionService $interventionService * @var JustificatifService $justificatifService * @var MembreService $membreService * @var ParametreService $parametreService * @var PropositionService $propositionService * @var TheseService $theseService */ $entityManager = $container->get('doctrine.entitymanager.orm_default'); $fichierTheseService = $container->get(FichierTheseService::class); $interventionService = $container->get(InterventionService::class); $justificatifService = $container->get(JustificatifService::class); $membreService = $container->get(MembreService::class); $parametreService = $container->get(ParametreService::class); $propositionService = $container->get(PropositionService::class); $theseService = $container->get(TheseService::class); $controller = new InterventionController(); $controller->setEntityManager($entityManager); $controller->setFichierTheseService($fichierTheseService); $controller->setInterventionService($interventionService); $controller->setJustificatifService($justificatifService); $controller->setMembreService($membreService); $controller->setParametreService($parametreService); $controller->setPropositionService($propositionService); $controller->setTheseService($theseService); 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 @@ -5,6 +5,7 @@ Journal des modifications ----- - Ajout de la mention "La réservation du lieu de soutenance n'est pas faite automatiquement et reste à votre charge" - Meilleure gestion des tokens des membres d'une soutenance - Déclaration tardive de visoconférence ajouté aux interventions de soutenance 3.0.8 ----- Loading
doc/release-notes/v3.0.10.md +6 −0 Changes for doc/release-notes/v3.0.10.md: 6 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -14,3 +14,9 @@ git fetch --tags && git checkout --force 3.0.10 && bash ./install.sh - apache2-mod-php7.3 : `service apache2 reload` ## 2. Dans la base de données Modification liée aux ajouts de nouvelle intervention de soutenance. ```sql alter table soutenance_intervention add complement text; ``` No newline at end of file
module/Soutenance/config/others/intervention.config.php +22 −0 Changes for module/Soutenance/config/others/intervention.config.php: 22 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -54,6 +54,8 @@ return [ 'controller' => InterventionController::class, 'action' => [ 'toggle-president-distanciel', 'ajouter-visioconference-tardive', 'supprimer-visioconference-tardive', ], 'privileges' => InterventionPrivileges::INTERVENTION_MODIFIER, ], Loading Loading @@ -129,6 +131,26 @@ return [ ], ], ], 'ajouter-visioconference-tardive' => [ 'type' => Segment::class, 'may_terminate' => true, 'options' => [ 'route' => '/ajouter-visioconference-tardive', 'defaults' => [ 'action' => 'ajouter-visioconference-tardive', ], ], ], 'supprimer-visioconference-tardive' => [ 'type' => Segment::class, 'may_terminate' => true, 'options' => [ 'route' => '/supprimer-visioconference-tardive/:intervention', 'defaults' => [ 'action' => 'supprimer-visioconference-tardive', ], ], ], ], ], ], Loading
module/Soutenance/src/Soutenance/Controller/InterventionController.php +89 −1 Changes for module/Soutenance/src/Soutenance/Controller/InterventionController.php: 89 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -3,21 +3,30 @@ namespace Soutenance\Controller; use Application\Controller\AbstractController; use Application\Entity\Db\NatureFichier; use Application\Entity\Db\VersionFichier; use Application\Service\FichierThese\FichierTheseServiceAwareTrait; use Application\Service\These\TheseServiceAwareTrait; use Soutenance\Entity\Intervention; use Soutenance\Entity\Justificatif; use Soutenance\Entity\Membre; use Soutenance\Entity\Parametre; use Soutenance\Service\Intervention\InterventionServiceAwareTrait; use Soutenance\Service\Justificatif\JustificatifServiceAwareTrait; use Soutenance\Service\Membre\MembreServiceAwareTrait; use Soutenance\Service\Parametre\ParametreServiceAwareTrait; use Soutenance\Service\Proposition\PropositionServiceAwareTrait; use UnicaenApp\Exception\RuntimeException; use UnicaenApp\Service\EntityManagerAwareTrait; use Zend\Http\Response; use Zend\View\Model\ViewModel; class InterventionController extends AbstractController { use EntityManagerAwareTrait; use FichierTheseServiceAwareTrait; use InterventionServiceAwareTrait; use JustificatifServiceAwareTrait; use MembreServiceAwareTrait; use ParametreServiceAwareTrait; use PropositionServiceAwareTrait; use TheseServiceAwareTrait; Loading @@ -27,16 +36,24 @@ class InterventionController extends AbstractController { return new ViewModel([]); } public function afficherAction() public function afficherAction() : ViewModel { $these = $this->getTheseService()->getRequestedThese($this); $proposition = $this->getPropositionService()->findByThese($these); $justificatifs = $this->getJustificatifService()->generateListeJustificatif($proposition, true); $distanciels = $this->getInterventionService()->getInterventionByTheseAndType($these, Intervention::TYPE_DISTANCIEL); $visios = $this->getInterventionService()->getInterventionByTheseAndType($these, Intervention::TYPE_VISIO_TARDIVE); $membres = []; foreach($proposition->getMembres() as $membre) { $membres[$membre->getId()] = $membre; } return new ViewModel([ 'these' => $these, 'distanciel' => (!empty($distanciels))?current($distanciels):null, 'visios' => (!empty($visios))?$visios:null, 'proposition' => $proposition, 'membres' => $membres, 'justificatifs' => $justificatifs, 'urlFichierThese' => $this->urlFichierThese(), 'FORMULAIRE_DELEGUATION' => $this->getParametreService()->getParametreByCode(Parametre::CODE_FORMULAIRE_DELEGUATION)->getValeur(), Loading Loading @@ -66,4 +83,75 @@ class InterventionController extends AbstractController { return $this->redirect()->toRoute('soutenance/intervention/afficher', ['these' => $these->getId()], [], true); } public function ajouterVisioconferenceTardiveAction() : ViewModel { $these = $this->getTheseService()->getRequestedThese($this); $proposition = $this->getPropositionService()->findByThese($these); $request = $this->getRequest(); if ($request->isPost()) { $data = $request->getPost(); $files = $request->getFiles(); $membre = $this->getMembreService()->find($data['membre']); if ($membre !== null and ($files !== null AND !empty($files))) { // 1 - Justificatif $files = ['files' => $files->toArray()]; $nature = $this->fichierTheseService->fetchNatureFichier(NatureFichier::CODE_DELEGUATION_SIGNATURE); $version = $this->fichierTheseService->fetchVersionFichier(VersionFichier::CODE_ORIG); $fichiers = $this->fichierTheseService->createFichierThesesFromUpload($these, $files, $nature, $version); $justificatif = new Justificatif(); $justificatif->setProposition($proposition); $justificatif->setFichier($fichiers[0]); $justificatif->setMembre($membre); $this->getJustificatifService()->create($justificatif); // 2 - Modification du membre $membre->setVisio(true); $this->getMembreService()->update($membre); // 3- Déclaration de l'intervention $intervention = new Intervention(); $intervention->setType(Intervention::TYPE_VISIO_TARDIVE); $intervention->setThese($these); $intervention->setComplement($data['membre']); $this->getInterventionService()->create($intervention); } exit(); } $membres = $proposition->getMembres()->toArray(); $membres = array_filter($membres, function(Membre $membre) { return $membre->isVisio() === false; }); return new ViewModel([ 'title' => "Ajout d'une déclaration de visioconférence tardive pour un membre du jury", 'membres' => $membres, 'these' => $these, ]); } public function supprimerVisioconferenceTardiveAction() : Response { $intervention = $this->getInterventionService()->getRequestedIntervention($this); $these = $intervention->getThese(); $proposition = $this->getPropositionService()->findByThese($these); /** retrait de la déclaration de viso sur le membre et du justificatif */ $membre = $this->getMembreService()->find($intervention->getComplement()); if ($membre !== null) { $membre->setVisio(false); $this->getMembreService()->update($membre); $justificatif = $proposition->getJustificatif(NatureFichier::CODE_DELEGUATION_SIGNATURE, $membre); if ($justificatif !== null) { $this->getJustificatifService()->historise($justificatif); } } $this->getInterventionService()->delete($intervention); return $this->redirect()->toRoute('soutenance/intervention/afficher', ['these' => $these->getId()], [], true); } } No newline at end of file
module/Soutenance/src/Soutenance/Controller/InterventionControllerFactory.php +8 −0 Changes for module/Soutenance/src/Soutenance/Controller/InterventionControllerFactory.php: 8 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -2,11 +2,13 @@ namespace Soutenance\Controller; use Application\Service\FichierThese\FichierTheseService; use Application\Service\These\TheseService; use Doctrine\ORM\EntityManager; use Interop\Container\ContainerInterface; use Soutenance\Service\Intervention\InterventionService; use Soutenance\Service\Justificatif\JustificatifService; use Soutenance\Service\Membre\MembreService; use Soutenance\Service\Parametre\ParametreService; use Soutenance\Service\Proposition\PropositionService; Loading @@ -20,23 +22,29 @@ class InterventionControllerFactory { /** * @var EntityManager $entityManager * @var FichierTheseService $fichierTheseService * @var InterventionService $interventionService * @var JustificatifService $justificatifService * @var MembreService $membreService * @var ParametreService $parametreService * @var PropositionService $propositionService * @var TheseService $theseService */ $entityManager = $container->get('doctrine.entitymanager.orm_default'); $fichierTheseService = $container->get(FichierTheseService::class); $interventionService = $container->get(InterventionService::class); $justificatifService = $container->get(JustificatifService::class); $membreService = $container->get(MembreService::class); $parametreService = $container->get(ParametreService::class); $propositionService = $container->get(PropositionService::class); $theseService = $container->get(TheseService::class); $controller = new InterventionController(); $controller->setEntityManager($entityManager); $controller->setFichierTheseService($fichierTheseService); $controller->setInterventionService($interventionService); $controller->setJustificatifService($justificatifService); $controller->setMembreService($membreService); $controller->setParametreService($parametreService); $controller->setPropositionService($propositionService); $controller->setTheseService($theseService); Loading