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

Gestion des indicateurs

parent cb12e29e
Loading
Loading
Loading
Loading
+64 −10
Changes for module/Indicateur/config/merged/indicateur.config.php: 64 added lines, 10 removed lines.
Original line number Diff line number Diff line
@@ -4,10 +4,13 @@ namespace Application;

use Indicateur\Controller\Indicateur\IndicateurController;
use Indicateur\Controller\Indicateur\IndicateurControllerFactory;
use Indicateur\Form\Indicateur\IndicateurForm;
use Indicateur\Form\Indicateur\IndicateurFormFactory;
use Indicateur\Form\Indicateur\IndicateurHydrator;
use Indicateur\Form\Indicateur\IndicateurHydratorFactory;
use Indicateur\Provider\Privilege\IndicateurPrivileges;
use Indicateur\Service\Indicateur\IndicateurService;
use Indicateur\Service\Indicateur\IndicateurServiceFactory;
use Indicateur\View\Helper\IndicateurStructureViewHelper;
use UnicaenAuth\Guard\PrivilegeController;
use Zend\Mvc\Router\Http\Literal;
use Zend\Mvc\Router\Http\Segment;
@@ -22,6 +25,10 @@ return [
                        'index',
                        'afficher',
                        'rafraichir',
                        'creer',
                        'modifier',
                        'detruire',
                        'exporter',
                    ],
                    'privileges' => [
                        IndicateurPrivileges::AFFICHER,
@@ -45,16 +52,16 @@ return [
                'may_terminate' => true,
            ],
            'indicateur' => [
                'type'  => Segment::class,
                'type'  => Literal::class,
                'options' => [
                    'route'    => '/indicateur/:indicateur',
                    'route'    => '/indicateur',
                ],
                'may_terminate' => false,
                'child_routes' => [
                    'afficher' => [
                        'type'  => Literal::class,
                        'type'  => Segment::class,
                        'options' => [
                            'route'    => '/afficher',
                            'route'    => '/afficher/:indicateur',
                            'defaults' => [
                                'controller' => IndicateurController::class,
                                'action'     => 'afficher',
@@ -63,9 +70,9 @@ return [
                        'may_terminate' => true,
                    ],
                    'rafraichir' => [
                        'type'  => Literal::class,
                        'type'  => Segment::class,
                        'options' => [
                            'route'    => '/rafraichir',
                            'route'    => '/rafraichir/:indicateur',
                            'defaults' => [
                                'controller' => IndicateurController::class,
                                'action'     => 'rafraichir',
@@ -73,6 +80,50 @@ return [
                        ],
                        'may_terminate' => true,
                    ],
                    'creer' => [
                        'type'  => Literal::class,
                        'options' => [
                            'route'    => '/creer',
                            'defaults' => [
                                'controller' => IndicateurController::class,
                                'action'     => 'creer',
                            ],
                        ],
                        'may_terminate' => true,
                    ],
                    'modifier' => [
                        'type'  => Segment::class,
                        'options' => [
                            'route'    => '/modifier/:indicateur',
                            'defaults' => [
                                'controller' => IndicateurController::class,
                                'action'     => 'modifier',
                            ],
                        ],
                        'may_terminate' => true,
                    ],
                    'detruire' => [
                        'type'  => Segment::class,
                        'options' => [
                            'route'    => '/detruire/:indicateur',
                            'defaults' => [
                                'controller' => IndicateurController::class,
                                'action'     => 'detruire',
                            ],
                        ],
                        'may_terminate' => true,
                    ],
                    'exporter' => [
                        'type'  => Segment::class,
                        'options' => [
                            'route'    => '/exporter/:indicateur',
                            'defaults' => [
                                'controller' => IndicateurController::class,
                                'action'     => 'exporter',
                            ],
                        ],
                        'may_terminate' => true,
                    ],
                ]
            ],
        ],
@@ -89,14 +140,17 @@ return [
        ],
    ],
    'form_elements' => [
        'factories' => [],
        'factories' => [
            IndicateurForm::class => IndicateurFormFactory::class,
        ],
    ],
    'hydrators' => [
        'factories' => [],
        'factories' => [
            IndicateurHydrator::class => IndicateurHydratorFactory::class,
        ],
    ],
    'view_helpers' => [
        'invokables' => [
            'indicateurStructure' => IndicateurStructureViewHelper::class,
        ]
    ]

+98 −2
Changes for module/Indicateur/src/Indicateur/Controller/Indicateur/IndicateurController.php: 98 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -2,12 +2,18 @@

namespace Indicateur\Controller\Indicateur;

use DateTime;
use Indicateur\Entity\Db\Indicateur;
use Indicateur\Form\Indicateur\IndicateurFormAwareTrait;
use Indicateur\Service\Indicateur\IndicateurServiceAwareTrait;
use UnicaenApp\View\Model\CsvModel;
use Zend\Http\Request;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;

class IndicateurController extends AbstractActionController {
    use IndicateurServiceAwareTrait;
    use IndicateurFormAwareTrait;

    public function indexAction()
    {
@@ -21,11 +27,12 @@ class IndicateurController extends AbstractActionController {
    public function afficherAction()
    {
        $indicateur = $this->getIndicateurService()->getRequestedIndicateur($this);
        $data = $this->getIndicateurService()->fetch($indicateur);
        $result = $this->getIndicateurService()->getIndicateurData($indicateur);

        return new ViewModel([
            'indicateur' => $indicateur,
            'data' => $data,
            'header' => $result[0],
            'data' => $result[1],
        ]);
    }

@@ -35,4 +42,93 @@ class IndicateurController extends AbstractActionController {
        $this->getIndicateurService()->refresh($indicateur);
        return $this->redirect()->toRoute('indicateur/afficher', ['indicateur' => $indicateur->getId()], [], true);
    }

    public function creerAction()
    {
        $indicateur = new Indicateur();
        $form = $this->getIndicateurForm();
        $form->setAttribute('action', $this->url()->fromRoute('indicateur/creer', [], [], true));
        $form->bind($indicateur);

        /** @var Request $request */
        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $form->setData($data);
            if ($form->isValid()) {
                $this->getIndicateurService()->create($indicateur);
                $this->getIndicateurService()->createView($indicateur);
            }
        }

        $vm = new ViewModel();
        $vm->setTemplate('indicateur/default/default-form');
        $vm->setVariables([
            'title' => 'Création d\'un nouvel indicateur',
            'form'  => $form,
        ]);
        return $vm;
    }

    public function modifierAction()
    {
        $indicateur = $this->getIndicateurService()->getRequestedIndicateur($this);
        $form = $this->getIndicateurForm();
        $form->setAttribute('action', $this->url()->fromRoute('indicateur/modifier', [], [], true));
        $form->bind($indicateur);

        /** @var Request $request */
        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $form->setData($data);
            if ($form->isValid()) {
                $this->getIndicateurService()->update($indicateur);
                $this->getIndicateurService()->updateView($indicateur);
            }
        }

        $vm = new ViewModel();
        $vm->setTemplate('indicateur/default/default-form');
        $vm->setVariables([
            'title' => 'Modification d\'un indicateur',
            'form'  => $form,
        ]);
        return $vm;
    }

    public function detruireAction()
    {
        $indicateur = $this->getIndicateurService()->getRequestedIndicateur($this);
        $this->getIndicateurService()->dropView($indicateur);
        $this->getIndicateurService()->delete($indicateur);
        return $this->redirect()->toRoute('indicateurs', [], [], true);
    }

    public function exporterAction()
    {
        $indicateur = $this->getIndicateurService()->getRequestedIndicateur($this);
        $date = new DateTime();
        $filename = "preecog_".$indicateur->getViewId()."_".$date->format('Ymd-Hms').".csv";

        $result = $this->getIndicateurService()->getIndicateurData($indicateur);

        $CSV = new CsvModel();
        $CSV->setDelimiter(';');
        $CSV->setEnclosure('"');
        $CSV->setHeader($result[0]);
        $CSV->setData($result[1]);
        $CSV->setFilename($filename);

        return $CSV;
    }

    public function rafraichirTousAction()
    {
        $indicateurs = $this->getIndicateurService()->getIndicateurs();
        foreach ($indicateurs as $indicateur) {
            $this->getIndicateurService()->refresh($indicateur);
        }
        exit();
    }
}
 No newline at end of file
+7 −0
Changes for module/Indicateur/src/Indicateur/Controller/Indicateur/IndicateurControllerFactory.php: 7 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@

namespace Indicateur\Controller\Indicateur;

use Indicateur\Form\Indicateur\IndicateurForm;
use Indicateur\Service\Indicateur\IndicateurService;
use Zend\Mvc\Controller\ControllerManager;

@@ -14,9 +15,15 @@ class IndicateurControllerFactory {
         */
        $indicateurService = $manager->getServiceLocator()->get(IndicateurService::class);

        /**
         * @var IndicateurForm $indicateurForm
         */
        $indicateurForm = $manager->getServiceLocator()->get('FormElementManager')->get(IndicateurForm::class);

        /** @var IndicateurController $controller */
        $controller = new IndicateurController();
        $controller->setIndicateurService($indicateurService);
        $controller->setIndicateurForm($indicateurForm);
        return $controller;
    }
}
 No newline at end of file
+1 −1
Changes for module/Indicateur/src/Indicateur/Entity/Db/Indicateur.php: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ use DateTime;

class Indicateur {

    public $ENTITY_STRUCTURE='Structure';
    const ENTITY_STRUCTURE='Structure';

    /** @var integer */
    private $id;
+108 −0
Changes for module/Indicateur/src/Indicateur/Form/Indicateur/IndicateurForm.php: 108 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Indicateur\Form\Indicateur;

use Indicateur\Entity\Db\Indicateur;
use Zend\Form\Element\Button;
use Zend\Form\Element\Select;
use Zend\Form\Element\Text;
use Zend\Form\Form;
use Zend\InputFilter\Factory;

class IndicateurForm extends Form {

    public function init()
    {
        // libelle
        $this->add([
            'type' => Text::class,
            'name' => 'libelle',
            'options' => [
                'label' => "Libelle* :",
            ],
            'attributes' => [
                'id' => 'libelle',
            ],
        ]);
        // description
        $this->add([
            'name' => 'description',
            'type' => 'textarea',
            'options' => [
                'label' => 'Description : ',
                'label_attributes' => [
                    'class' => 'control-label',
                ],
            ],
            'attributes' => [
                'class' => 'type2 form-control',
            ]
        ]);
        // view_id
        $this->add([
            'type' => Text::class,
            'name' => 'view_id',
            'options' => [
                'label' => "Identifiant de la vue* :",
            ],
            'attributes' => [
                'id' => 'libelle',
            ],
        ]);
        // entity
        $this->add([
            'type' => Select::class,
            'name' => 'entity',
            'options' => [
                'label' => "Entity associé* :",
                'empty_option' => "Sélectionner une entité ...",
                'value_options' => [
                   Indicateur::ENTITY_STRUCTURE   => 'Structure',
                ]
            ],
            'attributes' => [
                'id' => 'formations',
                'class'             => 'bootstrap-selectpicker show-tick',
            ],
        ]);
        // requete
        $this->add([
            'name' => 'requete',
            'type' => 'textarea',
            'options' => [
                'label' => 'Requête* : ',
                'label_attributes' => [
                    'class' => 'control-label',
                ],
            ],
            'attributes' => [
                'class' => 'form-control',
                'style' => 'min-height:250px;',
            ]
        ]);
        // submit
        $this->add([
            'type' => Button::class,
            'name' => 'creer',
            'options' => [
                'label' => '<i class="fas fa-save"></i> Enregistrer',
                'label_options' => [
                    'disable_html_escape' => true,
                ],
            ],
            'attributes' => [
                'type' => 'submit',
                'class' => 'btn btn-primary',
            ],
        ]);


        $this->setInputFilter((new Factory())->createInputFilter([
            'libelle'               => [ 'required' => true,  ],
            'description'           => [ 'required' => false,  ],
            'view_id'               => [ 'required' => true,  ],
            'entity'                => [ 'required' => true,  ],
            'requete'               => [ 'required' => true,  ],
        ]));
    }
}
 No newline at end of file
Loading