Commit 48085134 authored by Thomas Hamel's avatar Thomas Hamel
Browse files

WIP

parent 04a9f57f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -91,6 +91,7 @@ return [
        'Validation',
        'HDR',
        'Candidat',
        'Portfolio',
        'RNCP'
    ],
    'module_listener_options' => [
+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
+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
+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&middot;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
+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