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

Compléments d'individu : mise en place des éléments de base

parent 9aff52d9
Loading
Loading
Loading
Loading
+1 −0
Changes for CHANGELOG.md: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ Journal des modifications
-----
- Correction de typos dans mail de feu vert de la soutenance
- Ajout de redirection de mail lorsque certains mails n'ont pas de destinataire "ATTENTION MAIL NON DÉLIVRÉ".
- Compléments d'individu : mise en place des éléments de base 

4.0.3
-----
+32 −0
Changes for doc/release-notes/v4.0.4.md: 32 added lines, 0 removed lines.
Original line number Diff line number Diff line
# Version 4.0.4

## 1. Sur le serveur d'application

- Placez-vous dans le répertoire de l'application puis lancez la commande suivante
  pour installer la nouvelle version :

```bash
git fetch --tags && git checkout --force 4.0.4 && bash ./install.sh
```

- Selon le moteur PHP que vous avez installé, rechargez le service, exemple :
    - php7.4-fpm         : `service php7.4-fpm reload`
    - apache2-mod-php7.4 : `service apache2 reload`

## 2. Dans la base de données

```SQL
create table individu_compl
(
  id                    serial                                                  constraint individu_compl_pk primary key,
  individu_id           integer                                 not null        constraint table_name_individu_id_fk references individu on delete cascade,
  email                 varchar(1024)                           not null,
  histo_creation        timestamp       default CURRENT_DATE    not null    ,
  histo_createur_id     integer                                 not null        constraint utilisateur_id_fk_1 references utilisateur,
  histo_modification    timestamp,
  histo_modificateur_id integer                                                 constraint utilisateur_id_fk_2 references utilisateur,
  histo_destruction     timestamp,
  histo_destructeur_id  integer                                                 constraint tilisateur_id_fk_3 references utilisateur
);
create unique index individu_compl_id_uindex on individu_compl (id);
```
 No newline at end of file
+156 −0
Changes for module/Application/config/others/individu-compl.config.php: 156 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Application;


use Application\Controller\Factory\IndividuComplControllerFactory;
use Application\Controller\IndividuComplController;
use Application\Form\IndividuCompl\IndividuComplForm;
use Application\Form\IndividuCompl\IndividuComplFormFactory;
use Application\Form\IndividuCompl\IndividuComplHydrator;
use Application\Form\IndividuCompl\IndividuComplHydratorFactory;
use Application\Service\IndividuCompl\IndividuComplService;
use Application\Service\IndividuCompl\IndividuComplServiceFactory;
use Laminas\Router\Http\Literal;
use Laminas\Router\Http\Segment;
use UnicaenAuth\Guard\PrivilegeController;

