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

Gestion de base + privilege

parent 7da1c0ad
Loading
Loading
Loading
Loading
Loading
+56 −1
Original line number Diff line number Diff line
@@ -21,6 +21,11 @@ return [
                    'controller' => TableauDeBordController::class,
                    'action' => [
                        'index',
                        'ajouter',
                        'modifier',
                        'ajouter-indicateur',
                        'retirer-indicateur',
                        'supprimer',
                        'afficher',
                    ],
                    'privileges' => [
@@ -45,6 +50,16 @@ return [
                ],
                'may_terminate' => true,
                'child_routes' => [
                    'ajouter' => [
                        'type'  => Literal::class,
                        'options' => [
                            'route'    => '/ajouter',
                            'defaults' => [
                                'controller' => TableauDeBordController::class,
                                'action'     => 'ajouter',
                            ],
                        ],
                    ],
                    'afficher' => [
                        'type'  => Segment::class,
                        'options' => [
@@ -54,8 +69,48 @@ return [
                                'action'     => 'afficher',
                            ],
                        ],
                        'may_terminate' => true,
                    ],
                    'modifier' => [
                        'type'  => Segment::class,
                        'options' => [
                            'route'    => '/modifier/:tableau-de-bord',
                            'defaults' => [
                                'controller' => TableauDeBordController::class,
                                'action'     => 'modifier',
                            ],
                        ],
                    ],
                    'supprimer' => [
                        'type'  => Segment::class,
                        'options' => [
                            'route'    => '/supprimer/:tableau-de-bord',
                            'defaults' => [
                                'controller' => TableauDeBordController::class,
                                'action'     => 'supprimer',
                            ],
                        ],
                    ],
                    'ajouter-indicateur' => [
                        'type'  => Segment::class,
                        'options' => [
                            'route'    => '/ajouter-indicateur/:tableau-de-bord',
                            'defaults' => [
                                'controller' => TableauDeBordController::class,
                                'action'     => 'ajouter-indicateur',
                            ],
                        ],
                    ],
                    'retirer-indicateur' => [
                        'type'  => Segment::class,
                        'options' => [
                            'route'    => '/retirer-indicateur/:tableau-de-bord/:indicateur',
                            'defaults' => [
                                'controller' => TableauDeBordController::class,
                                'action'     => 'retirer-indicateur',
                            ],
                        ],
                    ],

                ],
            ],
        ],
