Loading module/Application/config/others/substitution.config.php +1 −1 Original line number Diff line number Diff line Loading @@ -52,7 +52,7 @@ return [ 'substitution-creer' => [ 'type' => Segment::class, 'options' => [ 'route' => '/substitution/creer', 'route' => '/substitution/creer/:type', 'defaults' => [ '__NAMESPACE__' => 'Application\Controller', 'controller' => 'Substitution', Loading module/Application/src/Application/Controller/SubstitutionController.php +35 −12 Original line number Diff line number Diff line Loading @@ -2,17 +2,24 @@ namespace Application\Controller; use Application\Entity\Db\EcoleDoctorale; use Application\Entity\Db\Etablissement; use Application\Entity\Db\Structure; use Application\Entity\Db\StructureConcreteInterface; use Application\Entity\Db\TypeStructure; use Application\Entity\Db\UniteRecherche; use Application\Service\EcoleDoctorale\EcoleDoctoraleServiceAwareTrait; use Application\Service\Etablissement\EtablissementServiceAwareTrait; use Application\Service\Structure\StructureServiceAwareTrait; use Application\Service\UniteRecherche\UniteRechercheServiceAwareTrait; use UnicaenApp\Exception\RuntimeException; use Zend\View\Model\ViewModel; class SubstitutionController extends AbstractController { use EtablissementServiceAwareTrait; use EcoleDoctoraleServiceAwareTrait; use UniteRechercheServiceAwareTrait; use StructureServiceAwareTrait; public function indexAction() Loading Loading @@ -47,22 +54,37 @@ class SubstitutionController extends AbstractController public function creerAction() { $type = $this->params()->fromRoute('type'); $structures = []; switch($type) { case TypeStructure::CODE_ETABLISSEMENT : $structures = $this->etablissementService->getEtablissements(); break; case TypeStructure::CODE_ECOLE_DOCTORALE : $structures = $this->ecoleDoctoraleService->getEcolesDoctorales(); break; case TypeStructure::CODE_UNITE_RECHERCHE : $structures = $this->uniteRechercheService->getUnitesRecherches(); break; } $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."); $structure = $this->structureService->findStructureById($sourceId); $structureConcrete = $this->structureService->findStructureConcreteFromStructure($structure); if ($structureConcrete === null) { throw new RuntimeException("Aucune structure concréte cible trouvée avec id=$sourceId."); } $sources[] = $etablissement; $sources[] = $structureConcrete; } $structureCibleDataObject = new Etablissement(); $structureCibleDataObject->setCode(uniqid()); $this->etablissementService->updateFromPostData($structureCibleDataObject, $data['cible']); //creation de la structureCible adequate $structureCibleDataObject = $this->structureService->createStructureConcrete($type); //TODO bouger cela dans structureService ?? $this->structureService->updateFromPostData($structureCibleDataObject, $data['cible']); $structureCible = $this->structureService->createStructureSubstitutions($sources, $structureCibleDataObject); $id = $structureCible->getStructure()->getId(); Loading @@ -77,7 +99,7 @@ class SubstitutionController extends AbstractController $vm = new ViewModel([ 'cible' => $cible, 'structuresConcretesSubstituees' => $structuresConcretesSubstituees, 'etablissements' => $etablissements, 'structuresConcretes' => $structures, ]); $vm->setTemplate('application/substitution/modifier'); Loading Loading @@ -120,7 +142,7 @@ class SubstitutionController extends AbstractController return new ViewModel([ 'cible' => $structureCible, 'etablissements' => $etablissements, 'structuresConcretes' => $etablissements, 'structuresConcretesSubstituees' => $structuresConcretesSubstituees, ]); } Loading @@ -137,10 +159,11 @@ class SubstitutionController extends AbstractController public function generateSourceInputAction() { $id = $this->params()->fromRoute('id'); $etablissement = $this->etablissementService->findEtablissementByStructureId($id); $structure = $this->structureService->findStructureById($id); $structureConcrete = $this->structureService->findStructureConcreteFromStructure($structure); return new ViewModel([ 'structure' => $etablissement, 'structure' => $structureConcrete, ]); } } No newline at end of file module/Application/src/Application/Service/EcoleDoctorale/EcoleDoctoraleService.php +1 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ class EcoleDoctoraleService extends BaseService implements RoleServiceAwareInter public function getEcolesDoctorales() { /** @var EcoleDoctorale[] $ecoles */ $ecoles = $this->getRepository()->findAll(); usort($ecoles, function ($a,$b) {return $a->getLibelle() > $b->getLibelle();}); return $ecoles; } Loading module/Application/src/Application/Service/Etablissement/EtablissementService.php +3 −24 Original line number Diff line number Diff line Loading @@ -9,10 +9,7 @@ use Application\Entity\Db\Utilisateur; use Application\Service\BaseService; use Doctrine\ORM\NonUniqueResultException; use Doctrine\ORM\OptimisticLockException; use Doctrine\ORM\QueryBuilder; use DoctrineModule\Stdlib\Hydrator\DoctrineObject; use UnicaenApp\Exception\RuntimeException; use Zend\Feed\Reader\Feed\Atom\Source; class EtablissementService extends BaseService { Loading @@ -32,13 +29,9 @@ class EtablissementService extends BaseService */ public function getEtablissements() { /** @var Etablissement[] $etablissments */ $etablissments = $this->getRepository()->findAll(); // /** @var QueryBuilder $qb */ // $qb = $this->getEntityManager()->getRepository(Etablissement::class)->createQueryBuilder("e") // ->select("e,s") // ->leftJoin("e.structure", "s"); // $etablissments = $qb->getQuery()->execute(); return $etablissments; $etablissements = $this->getRepository()->findAll(); usort($etablissements, function ($a,$b) {return $a->getLibelle() > $b->getLibelle();}); return $etablissements; } /** Loading Loading @@ -153,20 +146,6 @@ class EtablissementService extends BaseService } } public function createFromPostData($data) { $etablissement = new Etablissement(); $hydrator = new DoctrineObject($this->getEntityManager()); $hydrator->hydrate($data, $etablissement); return $etablissement; } public function updateFromPostData($structure, $data) { $hydrator = new DoctrineObject($this->getEntityManager()); $hydrator->hydrate($data, $structure); } public function findEtablissementByStructureId($structureId) { $qb = $this->getRepository()->createQueryBuilder("e") Loading module/Application/src/Application/Service/Structure/StructureService.php +30 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ use Doctrine\ORM\EntityRepository; use Doctrine\ORM\NonUniqueResultException; use UnicaenApp\Exception\RuntimeException; use Webmozart\Assert\Assert; use DoctrineModule\Stdlib\Hydrator\DoctrineObject; /** * @author Unicaen Loading Loading @@ -316,6 +317,35 @@ class StructureService extends BaseService $this->getEntityManager()->remove($cibleConcrete); $this->getEntityManager()->flush($cibleConcrete); } /** * @param TypeStructure $typeStructure * @return StructureConcreteInterface|null */ public function createStructureConcrete($typeStructure) { $structureCibleDataObject = null; switch($typeStructure) { case TypeStructure::CODE_ETABLISSEMENT : $structureCibleDataObject = new Etablissement(); $structureCibleDataObject->setCode(uniqid()); break; case TypeStructure::CODE_ECOLE_DOCTORALE : $structureCibleDataObject = new EcoleDoctorale(); break; case TypeStructure::CODE_UNITE_RECHERCHE : $structureCibleDataObject = new UniteRecherche(); break; default: throw new RuntimeException("Type de structure inconnu [".$typeStructure."]"); } return $structureCibleDataObject; } public function updateFromPostData($structure, $data) { $hydrator = new DoctrineObject($this->getEntityManager()); $hydrator->hydrate($data, $structure); } } No newline at end of file Loading
module/Application/config/others/substitution.config.php +1 −1 Original line number Diff line number Diff line Loading @@ -52,7 +52,7 @@ return [ 'substitution-creer' => [ 'type' => Segment::class, 'options' => [ 'route' => '/substitution/creer', 'route' => '/substitution/creer/:type', 'defaults' => [ '__NAMESPACE__' => 'Application\Controller', 'controller' => 'Substitution', Loading
module/Application/src/Application/Controller/SubstitutionController.php +35 −12 Original line number Diff line number Diff line Loading @@ -2,17 +2,24 @@ namespace Application\Controller; use Application\Entity\Db\EcoleDoctorale; use Application\Entity\Db\Etablissement; use Application\Entity\Db\Structure; use Application\Entity\Db\StructureConcreteInterface; use Application\Entity\Db\TypeStructure; use Application\Entity\Db\UniteRecherche; use Application\Service\EcoleDoctorale\EcoleDoctoraleServiceAwareTrait; use Application\Service\Etablissement\EtablissementServiceAwareTrait; use Application\Service\Structure\StructureServiceAwareTrait; use Application\Service\UniteRecherche\UniteRechercheServiceAwareTrait; use UnicaenApp\Exception\RuntimeException; use Zend\View\Model\ViewModel; class SubstitutionController extends AbstractController { use EtablissementServiceAwareTrait; use EcoleDoctoraleServiceAwareTrait; use UniteRechercheServiceAwareTrait; use StructureServiceAwareTrait; public function indexAction() Loading Loading @@ -47,22 +54,37 @@ class SubstitutionController extends AbstractController public function creerAction() { $type = $this->params()->fromRoute('type'); $structures = []; switch($type) { case TypeStructure::CODE_ETABLISSEMENT : $structures = $this->etablissementService->getEtablissements(); break; case TypeStructure::CODE_ECOLE_DOCTORALE : $structures = $this->ecoleDoctoraleService->getEcolesDoctorales(); break; case TypeStructure::CODE_UNITE_RECHERCHE : $structures = $this->uniteRechercheService->getUnitesRecherches(); break; } $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."); $structure = $this->structureService->findStructureById($sourceId); $structureConcrete = $this->structureService->findStructureConcreteFromStructure($structure); if ($structureConcrete === null) { throw new RuntimeException("Aucune structure concréte cible trouvée avec id=$sourceId."); } $sources[] = $etablissement; $sources[] = $structureConcrete; } $structureCibleDataObject = new Etablissement(); $structureCibleDataObject->setCode(uniqid()); $this->etablissementService->updateFromPostData($structureCibleDataObject, $data['cible']); //creation de la structureCible adequate $structureCibleDataObject = $this->structureService->createStructureConcrete($type); //TODO bouger cela dans structureService ?? $this->structureService->updateFromPostData($structureCibleDataObject, $data['cible']); $structureCible = $this->structureService->createStructureSubstitutions($sources, $structureCibleDataObject); $id = $structureCible->getStructure()->getId(); Loading @@ -77,7 +99,7 @@ class SubstitutionController extends AbstractController $vm = new ViewModel([ 'cible' => $cible, 'structuresConcretesSubstituees' => $structuresConcretesSubstituees, 'etablissements' => $etablissements, 'structuresConcretes' => $structures, ]); $vm->setTemplate('application/substitution/modifier'); Loading Loading @@ -120,7 +142,7 @@ class SubstitutionController extends AbstractController return new ViewModel([ 'cible' => $structureCible, 'etablissements' => $etablissements, 'structuresConcretes' => $etablissements, 'structuresConcretesSubstituees' => $structuresConcretesSubstituees, ]); } Loading @@ -137,10 +159,11 @@ class SubstitutionController extends AbstractController public function generateSourceInputAction() { $id = $this->params()->fromRoute('id'); $etablissement = $this->etablissementService->findEtablissementByStructureId($id); $structure = $this->structureService->findStructureById($id); $structureConcrete = $this->structureService->findStructureConcreteFromStructure($structure); return new ViewModel([ 'structure' => $etablissement, 'structure' => $structureConcrete, ]); } } No newline at end of file
module/Application/src/Application/Service/EcoleDoctorale/EcoleDoctoraleService.php +1 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ class EcoleDoctoraleService extends BaseService implements RoleServiceAwareInter public function getEcolesDoctorales() { /** @var EcoleDoctorale[] $ecoles */ $ecoles = $this->getRepository()->findAll(); usort($ecoles, function ($a,$b) {return $a->getLibelle() > $b->getLibelle();}); return $ecoles; } Loading
module/Application/src/Application/Service/Etablissement/EtablissementService.php +3 −24 Original line number Diff line number Diff line Loading @@ -9,10 +9,7 @@ use Application\Entity\Db\Utilisateur; use Application\Service\BaseService; use Doctrine\ORM\NonUniqueResultException; use Doctrine\ORM\OptimisticLockException; use Doctrine\ORM\QueryBuilder; use DoctrineModule\Stdlib\Hydrator\DoctrineObject; use UnicaenApp\Exception\RuntimeException; use Zend\Feed\Reader\Feed\Atom\Source; class EtablissementService extends BaseService { Loading @@ -32,13 +29,9 @@ class EtablissementService extends BaseService */ public function getEtablissements() { /** @var Etablissement[] $etablissments */ $etablissments = $this->getRepository()->findAll(); // /** @var QueryBuilder $qb */ // $qb = $this->getEntityManager()->getRepository(Etablissement::class)->createQueryBuilder("e") // ->select("e,s") // ->leftJoin("e.structure", "s"); // $etablissments = $qb->getQuery()->execute(); return $etablissments; $etablissements = $this->getRepository()->findAll(); usort($etablissements, function ($a,$b) {return $a->getLibelle() > $b->getLibelle();}); return $etablissements; } /** Loading Loading @@ -153,20 +146,6 @@ class EtablissementService extends BaseService } } public function createFromPostData($data) { $etablissement = new Etablissement(); $hydrator = new DoctrineObject($this->getEntityManager()); $hydrator->hydrate($data, $etablissement); return $etablissement; } public function updateFromPostData($structure, $data) { $hydrator = new DoctrineObject($this->getEntityManager()); $hydrator->hydrate($data, $structure); } public function findEtablissementByStructureId($structureId) { $qb = $this->getRepository()->createQueryBuilder("e") Loading
module/Application/src/Application/Service/Structure/StructureService.php +30 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ use Doctrine\ORM\EntityRepository; use Doctrine\ORM\NonUniqueResultException; use UnicaenApp\Exception\RuntimeException; use Webmozart\Assert\Assert; use DoctrineModule\Stdlib\Hydrator\DoctrineObject; /** * @author Unicaen Loading Loading @@ -316,6 +317,35 @@ class StructureService extends BaseService $this->getEntityManager()->remove($cibleConcrete); $this->getEntityManager()->flush($cibleConcrete); } /** * @param TypeStructure $typeStructure * @return StructureConcreteInterface|null */ public function createStructureConcrete($typeStructure) { $structureCibleDataObject = null; switch($typeStructure) { case TypeStructure::CODE_ETABLISSEMENT : $structureCibleDataObject = new Etablissement(); $structureCibleDataObject->setCode(uniqid()); break; case TypeStructure::CODE_ECOLE_DOCTORALE : $structureCibleDataObject = new EcoleDoctorale(); break; case TypeStructure::CODE_UNITE_RECHERCHE : $structureCibleDataObject = new UniteRecherche(); break; default: throw new RuntimeException("Type de structure inconnu [".$typeStructure."]"); } return $structureCibleDataObject; } public function updateFromPostData($structure, $data) { $hydrator = new DoctrineObject($this->getEntityManager()); $hydrator->hydrate($data, $structure); } } No newline at end of file