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

Ajout des interface pour modéliser les destinations et les activités

parent ac42ea87
Loading
Loading
Loading
Loading
+191 −0
Original line number Diff line number Diff line
<?php

namespace Application;

use Application\Controller\FonctionController;
use Application\Controller\FonctionControllerFactory;
use Application\Form\FonctionActivite\FonctionActiviteForm;
use Application\Form\FonctionActivite\FonctionActiviteFormFactory;
use Application\Form\FonctionActivite\FonctionActiviteHydrator;
use Application\Form\FonctionActivite\FonctionActiviteHydratorFactory;
use Application\Form\FonctionDestination\FonctionDestinationForm;
use Application\Form\FonctionDestination\FonctionDestinationFormFactory;
use Application\Form\FonctionDestination\FonctionDestinationHydrator;
use Application\Form\FonctionDestination\FonctionDestinationHydratorFactory;
use Application\Provider\Privilege\FormationPrivileges;
use Application\Service\Fonction\FonctionService;
use Application\Service\Fonction\FonctionServiceFactory;
use UnicaenPrivilege\Guard\PrivilegeController;
use Zend\Router\Http\Literal;
use Zend\Router\Http\Segment;

return [
    'bjyauthorize' => [
        'guards' => [
            PrivilegeController::class => [
                [
                    'controller' => FonctionController::class,
                    'action' => [
                        'index',

                        'ajouter-destination',
                        'modifier-destination',
                        'supprimer-destination',
                        'ajouter-activite',
                        'modifier-activite',
                        'supprimer-activite',
                    ],
                    'privileges' => [
                        FormationPrivileges::FORMATION_INDEX,
                    ],
                ],
            ],
        ],
    ],


    'navigation'      => [
        'default' => [
            'home' => [
                'pages' => [
                    'ressource' => [
                        'pages' => [
                            'fonction' => [
                                'label'    => 'Fonctions',
                                'route'    => 'fonction',
                                'resource' => FormationPrivileges::getResourceId(FormationPrivileges::FORMATION_AFFICHER),
                                'order'    => 680,
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ],

    'router'          => [
        'routes' => [
            'fonction' => [
                'type'  => Literal::class,
                'options' => [
                    'route'    => '/fonction',
                    'defaults' => [
                        'controller' => FonctionController::class,
                        'action' => 'index',
                    ],
                ],
                'may_terminate' => true,
                'child_routes' => [
                    'destination' => [
                        'type'  => Literal::class,
                        'options' => [
                            'route'    => '/destination',
                            'defaults' => [
                                'controller' => FonctionController::class,
                            ],
                        ],
                        'may_terminate' => false,
                        'child_routes' => [
                            'ajouter' => [
                                'type'  => Literal::class,
                                'options' => [
                                    'route'    => '/ajouter',
                                    'defaults' => [
                                        'controller' => FonctionController::class,
                                        'action' => 'ajouter-destination',
                                    ],
                                ],
                            ],
                            'modifier' => [
                                'type'  => Segment::class,
                                'options' => [
                                    'route'    => '/modifier/:destination',
                                    'defaults' => [
                                        'controller' => FonctionController::class,
                                        'action' => 'modifier-destination',
                                    ],
                                ],
                            ],
                            'supprimer' => [
                                'type'  => Segment::class,
                                'options' => [
                                    'route'    => '/supprimer/:destination',
                                    'defaults' => [
                                        'controller' => FonctionController::class,
                                        'action' => 'supprimer-destination',
                                    ],
                                ],
                            ],
                        ],
                    ],
                    'activite' => [
                        'type'  => Literal::class,
                        'options' => [
                            'route'    => '/activite',
                            'defaults' => [
                                'controller' => FonctionController::class,
                            ],
                        ],
                        'may_terminate' => false,
                        'child_routes' => [
                            'ajouter' => [
                                'type'  => Literal::class,
                                'options' => [
                                    'route'    => '/ajouter',
                                    'defaults' => [
                                        'controller' => FonctionController::class,
                                        'action' => 'ajouter-activite',
                                    ],
                                ],
                            ],
                            'modifier' => [
                                'type'  => Segment::class,
                                'options' => [
                                    'route'    => '/modifier/:activite',
                                    'defaults' => [
                                        'controller' => FonctionController::class,
                                        'action' => 'modifier-activite',
                                    ],
                                ],
                            ],
                            'supprimer' => [
                                'type'  => Segment::class,
                                'options' => [
                                    'route'    => '/supprimer/:activite',
                                    'defaults' => [
                                        'controller' => FonctionController::class,
                                        'action' => 'supprimer-activite',
                                    ],
                                ],
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ],

    'service_manager' => [
        'factories' => [
            FonctionService::class => FonctionServiceFactory::class,
        ],
    ],
    'controllers'     => [
        'factories' => [
            FonctionController::class => FonctionControllerFactory::class,
        ],
    ],
    'form_elements' => [
        'factories' => [
            FonctionActiviteForm::class => FonctionActiviteFormFactory::class,
            FonctionDestinationForm::class => FonctionDestinationFormFactory::class,
        ],
    ],
    'hydrators' => [
        'factories' => [
            FonctionActiviteHydrator::class => FonctionActiviteHydratorFactory::class,
            FonctionDestinationHydrator::class => FonctionDestinationHydratorFactory::class,
        ],
    ],

];
 No newline at end of file
+148 −0
Original line number Diff line number Diff line
<?php

namespace Application\Controller;

use Application\Entity\Db\FonctionActivite;
use Application\Entity\Db\FonctionDestination;
use Application\Form\FonctionActivite\FonctionActiviteFormAwareTrait;
use Application\Form\FonctionDestination\FonctionDestinationFormAwareTrait;
use Application\Service\Fonction\FonctionServiceAwareTrait;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;

class FonctionController extends AbstractActionController {
    use FonctionServiceAwareTrait;
    use FonctionActiviteFormAwareTrait;
    use FonctionDestinationFormAwareTrait;

    public function indexAction()
    {
        $destinations = $this->getFonctionService()->getDestinations();
        $activites = $this->getFonctionService()->getActivites();

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

    public function ajouterDestinationAction()
    {
        $destination = new FonctionDestination();

        $form = $this->getFonctionDestinationForm();
        $form->setAttribute('action', $this->url()->fromRoute('fonction/destination/ajouter', [], [], true));
        $form->bind($destination);

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $form->setData($data);
            if ($form->isValid()) {
                $this->getFonctionService()->createDestination($destination);
            }
        }

        $vm = new ViewModel();
        $vm->setTemplate('application/default/default-form');
        $vm->setVariables([
            'title' => "Ajout d'une nouvelle destination",
            'form' => $form,
        ]);
        return $vm;
    }

    public function modifierDestinationAction()
    {
        $destination = $this->getFonctionService()->getResquestedDestrination($this);

        $form = $this->getFonctionDestinationForm();
        $form->setAttribute('action', $this->url()->fromRoute('fonction/destination/modifier', ['destination' => $destination->getId()], [], true));
        $form->bind($destination);

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $form->setData($data);
            if ($form->isValid()) {
                $this->getFonctionService()->updateDestination($destination);
            }
        }

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

    public function supprimerDestinationAction()
    {
        $destination = $this->getFonctionService()->getResquestedDestrination($this);
        $this->getFonctionService()->deleteDestination($destination);

        return $this->redirect()->toRoute('fonction');
    }

    public function ajouterActiviteAction()
    {
        $activite = new FonctionActivite();

        $form = $this->getFonctionActivitenForm();
        $form->setAttribute('action', $this->url()->fromRoute('fonction/activite/ajouter', [], [], true));
        $form->bind($activite);

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $form->setData($data);
            if ($form->isValid()) {
                $this->getFonctionService()->createActivite($activite);
            }
        }

        $vm = new ViewModel();
        $vm->setTemplate('application/default/default-form');
        $vm->setVariables([
            'title' => "Ajout d'une nouvelle activite",
            'form' => $form,
        ]);
        return $vm;
    }

    public function modifierActiviteAction()
    {
        $activite = $this->getFonctionService()->getResquestedActivite($this);

        $form = $this->getFonctionActivitenForm();
        $form->setAttribute('action', $this->url()->fromRoute('fonction/activite/modifier', ['activite' => $activite->getId()], [], true));
        $form->bind($activite);

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $form->setData($data);
            if ($form->isValid()) {
                $this->getFonctionService()->updateActivite($activite);
            }
        }

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

    public function supprimerActiviteAction()
    {
        $activite = $this->getFonctionService()->getResquestedActivite($this);
        $this->getFonctionService()->deleteActivite($activite);

        return $this->redirect()->toRoute('fonction');
    }
}
 No newline at end of file
+38 −0
Original line number Diff line number Diff line
<?php

namespace Application\Controller;

use Application\Entity\Db\FonctionActivite;
use Application\Form\FonctionActivite\FonctionActiviteForm;
use Application\Form\FonctionDestination\FonctionDestinationForm;
use Application\Service\Fonction\FonctionService;
use Interop\Container\ContainerInterface;

class FonctionControllerFactory {

    /**
     * @param ContainerInterface $container
     * @return FonctionController
     */
    public function __invoke(ContainerInterface $container)
    {
        /**
         * @var FonctionService $fonctionService
         */
        $fonctionService = $container->get(FonctionService::class);

        /**
         * @var FonctionActiviteForm $fonctionActiviteForm
         * @var FonctionDestinationForm $fonctionDestinationForm
         */
        $fonctionActiviteForm = $container->get('FormElementManager')->get(FonctionActiviteForm::class);
        $fonctionDestinationForm = $container->get('FormElementManager')->get(FonctionDestinationForm::class);

        /** @var FonctionController $controller */
        $controller = new FonctionController();
        $controller->setFonctionService($fonctionService);
        $controller->setFonctionActiviteForm($fonctionActiviteForm);
        $controller->setFonctionDestinationForm($fonctionDestinationForm);
        return $controller;
    }
}
 No newline at end of file
+83 −0
Original line number Diff line number Diff line
<?php

namespace Application\Entity\Db;

use UnicaenUtilisateur\Entity\HistoriqueAwareInterface;
use UnicaenUtilisateur\Entity\HistoriqueAwareTrait;

class FonctionActivite implements HistoriqueAwareInterface {
    use HistoriqueAwareTrait;

    /** @var integer */
    private $id;
    /** @var string */
    private $code;
    /** @var string */
    private $libelle;
    /** @var FonctionDestination */
    private $destination;

    /**
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * @return string
     */
    public function getCode()
    {
        return $this->code;
    }

    /**
     * @param string $code
     * @return FonctionActivite
     */
    public function setCode($code)
    {
        $this->code = $code;
        return $this;
    }

    /**
     * @return string
     */
    public function getLibelle()
    {
        return $this->libelle;
    }

    /**
     * @param string $libelle
     * @return FonctionActivite
     */
    public function setLibelle($libelle)
    {
        $this->libelle = $libelle;
        return $this;
    }

    /**
     * @return FonctionDestination
     */
    public function getDestination()
    {
        return $this->destination;
    }

    /**
     * @param FonctionDestination $destination
     * @return FonctionActivite
     */
    public function setDestination($destination)
    {
        $this->destination = $destination;
        return $this;
    }


}
 No newline at end of file
+74 −0
Original line number Diff line number Diff line
<?php

namespace Application\Entity\Db;

use Doctrine\Common\Collections\ArrayCollection;
use UnicaenUtilisateur\Entity\HistoriqueAwareInterface;
use UnicaenUtilisateur\Entity\HistoriqueAwareTrait;

class FonctionDestination implements HistoriqueAwareInterface {
    use HistoriqueAwareTrait;

    /** @var integer */
    private $id;
    /** @var string */
    private $code;
    /** @var string */
    private $libelle;
    /** @var ArrayCollection (FonctionActivite) */
    private $activites;

    /**
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }


    /**
     * @return string
     */
    public function getCode()
    {
        return $this->code;
    }

    /**
     * @param string $code
     * @return FonctionDestination
     */
    public function setCode($code)
    {
        $this->code = $code;
        return $this;
    }

    /**
     * @return string
     */
    public function getLibelle()
    {
        return $this->libelle;
    }

    /**
     * @param string $libelle
     * @return FonctionDestination
     */
    public function setLibelle($libelle)
    {
        $this->libelle = $libelle;
        return $this;
    }

    /**
     * @return FonctionActivite[]
     */
    public function getActivites()
    {
        return $this->activites->toArray();
    }

}
 No newline at end of file
Loading