Loading config/application.config.php +1 −0 Original line number Diff line number Diff line Loading @@ -91,6 +91,7 @@ return [ 'Validation', 'HDR', 'Candidat', 'Portfolio', 'RNCP' ], 'module_listener_options' => [ Loading module/Portfolio/Module.php 0 → 100755 +31 −0 Original line number Diff line number Diff line <?php namespace Portfolio; use Laminas\Config\Factory as ConfigFactory; use Laminas\Stdlib\Glob; class Module { public function getConfig() { $paths = array_merge( [__DIR__ . '/config/module.config.php'], Glob::glob(__DIR__ . '/config/others/{,*.}{config}.php', Glob::GLOB_BRACE) ); return ConfigFactory::fromFiles($paths); } public function getAutoloaderConfig(): array { return [ 'Laminas\Loader\StandardAutoloader' => [ 'namespaces' => [ __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__, ], ], ]; } } No newline at end of file module/Portfolio/config/module.config.php 0 → 100644 +138 −0 Original line number Diff line number Diff line <?php namespace Portfolio; use Application\Navigation\ApplicationNavigationFactory; use Doctrine\ORM\Mapping\Driver\XmlDriver; use Doctrine\Persistence\Mapping\Driver\MappingDriverChain; use Formation\Provider\Privilege\IndexPrivileges; use Portfolio\Controller\PortfolioController; use Portfolio\Controller\PortfolioControllerFactory; use UnicaenPrivilege\Guard\PrivilegeController; use UnicaenPrivilege\Provider\Rule\PrivilegeRuleProvider; return [ 'doctrine' => [ 'driver' => [ 'orm_default' => [ 'class' => MappingDriverChain::class, 'drivers' => [ 'Portfolio\Entity\Db' => 'orm_default_xml_driver', ], ], 'orm_default_xml_driver' => [ 'class' => XmlDriver::class, 'cache' => 'array', 'paths' => [ __DIR__ . '/../src/Portfolio/Entity/Db/Mapping', ], ], ], ], 'bjyauthorize' => [ 'resource_providers' => [ 'BjyAuthorize\Provider\Resource\Config' => [ 'Portfolio' => [], ], ], 'rule_providers' => [ PrivilegeRuleProvider::class => [ 'allow' => [ [ // // Privilèges concernant la ressource Portfolio SOUMIS À ASSERTION. // 'privileges' => [ ], 'resources' => ['Portfolio'], // 'assertion' => ::class, ], ], ], ], 'guards' => [ PrivilegeController::class => [ [ 'controller' => PortfolioController::class, 'action' => [ 'afficher' ], 'privileges' => IndexPrivileges::INDEX_AFFICHER, ], // [ // 'controller' => ::class, // 'action' => [ // ], // 'privileges' => , // 'assertion' => , // ], ], ], ], 'router' => [ 'routes' => [ 'portfolio' => [ 'type' => 'Literal', 'options' => [ 'route' => '/portfolio', ], 'may_terminate' => false, 'child_routes' => [ 'afficher' => [ 'type' => 'Segment', 'options' => [ 'route' => '/afficher/:these', 'constraints' => [ 'these' => '\d+', ], 'defaults' => [ 'controller' => PortfolioController::class, 'action' => 'afficher', ], ], ], ], ], ], ], 'navigation' => [ 'default' => [ 'home' => [ 'pages' => [ ApplicationNavigationFactory::THESE_SELECTIONNEE_PAGE_ID => [ 'pages' => [ // DEPTH = 2 'portfolio' => [ 'order' => 12, 'label' => 'Portfolio', 'route' => 'portfolio/afficher', 'withtarget' => true, 'paramsInject' => [ 'these', ], 'icon' => 'fas fa-briefcase', // 'resource' => PresoutenancePrivileges::getResourceId(PropositionPrivileges::PROPOSITION_VISUALISER), ], ], ], ], ], ], ], 'controllers' => [ 'factories' => [ PortfolioController::class => PortfolioControllerFactory::class, ], ], 'service_manager' => [ 'factories' => [ ], ], 'view_manager' => [ 'template_path_stack' => [ __DIR__ . '/../view', ], ], ]; No newline at end of file module/Portfolio/src/Portfolio/Controller/PortfolioController.php 0 → 100644 +140 −0 Original line number Diff line number Diff line <?php namespace Portfolio\Controller; use Application\Controller\AbstractController; use Application\RouteMatch; use Doctorant\Entity\Db\Doctorant; use Doctorant\Service\DoctorantServiceAwareTrait; use Fichier\Entity\Db\NatureFichier; use Fichier\Service\Fichier\FichierServiceAwareTrait; use Fichier\Service\Fichier\FichierStorageServiceAwareTrait; use Fichier\Service\NatureFichier\NatureFichierServiceAwareTrait; use Fichier\Service\Storage\Adapter\Exception\StorageAdapterException; use Formation\Entity\Db\FormationExterne; use Formation\Form\Formation\FormationExterne\FormationExterneFormAwareTrait; use Formation\Provider\Template\MailTemplates; use Formation\Provider\Validation\TypeValidation; use Formation\Service\Formation\FormationExterne\FormationExterneServiceAwareTrait; use Formation\Service\Notification\FormationNotificationFactoryAwareTrait; use Formation\Service\Validation\ValidationFormationExterne\ValidationFormationExterneServiceAwareTrait; use Laminas\Http\Response; use Laminas\View\Model\ViewModel; use Notification\Service\NotifierServiceAwareTrait; use UnicaenApp\Exception\RuntimeException; use UnicaenApp\Service\EntityManagerAwareTrait; class PortfolioController extends AbstractController { use EntityManagerAwareTrait; use FormationExterneFormAwareTrait; use NatureFichierServiceAwareTrait; use FichierServiceAwareTrait; use FichierStorageServiceAwareTrait; use DoctorantServiceAwareTrait; use FormationExterneServiceAwareTrait; use ValidationFormationExterneServiceAwareTrait; use FormationNotificationFactoryAwareTrait; use NotifierServiceAwareTrait; public function afficherAction() : ViewModel { $these = $this->requestedThese(); //A remplacer!!!! $idHal = '1407580'; $url = "https://api.archives-ouvertes.fr/search/?q=authIdHal_i:$idHal&rows=10&wt=json&fl=title_s,authFullName_s,publicationDate_s,halId_s,publisher_s&"; $json = file_get_contents($url); $data = json_decode($json, true); $publications = $data['response']['docs'] ?? []; $vm = new ViewModel([ 'these' => $these, 'publications' => $publications, ]); return $vm; } public function modifierAction() : ViewModel { $formationExterne = $this->formationExterneService->getRepository()->getRequestedFormationExterne($this); $form = $this->getFormationExterneForm(); $form->setAttribute('action', $this->url()->fromRoute('formation/formation/modifier-formation-externe', [], [], true)); $form->bind($formationExterne); $form->getInputFilter()->get('attestation')->setRequired(false); $request = $this->getRequest(); if ($request->isPost()) { $files = $request->getFiles()->toArray(); $files = isset($files['attestation']['size']) && $files['attestation']['size'] !== 0 ? $files : []; //permet d'envoyer aussi l'attestation dans la vérification du formulaire $form->setData(array_merge_recursive( $request->getPost()->toArray(), $files )); if ($form->isValid()) { /** @var NatureFichier $nature */ $nature = $this->natureFichierService->getRepository()->findOneBy(['code' => \Formation\Provider\NatureFichier\NatureFichier::CODE_ATTESTATION_FORMATION_EXTERIEURE]); if(isset($files['attestation']['size']) && $files['attestation']['size'] !== 0){ //Suppression de l'ancienne attestation, si une déjà présente if($formationExterne->getAttestation()) $formationExterne->setAttestation(null); $fichiers = $this->fichierService->createFichiersFromUpload(['files' => $files], $nature); $this->fichierService->saveFichiers($fichiers); $formationExterne->setAttestation(array_pop($fichiers)); } $this->formationExterneService->update($formationExterne); } } $vm = new ViewModel([ 'title' => "Modification de la formation externe ".$formationExterne->getLibelle(), 'form' => $form, ]); $vm->setTemplate('formation/formation-externe/modifier'); return $vm; } public function historiserAction() { $formationExterne = $this->formationExterneService->getRepository()->getRequestedFormationExterne($this); $this->formationExterneService->historise($formationExterne); $retour = $this->params()->fromQuery('redirect'); if ($retour !== null) return $this->redirect()->toUrl($retour); } public function restaurerAction() { $formationExterne = $this->formationExterneService->getRepository()->getRequestedFormationExterne($this); $this->formationExterneService->restore($formationExterne); $retour = $this->params()->fromQuery('redirect'); if ($retour !== null) return $this->redirect()->toUrl($retour); } public function supprimerAction() { $formationExterne = $this->formationExterneService->getRepository()->getRequestedFormationExterne($this); $request = $this->getRequest(); if ($request->isPost()) { $data = $request->getPost(); if ($data["reponse"] === "oui") $this->formationExterneService->delete($formationExterne); exit(); } $vm = new ViewModel(); if ($formationExterne !== null) { $vm->setTemplate('formation/default/confirmation'); $vm->setVariables([ 'title' => "Suppression d'une formation externe #" . $formationExterne->getId(), 'text' => "La suppression est définitive êtes-vous sûr·e de vouloir continuer ?", 'action' => $this->url()->fromRoute('formation/formation/supprimer-formation-externe', ["formationExterne" => $formationExterne->getId()], [], true), ]); } return $vm; } } No newline at end of file module/Portfolio/src/Portfolio/Controller/PortfolioControllerFactory.php 0 → 100644 +65 −0 Original line number Diff line number Diff line <?php namespace Portfolio\Controller; use Doctrine\ORM\EntityManager; use Fichier\Service\Fichier\FichierService; use Fichier\Service\Fichier\FichierStorageService; use Fichier\Service\NatureFichier\NatureFichierService; use Formation\Form\Formation\FormationExterne\FormationExterneForm; use Formation\Service\Formation\FormationExterne\FormationExterneService; use Formation\Service\Notification\FormationNotificationFactory; use Formation\Service\Validation\ValidationFormationExterne\ValidationFormationExterneService; use Interop\Container\ContainerInterface; use Notification\Service\NotifierService; use Psr\Container\ContainerExceptionInterface; use Psr\Container\NotFoundExceptionInterface; class PortfolioControllerFactory { /** * @param ContainerInterface $container * @return PortfolioController * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ public function __invoke(ContainerInterface $container) : PortfolioController { /** * @var EntityManager $entityManager * @var NatureFichierService $natureFichier * @var FichierService $fichierService * @var FichierStorageService $fichierStorageService * @var FormationExterneService $formationExterneService * @var ValidationFormationExterneService $validationFormationExterneService * @var FormationNotificationFactory $formationNotificationFactory * @var NotifierService $notifierService */ $entityManager = $container->get('doctrine.entitymanager.orm_default'); $natureFichier = $container->get(NatureFichierService::class); $fichierService = $container->get(FichierService::class); $fichierStorageService = $container->get(FichierStorageService::class); $formationExterneService = $container->get(FormationExterneService::class); $validationFormationExterneService = $container->get(ValidationFormationExterneService::class); $formationNotificationFactory = $container->get(FormationNotificationFactory::class); $notifierService = $container->get(NotifierService::class); /** * @var FormationExterneForm $formationExterneForm */ $formationExterneForm = $container->get('FormElementManager')->get(FormationExterneForm::class); $controller = new PortfolioController(); $controller->setEntityManager($entityManager); $controller->setFormationExterneForm($formationExterneForm); $controller->setFichierService($fichierService); $controller->setNatureFichierService($natureFichier); $controller->setFichierStorageService($fichierStorageService); $controller->setFormationExterneService($formationExterneService); $controller->setValidationFormationExterneService($validationFormationExterneService); $controller->setFormationNotificationFactory($formationNotificationFactory); $controller->setNotifierService($notifierService); return $controller; } } No newline at end of file Loading
config/application.config.php +1 −0 Original line number Diff line number Diff line Loading @@ -91,6 +91,7 @@ return [ 'Validation', 'HDR', 'Candidat', 'Portfolio', 'RNCP' ], 'module_listener_options' => [ Loading
module/Portfolio/Module.php 0 → 100755 +31 −0 Original line number Diff line number Diff line <?php namespace Portfolio; use Laminas\Config\Factory as ConfigFactory; use Laminas\Stdlib\Glob; class Module { public function getConfig() { $paths = array_merge( [__DIR__ . '/config/module.config.php'], Glob::glob(__DIR__ . '/config/others/{,*.}{config}.php', Glob::GLOB_BRACE) ); return ConfigFactory::fromFiles($paths); } public function getAutoloaderConfig(): array { return [ 'Laminas\Loader\StandardAutoloader' => [ 'namespaces' => [ __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__, ], ], ]; } } No newline at end of file
module/Portfolio/config/module.config.php 0 → 100644 +138 −0 Original line number Diff line number Diff line <?php namespace Portfolio; use Application\Navigation\ApplicationNavigationFactory; use Doctrine\ORM\Mapping\Driver\XmlDriver; use Doctrine\Persistence\Mapping\Driver\MappingDriverChain; use Formation\Provider\Privilege\IndexPrivileges; use Portfolio\Controller\PortfolioController; use Portfolio\Controller\PortfolioControllerFactory; use UnicaenPrivilege\Guard\PrivilegeController; use UnicaenPrivilege\Provider\Rule\PrivilegeRuleProvider; return [ 'doctrine' => [ 'driver' => [ 'orm_default' => [ 'class' => MappingDriverChain::class, 'drivers' => [ 'Portfolio\Entity\Db' => 'orm_default_xml_driver', ], ], 'orm_default_xml_driver' => [ 'class' => XmlDriver::class, 'cache' => 'array', 'paths' => [ __DIR__ . '/../src/Portfolio/Entity/Db/Mapping', ], ], ], ], 'bjyauthorize' => [ 'resource_providers' => [ 'BjyAuthorize\Provider\Resource\Config' => [ 'Portfolio' => [], ], ], 'rule_providers' => [ PrivilegeRuleProvider::class => [ 'allow' => [ [ // // Privilèges concernant la ressource Portfolio SOUMIS À ASSERTION. // 'privileges' => [ ], 'resources' => ['Portfolio'], // 'assertion' => ::class, ], ], ], ], 'guards' => [ PrivilegeController::class => [ [ 'controller' => PortfolioController::class, 'action' => [ 'afficher' ], 'privileges' => IndexPrivileges::INDEX_AFFICHER, ], // [ // 'controller' => ::class, // 'action' => [ // ], // 'privileges' => , // 'assertion' => , // ], ], ], ], 'router' => [ 'routes' => [ 'portfolio' => [ 'type' => 'Literal', 'options' => [ 'route' => '/portfolio', ], 'may_terminate' => false, 'child_routes' => [ 'afficher' => [ 'type' => 'Segment', 'options' => [ 'route' => '/afficher/:these', 'constraints' => [ 'these' => '\d+', ], 'defaults' => [ 'controller' => PortfolioController::class, 'action' => 'afficher', ], ], ], ], ], ], ], 'navigation' => [ 'default' => [ 'home' => [ 'pages' => [ ApplicationNavigationFactory::THESE_SELECTIONNEE_PAGE_ID => [ 'pages' => [ // DEPTH = 2 'portfolio' => [ 'order' => 12, 'label' => 'Portfolio', 'route' => 'portfolio/afficher', 'withtarget' => true, 'paramsInject' => [ 'these', ], 'icon' => 'fas fa-briefcase', // 'resource' => PresoutenancePrivileges::getResourceId(PropositionPrivileges::PROPOSITION_VISUALISER), ], ], ], ], ], ], ], 'controllers' => [ 'factories' => [ PortfolioController::class => PortfolioControllerFactory::class, ], ], 'service_manager' => [ 'factories' => [ ], ], 'view_manager' => [ 'template_path_stack' => [ __DIR__ . '/../view', ], ], ]; No newline at end of file
module/Portfolio/src/Portfolio/Controller/PortfolioController.php 0 → 100644 +140 −0 Original line number Diff line number Diff line <?php namespace Portfolio\Controller; use Application\Controller\AbstractController; use Application\RouteMatch; use Doctorant\Entity\Db\Doctorant; use Doctorant\Service\DoctorantServiceAwareTrait; use Fichier\Entity\Db\NatureFichier; use Fichier\Service\Fichier\FichierServiceAwareTrait; use Fichier\Service\Fichier\FichierStorageServiceAwareTrait; use Fichier\Service\NatureFichier\NatureFichierServiceAwareTrait; use Fichier\Service\Storage\Adapter\Exception\StorageAdapterException; use Formation\Entity\Db\FormationExterne; use Formation\Form\Formation\FormationExterne\FormationExterneFormAwareTrait; use Formation\Provider\Template\MailTemplates; use Formation\Provider\Validation\TypeValidation; use Formation\Service\Formation\FormationExterne\FormationExterneServiceAwareTrait; use Formation\Service\Notification\FormationNotificationFactoryAwareTrait; use Formation\Service\Validation\ValidationFormationExterne\ValidationFormationExterneServiceAwareTrait; use Laminas\Http\Response; use Laminas\View\Model\ViewModel; use Notification\Service\NotifierServiceAwareTrait; use UnicaenApp\Exception\RuntimeException; use UnicaenApp\Service\EntityManagerAwareTrait; class PortfolioController extends AbstractController { use EntityManagerAwareTrait; use FormationExterneFormAwareTrait; use NatureFichierServiceAwareTrait; use FichierServiceAwareTrait; use FichierStorageServiceAwareTrait; use DoctorantServiceAwareTrait; use FormationExterneServiceAwareTrait; use ValidationFormationExterneServiceAwareTrait; use FormationNotificationFactoryAwareTrait; use NotifierServiceAwareTrait; public function afficherAction() : ViewModel { $these = $this->requestedThese(); //A remplacer!!!! $idHal = '1407580'; $url = "https://api.archives-ouvertes.fr/search/?q=authIdHal_i:$idHal&rows=10&wt=json&fl=title_s,authFullName_s,publicationDate_s,halId_s,publisher_s&"; $json = file_get_contents($url); $data = json_decode($json, true); $publications = $data['response']['docs'] ?? []; $vm = new ViewModel([ 'these' => $these, 'publications' => $publications, ]); return $vm; } public function modifierAction() : ViewModel { $formationExterne = $this->formationExterneService->getRepository()->getRequestedFormationExterne($this); $form = $this->getFormationExterneForm(); $form->setAttribute('action', $this->url()->fromRoute('formation/formation/modifier-formation-externe', [], [], true)); $form->bind($formationExterne); $form->getInputFilter()->get('attestation')->setRequired(false); $request = $this->getRequest(); if ($request->isPost()) { $files = $request->getFiles()->toArray(); $files = isset($files['attestation']['size']) && $files['attestation']['size'] !== 0 ? $files : []; //permet d'envoyer aussi l'attestation dans la vérification du formulaire $form->setData(array_merge_recursive( $request->getPost()->toArray(), $files )); if ($form->isValid()) { /** @var NatureFichier $nature */ $nature = $this->natureFichierService->getRepository()->findOneBy(['code' => \Formation\Provider\NatureFichier\NatureFichier::CODE_ATTESTATION_FORMATION_EXTERIEURE]); if(isset($files['attestation']['size']) && $files['attestation']['size'] !== 0){ //Suppression de l'ancienne attestation, si une déjà présente if($formationExterne->getAttestation()) $formationExterne->setAttestation(null); $fichiers = $this->fichierService->createFichiersFromUpload(['files' => $files], $nature); $this->fichierService->saveFichiers($fichiers); $formationExterne->setAttestation(array_pop($fichiers)); } $this->formationExterneService->update($formationExterne); } } $vm = new ViewModel([ 'title' => "Modification de la formation externe ".$formationExterne->getLibelle(), 'form' => $form, ]); $vm->setTemplate('formation/formation-externe/modifier'); return $vm; } public function historiserAction() { $formationExterne = $this->formationExterneService->getRepository()->getRequestedFormationExterne($this); $this->formationExterneService->historise($formationExterne); $retour = $this->params()->fromQuery('redirect'); if ($retour !== null) return $this->redirect()->toUrl($retour); } public function restaurerAction() { $formationExterne = $this->formationExterneService->getRepository()->getRequestedFormationExterne($this); $this->formationExterneService->restore($formationExterne); $retour = $this->params()->fromQuery('redirect'); if ($retour !== null) return $this->redirect()->toUrl($retour); } public function supprimerAction() { $formationExterne = $this->formationExterneService->getRepository()->getRequestedFormationExterne($this); $request = $this->getRequest(); if ($request->isPost()) { $data = $request->getPost(); if ($data["reponse"] === "oui") $this->formationExterneService->delete($formationExterne); exit(); } $vm = new ViewModel(); if ($formationExterne !== null) { $vm->setTemplate('formation/default/confirmation'); $vm->setVariables([ 'title' => "Suppression d'une formation externe #" . $formationExterne->getId(), 'text' => "La suppression est définitive êtes-vous sûr·e de vouloir continuer ?", 'action' => $this->url()->fromRoute('formation/formation/supprimer-formation-externe', ["formationExterne" => $formationExterne->getId()], [], true), ]); } return $vm; } } No newline at end of file
module/Portfolio/src/Portfolio/Controller/PortfolioControllerFactory.php 0 → 100644 +65 −0 Original line number Diff line number Diff line <?php namespace Portfolio\Controller; use Doctrine\ORM\EntityManager; use Fichier\Service\Fichier\FichierService; use Fichier\Service\Fichier\FichierStorageService; use Fichier\Service\NatureFichier\NatureFichierService; use Formation\Form\Formation\FormationExterne\FormationExterneForm; use Formation\Service\Formation\FormationExterne\FormationExterneService; use Formation\Service\Notification\FormationNotificationFactory; use Formation\Service\Validation\ValidationFormationExterne\ValidationFormationExterneService; use Interop\Container\ContainerInterface; use Notification\Service\NotifierService; use Psr\Container\ContainerExceptionInterface; use Psr\Container\NotFoundExceptionInterface; class PortfolioControllerFactory { /** * @param ContainerInterface $container * @return PortfolioController * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ public function __invoke(ContainerInterface $container) : PortfolioController { /** * @var EntityManager $entityManager * @var NatureFichierService $natureFichier * @var FichierService $fichierService * @var FichierStorageService $fichierStorageService * @var FormationExterneService $formationExterneService * @var ValidationFormationExterneService $validationFormationExterneService * @var FormationNotificationFactory $formationNotificationFactory * @var NotifierService $notifierService */ $entityManager = $container->get('doctrine.entitymanager.orm_default'); $natureFichier = $container->get(NatureFichierService::class); $fichierService = $container->get(FichierService::class); $fichierStorageService = $container->get(FichierStorageService::class); $formationExterneService = $container->get(FormationExterneService::class); $validationFormationExterneService = $container->get(ValidationFormationExterneService::class); $formationNotificationFactory = $container->get(FormationNotificationFactory::class); $notifierService = $container->get(NotifierService::class); /** * @var FormationExterneForm $formationExterneForm */ $formationExterneForm = $container->get('FormElementManager')->get(FormationExterneForm::class); $controller = new PortfolioController(); $controller->setEntityManager($entityManager); $controller->setFormationExterneForm($formationExterneForm); $controller->setFichierService($fichierService); $controller->setNatureFichierService($natureFichier); $controller->setFichierStorageService($fichierStorageService); $controller->setFormationExterneService($formationExterneService); $controller->setValidationFormationExterneService($validationFormationExterneService); $controller->setFormationNotificationFactory($formationNotificationFactory); $controller->setNotifierService($notifierService); return $controller; } } No newline at end of file