Commit 67622c15 authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

Ajout de la documentation

parent cb59104a
Loading
Loading
Loading
Loading
Loading
+219 −0
Original line number Diff line number Diff line
<?php

namespace UnicaenParametre;

use Laminas\Router\Http\Literal;
use Laminas\Router\Http\Segment;
use UnicaenAide\Controller\Documentation\DocumentationController;
use UnicaenAide\Controller\Documentation\DocumentationControllerFactory;
use UnicaenAide\Controller\Documentation\LienController;
use UnicaenAide\Controller\Documentation\LienControllerFactory;
use UnicaenAide\Form\Documentation\Lien\LienForm;
use UnicaenAide\Form\Documentation\Lien\LienFormFactory;
use UnicaenAide\Form\Documentation\Lien\LienHydrator;
use UnicaenAide\Form\Documentation\Lien\LienHydratorFactory;
use UnicaenAide\Provider\Privilege\UnicaenaidedocumentationPrivileges;
use UnicaenAide\Service\Documentation\Lien\LienService;
use UnicaenAide\Service\Documentation\Lien\LienServiceFactory;
use UnicaenPrivilege\Guard\PrivilegeController;

return [
    'bjyauthorize' => [
        'guards' => [
            PrivilegeController::class => [
                [
                    'controller' => DocumentationController::class,
                    'action' => [
                        'index',
                    ],
                    'pivileges' => UnicaenaidedocumentationPrivileges::DOCUMENTATION_AFFICHER,
                ],
                [
                    'controller' => LienController::class,
                    'action' => [
                        'index',
                    ],
                    'pivileges' => UnicaenaidedocumentationPrivileges::DOCUMENTATION_INDEX,
                ],
                [
                    'controller' => LienController::class,
                    'action' => [
                        'afficher',
                    ],
                    'pivileges' => UnicaenaidedocumentationPrivileges::DOCUMENTATION_INDEX,
                ],
                [
                    'controller' => LienController::class,
                    'action' => [
                        'ajouter',
                    ],
                    'pivileges' => UnicaenaidedocumentationPrivileges::DOCUMENTATION_AJOUTER,
                ],
                [
                    'controller' => LienController::class,
                    'action' => [
                        'modifier',
                    ],
                    'pivileges' => UnicaenaidedocumentationPrivileges::DOCUMENTATION_MODIFIER,
                ],
                [
                    'controller' => LienController::class,
                    'action' => [
                        'historiser',
                        'restaurer',
                    ],
                    'pivileges' => UnicaenaidedocumentationPrivileges::DOCUMENTATION_HISTORISER,
                ],
                [
                    'controller' => LienController::class,
                    'action' => [
                        'supprimer',
                    ],
                    'pivileges' => UnicaenaidedocumentationPrivileges::DOCUMENTATION_SUPPRIMER,
                ],
            ],
        ],
    ],

    'navigation'      => [
        'default' => [
            'home' => [
                'pages' => [
                    'unicaenaide' => [
                        'pages' => [
                            'documentation' => [
                                'label'    => "Documentation",
                                'route'    => "unicaen-aide/documentation",
                                'resource' => PrivilegeController::getResourceId(DocumentationController::class, 'index'),
                                'order'    => 300,
                                'pages' => [],
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ],

    'router' => [
        'routes' => [
            'unicaen-aide' => [
                'type'  => Literal::class,
                'options' => [
                    'route'    => '/unicaen-aide',
                ],
                'child_routes' => [
                    'documentation' => [
                        'type'  => Literal::class,
                        'options' => [
                            'route'    => '/documentation',
                            'defaults' => [
                                'controller' => DocumentationController::class,
                                'action' => 'index'
                            ],
                        ],
                        'may_terminate' => true,
                        'child_routes' => [
                            'lien' => [
                                'type'  => Literal::class,
                                'options' => [
                                    'route'    => '/lien',
                                    'defaults' => [
                                        'controller' => LienController::class,
                                        'action' => 'index'
                                    ],
                                ],
                                'may_terminate' => true,
                                'child_routes' => [
                                    'afficher' => [
                                        'type'  => Segment::class,
                                        'options' => [
                                            'route'    => '/afficher/:lien',
                                            'defaults' => [
                                                'controller' => LienController::class,
                                                'action' => 'afficher'
                                            ],
                                        ],
                                    ],
                                    'ajouter' => [
                                        'type'  => Literal::class,
                                        'options' => [
                                            'route'    => '/ajouter',
                                            'defaults' => [
                                                'controller' => LienController::class,
                                                'action' => 'ajouter'
                                            ],
                                        ],
                                    ],
                                    'modifier' => [
                                        'type'  => Segment::class,
                                        'options' => [
                                            'route'    => '/modifier/:lien',
                                            'defaults' => [
                                                'controller' => LienController::class,
                                                'action' => 'modifier'
                                            ],
                                        ],
                                    ],
                                    'historiser' => [
                                        'type'  => Segment::class,
                                        'options' => [
                                            'route'    => '/historiser/:lien',
                                            'defaults' => [
                                                'controller' => LienController::class,
                                                'action' => 'historiser'
                                            ],
                                        ],
                                    ],
                                    'restaurer' => [
                                        'type'  => Segment::class,
                                        'options' => [
                                            'route'    => '/restaurer/:lien',
                                            'defaults' => [
                                                'controller' => LienController::class,
                                                'action' => 'restaurer'
                                            ],
                                        ],
                                    ],
                                    'supprimer' => [
                                        'type'  => Segment::class,
                                        'options' => [
                                            'route'    => '/supprimer/:lien',
                                            'defaults' => [
                                                'controller' => LienController::class,
                                                'action' => 'supprimer'
                                            ],
                                        ],
                                    ],
                                ],
                            ],
                        ]
                    ],
                ],
            ],
        ],
    ],

    'service_manager' => [
        'factories' => [
            LienService::class => LienServiceFactory::class,
        ],
    ],
    'controllers'     => [
        'factories' => [
            DocumentationController::class => DocumentationControllerFactory::class,
            LienController::class => LienControllerFactory::class,
        ],
    ],
    'form_elements' => [
        'factories' => [
            LienForm::class => LienFormFactory::class,
        ],
    ],
    'hydrators' => [
        'factories' => [
            LienHydrator::class => LienHydratorFactory::class,
        ],
    ]

];
 No newline at end of file
+1 −1
Original line number Diff line number Diff line
@@ -85,7 +85,7 @@ return [
                                'label'    => "Foire aux questions",
                                'route'    => "unicaen-aide/faq",
                                'resource' => PrivilegeController::getResourceId(FaqController::class, 'index'),
                                'order'    => 200,
                                'order'    => 100,
                                'pages' => [],
                            ],
                        ],
+22 −0
Original line number Diff line number Diff line
<?php

namespace UnicaenAide\Controller\Documentation;

use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\ViewModel;
use UnicaenAide\Service\Documentation\Lien\LienServiceAwareTrait;

class DocumentationController extends AbstractActionController
{
    use LienServiceAwareTrait;

    public function indexAction() : ViewModel
    {
        $liens = $this->getLienService()->getLiens(false);
        $vm =  new ViewModel([
            'liens' => $liens,
        ]);
        $vm->setTemplate('unicaen-aide/documentation/afficher');
        return $vm;
    }
}
 No newline at end of file
+29 −0
Original line number Diff line number Diff line
<?php

namespace UnicaenAide\Controller\Documentation;

use Psr\Container\ContainerExceptionInterface;
use Psr\Container\ContainerInterface;
use Psr\Container\NotFoundExceptionInterface;
use UnicaenAide\Service\Documentation\Lien\LienService;

class DocumentationControllerFactory {

    /**
     * @param ContainerInterface $container
     * @return DocumentationController
     * @throws ContainerExceptionInterface
     * @throws NotFoundExceptionInterface
     */
    public function __invoke(ContainerInterface $container) : DocumentationController
    {
        /**
         * @var LienService $lienService
         */
        $lienService = $container->get(LienService::class);

        $controller = new DocumentationController();
        $controller->setLienService($lienService);
        return $controller;
    }
}
 No newline at end of file
+128 −0
Original line number Diff line number Diff line
<?php

namespace UnicaenAide\Controller\Documentation;

use Laminas\Http\Request;
use Laminas\Http\Response;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\ViewModel;
use UnicaenAide\Entity\Db\DocumentationLien;
use UnicaenAide\Form\Documentation\Lien\LienFormAwareTrait;
use UnicaenAide\Service\Documentation\Lien\LienServiceAwareTrait;

class LienController extends AbstractActionController {
    use LienServiceAwareTrait;
    use LienFormAwareTrait;

    public function indexAction() : ViewModel
    {
        $liens = $this->getLienService()->getLiens();

        return new ViewModel([
            'liens' => $liens,
        ]);
    }

    public function afficherAction() : ViewModel
    {
        $lien = $this->getLienService()->getRequestedLien($this);

        return new ViewModel([
            'title' => "Affichage de la lien",
            'lien' => $lien,
        ]);
    }

    public function ajouterAction() : ViewModel
    {
        $lien = new DocumentationLien();
        $form = $this->getLienForm();
        $form->setAttribute('action', $this->url()->fromRoute('unicaen-aide/documentation/lien/ajouter', [], [], true));
        $form->bind($lien);

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $form->setData($data);
            if ($form->isValid()) {
                $this->getLienService()->create($lien);
            }
        }

        $vm = new ViewModel([
            'title' => "Ajouter une documentation",
            'form' => $form,
        ]);
        $vm->setTemplate('unicaen-aide/default/default-form');
        return $vm;
    }

    public function modifierAction() : ViewModel
    {
        $lien = $this->getLienService()->getRequestedLien($this);
        $form = $this->getLienForm();
        $form->setAttribute('action', $this->url()->fromRoute('unicaen-aide/documentation/lien/modifier', ['lien' => $lien->getId()], [], true));
        $form->bind($lien);

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $form->setData($data);
            if ($form->isValid()) {
                $this->getLienService()->update($lien);
            }
        }

        $vm = new ViewModel([
            'title' => "Modification d'une documentation",
            'form' => $form,
        ]);
        $vm->setTemplate('unicaen-aide/default/default-form');
        return $vm;
    }

    public function historiserAction() : Response
    {
        $lien = $this->getLienService()->getRequestedLien($this);
        $this->getLienService()->historise($lien);

        $retour = $this->params()->fromQuery('retour');
        if ($retour) return $this->redirect()->toUrl($retour);
        return $this->redirect()->toRoute('unicaen-aide/documentation/lien', [], [], true);
    }

    public function restaurerAction() : Response
    {
        $lien = $this->getLienService()->getRequestedLien($this);
        $this->getLienService()->restore($lien);

        $retour = $this->params()->fromQuery('retour');
        if ($retour) return $this->redirect()->toUrl($retour);
        return $this->redirect()->toRoute('unicaen-aide/documentation/lien', [], [], true);
    }

    public function supprimerAction()
    {
        $lien = $this->getLienService()->getRequestedLien($this);

        /** @var Request $request */
        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            if ($data["reponse"] === "oui") $this->getLienService()->delete($lien);
            exit();
        }

        $vm = new ViewModel();
        if ($lien !== null) {
            $vm->setTemplate('unicaen-aide/default/confirmation');
            $vm->setVariables([
                'title' => "Suppression de la documentation",
                'text' => "La suppression est définitive êtes-vous sûr&middot;e de vouloir continuer ?",
                'action' => $this->url()->fromRoute('unicaen-aide/documentation/lien/supprimer', ["lien" => $lien->getId()], [], true),
            ]);
        }
        return $vm;
    }

}
 No newline at end of file
Loading