+14 −1
Original line number Diff line number Diff line
@@ -21,3 +21,16 @@ WITH d(code, lib, ordre) AS (
SELECT cp.id, d.code, d.lib, d.ordre
FROM d
         JOIN unicaen_privilege_categorie cp ON cp.CODE = 'abonnement';


INSERT INTO unicaen_privilege_categorie (code, libelle, ordre, namespace)
VALUES ('tableaudebord', 'Gestions des abonnement', 810, 'UnicaenIndicateur\Provider\Privilege');
INSERT INTO unicaen_privilege_privilege(CATEGORIE_ID, CODE, LIBELLE, ORDRE)
WITH d(code, lib, ordre) AS (
    SELECT 'afficher-tableaudebord', 'Afficher un tableau de bord', 4   UNION
    SELECT 'editer-tableaudebord', 'Éditer un tableau de bord', 5   UNION
    SELECT 'detruire-tableaudebord', 'Effacer un tableau de bord', 6
)
SELECT cp.id, d.code, d.lib, d.ordre
FROM d
JOIN unicaen_privilege_categorie cp ON cp.CODE = 'tableaudebord';
 No newline at end of file
+3 −0
Original line number Diff line number Diff line
@@ -57,6 +57,9 @@ class IndicateurController extends AbstractActionController {
    {
        $indicateur = $this->getIndicateurService()->getRequestedIndicateur($this);
        $this->getIndicateurService()->refresh($indicateur);

        $retour = $this->params()->fromQuery('retour');
        if ($retour) return $this->redirect()->toUrl($retour);
        return $this->redirect()->toRoute('indicateur/afficher', ['indicateur' => $indicateur->getId()], [], true);
    }

+116 −0
Original line number Diff line number Diff line
@@ -2,13 +2,19 @@

namespace UnicaenIndicateur\Controller;

use Laminas\Http\Response;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\ViewModel;
use UnicaenIndicateur\Entity\Db\TableauDeBord;
use UnicaenIndicateur\Form\TableauDeBord\TableauDeBordFormAwareTrait;
use UnicaenIndicateur\Service\Indicateur\IndicateurServiceAwareTrait;
use UnicaenIndicateur\Service\TableauDeBord\TableauDeBordServiceAwareTrait;

class TableauDeBordController extends AbstractActionController
{
    use IndicateurServiceAwareTrait;
    use TableauDeBordServiceAwareTrait;
    use TableauDeBordFormAwareTrait;

    public function indexAction() : ViewModel
    {
@@ -27,4 +33,114 @@ class TableauDeBordController extends AbstractActionController
            'tableau' => $tableau,
        ]);
    }

    public function ajouterAction() : ViewModel
    {
        $tableau = new TableauDeBord();

        $form = $this->getTableauDeBordForm();
        $form->setAttribute('action', $this->url()->fromRoute('tableau-de-bord/ajouter', [], [], true));
        $form->bind($tableau);

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $form->setData($data);

            if ($form->isValid()) {
                $this->getTableauDeBordService()->create($tableau);
            }
        }

        $vm = new ViewModel([
            'title' => "Création d'un tableau de bord",
            'form' => $form,
        ]);
        $vm->setTemplate('unicaen-indicateur/default/default-form');
        return $vm;
    }

    public function modifierAction() : ViewModel
    {
        $tableau = $this->getTableauDeBordService()->getRequestedTableauDeBord($this);

        $form = $this->getTableauDeBordForm();
        $form->setAttribute('action', $this->url()->fromRoute('tableau-de-bord/modifier', ['tableau-de-bord' => $tableau->getId()], [], true));
        $form->bind($tableau);

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

        $vm = new ViewModel([
            'title' => "Modification des informations du tableau de bord",
            'form' => $form,
        ]);
        $vm->setTemplate('unicaen-indicateur/default/default-form');
        return $vm;
    }

    public function supprimerAction() : ViewModel
    {
        $tableau = $this->getTableauDeBordService()->getRequestedTableauDeBord($this);

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            if ($data["reponse"] === "oui") $this->getTableauDeBordService()->delete($tableau);
            exit();
        }

        $vm = new ViewModel();
        if ($tableau !== null) {
            $vm->setTemplate('application/default/confirmation');
            $vm->setVariables([
                'title' => "Suppression du tableau de bord [" . $tableau->getTitre() . "]",
                'text' => "La suppression est définitive êtes-vous sûr·e de vouloir continuer ?",
                'action' => $this->url()->fromRoute('tableau-de-bord/supprimer', ["tableau-de-bord" => $tableau->getId()], [], true),
            ]);
        }
        return $vm;
    }

    /** Gestion des indicateurs  ****************************************************************/

    public function ajouterIndicateurAction() : ViewModel
    {
        $tableau = $this->getTableauDeBordService()->getRequestedTableauDeBord($this);
        $indicateurs = $this->getIndicateurService()->getIndicateurs();

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();

            $indicateur = $this->getIndicateurService()->getIndicateur($data['indicateur']);
            if ($indicateur) {
                $tableau->addIndicateur($indicateur);
                $this->getTableauDeBordService()->update($tableau);
            }
        }

        return new ViewModel([
            'title' => "Ajout d'un indicateur au tableau de bord",
            'tableau' => $tableau,
            'indicateurs' => $indicateurs,
        ]);
    }

    public function retirerIndicateurAction() : Response
    {
        $tableau = $this->getTableauDeBordService()->getRequestedTableauDeBord($this);
        $indicateur = $this->getIndicateurService()->getRequestedIndicateur($this);

        $tableau->removeIndicateur($indicateur);
        $this->getTableauDeBordService()->update($tableau);

        return $this->redirect()->toRoute('tableau-de-bord/afficher', ['tableau-de-bord' => $tableau->getId()], [], true);
    }
}
 No newline at end of file
+9 −0
Original line number Diff line number Diff line
@@ -6,6 +6,8 @@ use Psr\Container\ContainerExceptionInterface;
use Psr\Container\ContainerInterface;
use Psr\Container\NotFoundExceptionInterface;
use UnicaenIndicateur\Entity\Db\TableauDeBord;
use UnicaenIndicateur\Form\TableauDeBord\TableauDeBordForm;
use UnicaenIndicateur\Service\Indicateur\IndicateurService;
use UnicaenIndicateur\Service\TableauDeBord\TableauDeBordService;

class TableauDeBordControllerFactory {
@@ -19,11 +21,18 @@ class TableauDeBordControllerFactory {
    public function __invoke(ContainerInterface $container) : TableauDeBordController
    {
        /**
         * @var IndicateurService $indicateurService
         * @var TableauDeBordService $tableauService
         * @var TableauDeBordForm $tableauForm
         */
        $indicateurService = $container->get(IndicateurService::class);
        $tableauService = $container->get(TableauDeBordService::class);
        $tableauForm = $container->get('FormElementManager')->get(TableauDeBordForm::class);

        $controller = new TableauDeBordController();
        $controller->setIndicateurService($indicateurService);
        $controller->setTableauDeBordForm($tableauForm);
        $controller->setTableauDeBordService($tableauService);
        return $controller;
    }
}
 No newline at end of file
Loading