return [
    'bjyauthorize'    => [
        'guards' => [
            PrivilegeController::class => [
                [
                    'controller' => IndividuComplController::class,
                    'action'     => [
                        'index',
                        'afficher',
                        'ajouter',
                        'modifier',
                        'historiser',
                        'restaurer',
                        'detruire',
                    ],
                    'role' => [],
                ],
            ],
        ],
    ],

    'navigation'      => [
        'default' => [
            'home' => [
                'pages' => [
                    'admin' => [
                        'pages' => [
                            'individu-compl' => [
                                'label'    => "Compléments d'individu",
                                'route'    => 'individu-compl',
                                'resource' => PrivilegeController::getResourceId(IndividuComplController::class, 'index'),
                                'icon'     => "fas fa-user-edit",
                                'order'    => 65,
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ],

    'router' => [
        'routes' => [
            'individu-compl' => [
                'type'          => Literal::class,
                'options'       => [
                    'route'    => '/individu-compl',
                    'defaults' => [
                        'controller'    => IndividuComplController::class,
                        'action'        => 'index',
                    ],
                ],
                'may_terminate' => true,
                'child_routes'  => [
                    'afficher' => [
                        'type'          => Segment::class,
                        'options'       => [
                            'route'    => '/afficher/:individu-compl',
                            'defaults' => [
                                'controller'    => IndividuComplController::class,
                                'action'        => 'afficher',
                            ],
                        ],
                    ],
                    'ajouter' => [
                        'type'          => Literal::class,
                        'options'       => [
                            'route'    => '/ajouter',
                            'defaults' => [
                                'controller'    => IndividuComplController::class,
                                'action'        => 'ajouter',
                            ],
                        ],
                    ],
                    'modifier' => [
                        'type'          => Segment::class,
                        'options'       => [
                            'route'    => '/modifier/:individu-compl',
                            'defaults' => [
                                'controller'    => IndividuComplController::class,
                                'action'        => 'modifier',
                            ],
                        ],
                    ],
                    'historiser' => [
                        'type'          => Segment::class,
                        'options'       => [
                            'route'    => '/historiser/:individu-compl',
                            'defaults' => [
                                'controller'    => IndividuComplController::class,
                                'action'        => 'historiser',
                            ],
                        ],
                    ],
                    'restaurer' => [
                        'type'          => Segment::class,
                        'options'       => [
                            'route'    => '/restaurer/:individu-compl',
                            'defaults' => [
                                'controller'    => IndividuComplController::class,
                                'action'        => 'restaurer',
                            ],
                        ],
                    ],
                    'detruire' => [
                        'type'          => Segment::class,
                        'options'       => [
                            'route'    => '/detruire/:individu-compl',
                            'defaults' => [
                                'controller'    => IndividuComplController::class,
                                'action'        => 'detruire',
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ],
    'controllers' => [
        'factories' => [
            IndividuComplController::class => IndividuComplControllerFactory::class,
        ]
    ],
    'service_manager' => [
        'factories' => [
            IndividuComplService::class => IndividuComplServiceFactory::class,
        ]
    ],
    'form_elements'   => [
        'factories' => [
            IndividuComplForm::class => IndividuComplFormFactory::class,
        ],
    ],
    'hydrators' => [
        'factories' => [
            IndividuComplHydrator::class => IndividuComplHydratorFactory::class,
        ],
    ],
];
 No newline at end of file
+30 −0
Changes for module/Application/src/Application/Controller/Factory/IndividuComplControllerFactory.php: 30 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Application\Controller\Factory;

use Application\Controller\IndividuComplController;
use Application\Form\IndividuCompl\IndividuComplForm;
use Application\Service\IndividuCompl\IndividuComplService;
use Doctrine\ORM\EntityManager;
use Interop\Container\ContainerInterface;

class IndividuComplControllerFactory {

    public function __invoke(ContainerInterface $container) : IndividuComplController
    {
        /**
         * @var EntityManager $entityManager
         * @var IndividuComplService $individuComplService
         * @var IndividuComplForm $individuComplForm
         */
        $entityManager = $container->get('doctrine.entitymanager.orm_default');
        $individuComplService = $container->get(IndividuComplService::class);
        $individuComplForm = $container->get('FormElementManager')->get(IndividuComplForm::class);

        $controller = new IndividuComplController();
        $controller->setEntityManager($entityManager);
        $controller->setIndividuComplService($individuComplService);
        $controller->setIndividuComplForm($individuComplForm);
        return $controller;
    }
}
 No newline at end of file
+131 −0
Changes for module/Application/src/Application/Controller/IndividuComplController.php: 131 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Application\Controller;

use Application\Entity\Db\IndividuCompl;
use Application\Form\IndividuCompl\IndividuComplFormAwareTrait;
use Application\Service\IndividuCompl\IndividuComplServiceAwareTrait;
use Laminas\Http\Response;
use Laminas\View\Model\ViewModel;
use UnicaenApp\Service\EntityManagerAwareTrait;

class IndividuComplController extends AbstractController
{
    use EntityManagerAwareTrait;
    use IndividuComplServiceAwareTrait;
    use IndividuComplFormAwareTrait;

    public function indexAction() : ViewModel
    {
        $complements = $this->getIndividuComplService()->getComplements();

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

    public function afficherAction() : ViewModel
    {
        $individuCompl = $this->getEntityManager()->getRepository(IndividuCompl::class)->findRequestedIndividuCompl($this);

        return new ViewModel([
            'title' => "Affichage du complément d'individu",
            'complement' => $individuCompl,
        ]);
    }

    public function ajouterAction() : ViewModel
    {
        $individuCompl = new IndividuCompl();

        $form = $this->getIndividuComplForm();
        $form->setAttribute('action', $this->url()->fromRoute('individu-compl/ajouter', [], [], true));
        $form->bind($individuCompl);

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $form->setData($data);
            if ($form->isValid()) {
                $this->getIndividuComplService()->create($individuCompl);
                $this->flashMessenger()->addSuccessMessage("Ajout du complément d'individu effectué.");
            }
        }

        $vm = new ViewModel([
            'title' => "Ajout d'un complément d'individu",
            'form' => $form,
            'withIndividu' => true,
        ]);
        $vm->setTemplate('application/individu-compl/formulaire');
        return $vm;
    }

    public function modifierAction() : ViewModel
    {
        $individuCompl = $this->getEntityManager()->getRepository(IndividuCompl::class)->findRequestedIndividuCompl($this);

        $form = $this->getIndividuComplForm();
        $form->setAttribute('action', $this->url()->fromRoute('individu-compl/modifier', ['individu-compl' => $individuCompl->getId()], [], true));
        $form->bind($individuCompl);

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $form->setData($data);
            if ($form->isValid()) {
                $this->getIndividuComplService()->update($individuCompl);
                $this->flashMessenger()->addSuccessMessage("Modification du complément d'individu effectuée.");
            }
        }

        $vm = new ViewModel([
            'title' => "Modification d'un complément d'individu",
            'form' => $form,
            'withIndividu' => true,
        ]);
        $vm->setTemplate('application/individu-compl/formulaire');
        return $vm;
    }

    public function historiserAction() : Response
    {
        $individuCompl = $this->getEntityManager()->getRepository(IndividuCompl::class)->findRequestedIndividuCompl($this);
        $this->getIndividuComplService()->historise($individuCompl);
        $this->flashMessenger()->addSuccessMessage("Historisation du complément d'individu effectuée.");

        return $this->redirect()->toRoute('individu-compl', [], [], true);
    }

    public function restaurerAction() : Response
    {
        $individuCompl = $this->getEntityManager()->getRepository(IndividuCompl::class)->findRequestedIndividuCompl($this);
        $this->getIndividuComplService()->restore($individuCompl);
        $this->flashMessenger()->addSuccessMessage("Restauration du complément d'individu effectuée.");

        return $this->redirect()->toRoute('individu-compl', [], [], true);
    }

    public function detruireAction() : ViewModel
    {
        $individuCompl = $this->getEntityManager()->getRepository(IndividuCompl::class)->findRequestedIndividuCompl($this);

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            if ($data["reponse"] === "oui") $this->getIndividuComplService()->delete($individuCompl);
            $this->flashMessenger()->addSuccessMessage("Destruction du complément d'individu effectuée.");
            exit();
        }

        $vm = new ViewModel();
        if ($individuCompl !== null) {
            $vm->setVariables([
                'title' => "Suppression du complément",
                'text' => "La suppression est définitive êtes-vous sûr&middot;e de vouloir continuer ?",
                'action' => $this->url()->fromRoute('individu-compl/detruire', ["individu-compl" => $individuCompl->getId()], [], true),
            ]);
        }
        return $vm;
    }
}
 No newline at end of file
Loading