Loading module/Application/config/others/structure.config.php +8 −1 Original line number Diff line number Diff line Loading @@ -9,7 +9,8 @@ use Application\Service\Structure\StructureService; use Application\Service\Structure\StructureServiceFactory; use Application\View\Helper\EcoleDoctoraleHelper; use UnicaenAuth\Guard\PrivilegeController; use Application\Entity\Db\StructureConcreteInterface; use Application\View\Helper\StructureSubstitHelper; return [ 'bjyauthorize' => [ // 'guards' => [ Loading Loading @@ -157,4 +158,10 @@ return [ // 'Application\Controller\EcoleDoctorale' => EcoleDoctoraleControllerFactory::class, ], ], 'view_helpers' => [ 'invokables' => array( 'structureSubstitHelper' => StructureSubstitHelper::class, ), 'factories' => [], ], ]; module/Application/config/others/substitution.config.php +37 −0 Original line number Diff line number Diff line Loading @@ -14,6 +14,9 @@ return [ 'action' => [ 'index', 'selection', 'creer', 'modifier', 'generate-source-input', ], 'privileges' => EcoleDoctoralePrivileges::ECOLE_DOCT_CONSULTATION, ], Loading Loading @@ -45,6 +48,40 @@ return [ ], ], ], 'substitution-creer' => [ 'type' => Segment::class, 'options' => [ 'route' => '/substitution/creer', 'defaults' => [ '__NAMESPACE__' => 'Application\Controller', 'controller' => 'Substitution', 'action' => 'creer', ], ], ], 'substitution-modifier' => [ 'type' => Segment::class, 'options' => [ 'route' => '/substitution/modifier/:cible', 'defaults' => [ '__NAMESPACE__' => 'Application\Controller', 'controller' => 'Substitution', 'action' => 'modifier', ], ], ], 'substitution-generer' => [ 'type' => Segment::class, 'options' => [ 'route' => '/substitution/generer/:id', 'defaults' => [ '__NAMESPACE__' => 'Application\Controller', 'controller' => 'Substitution', 'action' => 'generate-source-input', ], ], ], ], ], 'navigation' => [ Loading module/Application/src/Application/Controller/SubstitutionController.php +80 −21 Original line number Diff line number Diff line Loading @@ -2,8 +2,11 @@ namespace Application\Controller; use Application\Entity\Db\Etablissement; use Application\Entity\Db\Structure; use Application\Service\Etablissement\EtablissementServiceAwareTrait; use Application\Service\Structure\StructureServiceAwareTrait; use UnicaenApp\Exception\RuntimeException; use Zend\View\Model\ViewModel; class SubstitutionController extends AbstractController Loading Loading @@ -40,35 +43,91 @@ class SubstitutionController extends AbstractController // $this->redirect()->toRoute('substitution-selection', ['cible' => $idCible]); // } public function selectionAction() public function creerAction() { $request = $this->getRequest(); if ($request->isPost()) { $data = $request->getPost(); $sources = []; foreach($data['sources'] as $sourceId) { $etablissement = $this->etablissementService->getEtablissementById($sourceId); $sources[] = $etablissement; } $idGeneralisation = $this->params()->fromRoute('generalisation'); $idEtablissements = explode(",",$this->params()->fromRoute('etablissements')); $idAjout = $this->params()->fromQuery('nouveau'); $idRetrait = $this->params()->fromQuery('retrait'); $structureCible = new Etablissement(); $structureCible->setCode(uniqid()); $this->etablissementService->updateFromPostData($structureCible, $data['cible']); $etablissements = $this->etablissementService->getEtablissements(); $etablissement = $this->etablissementService->getEtablissementById($idGeneralisation); $selection = []; foreach($idEtablissements as $idEtablissement) { $selection[] = $this->etablissementService->getEtablissementById($idEtablissement); // $this->structureService->createStructureSubstitutions($sources, $structureCible); return $this->redirect()->toRoute('substitution-index'); // $id = $structureCible->getStructure()->getId(); // return $this->redirect()->toRoute('substitution-modifier', ['cible' => $id], [], true); } else { $cible = new Structure(); $structuresConcretesSubstituees = []; $etablissements = $this->etablissementService->findEtablissementsNonSubstitues(); } if($idAjout !== null && $idAjout !== '') { $selection[] = $this->etablissementService->getEtablissementById($idAjout); $vm = new ViewModel([ 'cible' => $cible, 'structuresConcretesSubstituees' => $structuresConcretesSubstituees, 'etablissements' => $etablissements, ]); $vm->setTemplate('application/substitution/modifier'); return $vm; } if($idRetrait !== null && $idRetrait !== '') { $selection = array_filter($selection, function($a) use ($idRetrait) {return $a->getId() != $idRetrait;}); // $selection_bis = []; // foreach ($selection as $s) { // if ($s->getId() != ($idRetrait)) $selection_bis[] = $s; // } // $selection = $selection_bis; public function modifierAction() { $idCible = $this->params()->fromRoute('cible'); $structureCible = $this->structureService->findStructureSubsitutionCibleById($idCible); $structuresSubstituees = $structureCible->getStructuresSubstituees(); $structureConcreteCible = $this->structureService->findStructureConcreteFromStructure($structureCible); $structuresConcretesSubstituees = []; foreach($structuresSubstituees as $structureSubstituee) { $structureConcreteSubstituee = $this->structureService->findStructureConcreteFromStructure($structureSubstituee); $structuresConcretesSubstituees[] = $structureConcreteSubstituee; } $etablissements = $this->etablissementService->findEtablissementsNonSubstitues(); $request = $this->getRequest(); if ($request->isPost()) { $data = $request->getPost(); $sources = []; foreach ($data['sourceIds'] as $sourceId) { $etablissement = $this->etablissementService->findEtablissementByStructureId($sourceId); if ($etablissement === null) { throw new RuntimeException("Etablissement cible non trouvé avec id=$sourceId."); } $sources[] = $etablissement; } $this->etablissementService->updateFromPostData($structureCible,$data['cible']); $this->structureService->updateStructureSubstitutions($sources, $structureCible); return $this->redirect()->toRoute(null, [],[], true); } return new ViewModel([ 'nouvelEtablissement' => $etablissement, 'selectedEtablissements' => $selection, 'cible' => $structureCible, 'etablissements' => $etablissements, 'structuresConcretesSubstituees' => $structuresConcretesSubstituees, ]); } public function generateSourceInputAction() { $id = $this->params()->fromRoute('id'); $etablissement = $this->etablissementService->findEtablissementByStructureId($id); return new ViewModel([ 'structure' => $etablissement, ]); } } No newline at end of file module/Application/src/Application/Entity/Db/EcoleDoctorale.php +1 −1 Original line number Diff line number Diff line Loading @@ -11,7 +11,7 @@ use UnicaenImport\Entity\Db\Traits\SourceAwareTrait; /** * EcoleDoctorale */ class EcoleDoctorale implements StructureEntityInterface, HistoriqueAwareInterface, SourceAwareInterface class EcoleDoctorale implements StructureConcreteInterface, HistoriqueAwareInterface, SourceAwareInterface { use HistoriqueAwareTrait; use SourceAwareTrait; Loading module/Application/src/Application/Entity/Db/Etablissement.php +3 −4 Original line number Diff line number Diff line Loading @@ -4,16 +4,14 @@ namespace Application\Entity\Db; use UnicaenApp\Entity\HistoriqueAwareInterface; use UnicaenApp\Entity\HistoriqueAwareTrait; use UnicaenApp\Util; use UnicaenImport\Entity\Db\Interfaces\SourceAwareInterface; use UnicaenImport\Entity\Db\Source; use UnicaenImport\Entity\Db\Traits\SourceAwareTrait; use UnicaenApp\Util; use Webmozart\Assert\Assert; /** * Etablissement */ class Etablissement implements StructureEntityInterface, HistoriqueAwareInterface, SourceAwareInterface class Etablissement implements StructureConcreteInterface, HistoriqueAwareInterface, SourceAwareInterface { use HistoriqueAwareTrait; use SourceAwareTrait; Loading @@ -39,6 +37,7 @@ class Etablissement implements StructureEntityInterface, HistoriqueAwareInterfac */ private $sourceCode; /** * Ajoute le préfixe établissement à la chaîne de caractères spécifiée. * Loading Loading
module/Application/config/others/structure.config.php +8 −1 Original line number Diff line number Diff line Loading @@ -9,7 +9,8 @@ use Application\Service\Structure\StructureService; use Application\Service\Structure\StructureServiceFactory; use Application\View\Helper\EcoleDoctoraleHelper; use UnicaenAuth\Guard\PrivilegeController; use Application\Entity\Db\StructureConcreteInterface; use Application\View\Helper\StructureSubstitHelper; return [ 'bjyauthorize' => [ // 'guards' => [ Loading Loading @@ -157,4 +158,10 @@ return [ // 'Application\Controller\EcoleDoctorale' => EcoleDoctoraleControllerFactory::class, ], ], 'view_helpers' => [ 'invokables' => array( 'structureSubstitHelper' => StructureSubstitHelper::class, ), 'factories' => [], ], ];
module/Application/config/others/substitution.config.php +37 −0 Original line number Diff line number Diff line Loading @@ -14,6 +14,9 @@ return [ 'action' => [ 'index', 'selection', 'creer', 'modifier', 'generate-source-input', ], 'privileges' => EcoleDoctoralePrivileges::ECOLE_DOCT_CONSULTATION, ], Loading Loading @@ -45,6 +48,40 @@ return [ ], ], ], 'substitution-creer' => [ 'type' => Segment::class, 'options' => [ 'route' => '/substitution/creer', 'defaults' => [ '__NAMESPACE__' => 'Application\Controller', 'controller' => 'Substitution', 'action' => 'creer', ], ], ], 'substitution-modifier' => [ 'type' => Segment::class, 'options' => [ 'route' => '/substitution/modifier/:cible', 'defaults' => [ '__NAMESPACE__' => 'Application\Controller', 'controller' => 'Substitution', 'action' => 'modifier', ], ], ], 'substitution-generer' => [ 'type' => Segment::class, 'options' => [ 'route' => '/substitution/generer/:id', 'defaults' => [ '__NAMESPACE__' => 'Application\Controller', 'controller' => 'Substitution', 'action' => 'generate-source-input', ], ], ], ], ], 'navigation' => [ Loading
module/Application/src/Application/Controller/SubstitutionController.php +80 −21 Original line number Diff line number Diff line Loading @@ -2,8 +2,11 @@ namespace Application\Controller; use Application\Entity\Db\Etablissement; use Application\Entity\Db\Structure; use Application\Service\Etablissement\EtablissementServiceAwareTrait; use Application\Service\Structure\StructureServiceAwareTrait; use UnicaenApp\Exception\RuntimeException; use Zend\View\Model\ViewModel; class SubstitutionController extends AbstractController Loading Loading @@ -40,35 +43,91 @@ class SubstitutionController extends AbstractController // $this->redirect()->toRoute('substitution-selection', ['cible' => $idCible]); // } public function selectionAction() public function creerAction() { $request = $this->getRequest(); if ($request->isPost()) { $data = $request->getPost(); $sources = []; foreach($data['sources'] as $sourceId) { $etablissement = $this->etablissementService->getEtablissementById($sourceId); $sources[] = $etablissement; } $idGeneralisation = $this->params()->fromRoute('generalisation'); $idEtablissements = explode(",",$this->params()->fromRoute('etablissements')); $idAjout = $this->params()->fromQuery('nouveau'); $idRetrait = $this->params()->fromQuery('retrait'); $structureCible = new Etablissement(); $structureCible->setCode(uniqid()); $this->etablissementService->updateFromPostData($structureCible, $data['cible']); $etablissements = $this->etablissementService->getEtablissements(); $etablissement = $this->etablissementService->getEtablissementById($idGeneralisation); $selection = []; foreach($idEtablissements as $idEtablissement) { $selection[] = $this->etablissementService->getEtablissementById($idEtablissement); // $this->structureService->createStructureSubstitutions($sources, $structureCible); return $this->redirect()->toRoute('substitution-index'); // $id = $structureCible->getStructure()->getId(); // return $this->redirect()->toRoute('substitution-modifier', ['cible' => $id], [], true); } else { $cible = new Structure(); $structuresConcretesSubstituees = []; $etablissements = $this->etablissementService->findEtablissementsNonSubstitues(); } if($idAjout !== null && $idAjout !== '') { $selection[] = $this->etablissementService->getEtablissementById($idAjout); $vm = new ViewModel([ 'cible' => $cible, 'structuresConcretesSubstituees' => $structuresConcretesSubstituees, 'etablissements' => $etablissements, ]); $vm->setTemplate('application/substitution/modifier'); return $vm; } if($idRetrait !== null && $idRetrait !== '') { $selection = array_filter($selection, function($a) use ($idRetrait) {return $a->getId() != $idRetrait;}); // $selection_bis = []; // foreach ($selection as $s) { // if ($s->getId() != ($idRetrait)) $selection_bis[] = $s; // } // $selection = $selection_bis; public function modifierAction() { $idCible = $this->params()->fromRoute('cible'); $structureCible = $this->structureService->findStructureSubsitutionCibleById($idCible); $structuresSubstituees = $structureCible->getStructuresSubstituees(); $structureConcreteCible = $this->structureService->findStructureConcreteFromStructure($structureCible); $structuresConcretesSubstituees = []; foreach($structuresSubstituees as $structureSubstituee) { $structureConcreteSubstituee = $this->structureService->findStructureConcreteFromStructure($structureSubstituee); $structuresConcretesSubstituees[] = $structureConcreteSubstituee; } $etablissements = $this->etablissementService->findEtablissementsNonSubstitues(); $request = $this->getRequest(); if ($request->isPost()) { $data = $request->getPost(); $sources = []; foreach ($data['sourceIds'] as $sourceId) { $etablissement = $this->etablissementService->findEtablissementByStructureId($sourceId); if ($etablissement === null) { throw new RuntimeException("Etablissement cible non trouvé avec id=$sourceId."); } $sources[] = $etablissement; } $this->etablissementService->updateFromPostData($structureCible,$data['cible']); $this->structureService->updateStructureSubstitutions($sources, $structureCible); return $this->redirect()->toRoute(null, [],[], true); } return new ViewModel([ 'nouvelEtablissement' => $etablissement, 'selectedEtablissements' => $selection, 'cible' => $structureCible, 'etablissements' => $etablissements, 'structuresConcretesSubstituees' => $structuresConcretesSubstituees, ]); } public function generateSourceInputAction() { $id = $this->params()->fromRoute('id'); $etablissement = $this->etablissementService->findEtablissementByStructureId($id); return new ViewModel([ 'structure' => $etablissement, ]); } } No newline at end of file
module/Application/src/Application/Entity/Db/EcoleDoctorale.php +1 −1 Original line number Diff line number Diff line Loading @@ -11,7 +11,7 @@ use UnicaenImport\Entity\Db\Traits\SourceAwareTrait; /** * EcoleDoctorale */ class EcoleDoctorale implements StructureEntityInterface, HistoriqueAwareInterface, SourceAwareInterface class EcoleDoctorale implements StructureConcreteInterface, HistoriqueAwareInterface, SourceAwareInterface { use HistoriqueAwareTrait; use SourceAwareTrait; Loading
module/Application/src/Application/Entity/Db/Etablissement.php +3 −4 Original line number Diff line number Diff line Loading @@ -4,16 +4,14 @@ namespace Application\Entity\Db; use UnicaenApp\Entity\HistoriqueAwareInterface; use UnicaenApp\Entity\HistoriqueAwareTrait; use UnicaenApp\Util; use UnicaenImport\Entity\Db\Interfaces\SourceAwareInterface; use UnicaenImport\Entity\Db\Source; use UnicaenImport\Entity\Db\Traits\SourceAwareTrait; use UnicaenApp\Util; use Webmozart\Assert\Assert; /** * Etablissement */ class Etablissement implements StructureEntityInterface, HistoriqueAwareInterface, SourceAwareInterface class Etablissement implements StructureConcreteInterface, HistoriqueAwareInterface, SourceAwareInterface { use HistoriqueAwareTrait; use SourceAwareTrait; Loading @@ -39,6 +37,7 @@ class Etablissement implements StructureEntityInterface, HistoriqueAwareInterfac */ private $sourceCode; /** * Ajoute le préfixe établissement à la chaîne de caractères spécifiée. * Loading