Commit 1a1c0144 authored by Johnny Leveneur's avatar Johnny Leveneur
Browse files

gestion des établissements

parent 670b2395
Loading
Loading
Loading
Loading
+33 −1
Original line number Diff line number Diff line
@@ -325,3 +325,35 @@ from atelier_programme prg
         left join site_ville sv on ss.ville_id = sv.id
order by prg.id;
;

/* etudiant import etablissement */
/*
 "école supérieure d'arts & médias ",ESAM
 */
drop table public.etudiant_etablissement;
create table public.etudiant_etablissement
(
    id      integer default nextval('etudiant_etablissement_id_seq'::regclass) not null
        constraint etudiant_etablissement_pk
            primary key,
    libelle varchar(256)                                                       not null,
    sigle   varchar(20)                                                        not null,

    histo_createur_id     integer   not null
        constraint formation_groupe_createur_fk
            references public.unicaen_utilisateur_user,
    histo_creation        timestamp not null,
    histo_modificateur_id integer
        constraint formation_groupe_modificateur_fk
            references public.unicaen_utilisateur_user,
    histo_modification    timestamp,
    histo_destructeur_id  integer
        constraint formation_groupe_destructeur_fk
            references public.unicaen_utilisateur_user,
    histo_destruction     timestamp
);

alter table public.etudiant_etablissement
    owner to ad_suac_pp;

+180 −0
Original line number Diff line number Diff line
<?php

use Etudiant\Controller\EtablissementController;
use Etudiant\Controller\EtablissementControllerFactory;
use Etudiant\Form\Etablissement\EtablissementForm;
use Etudiant\Form\Etablissement\EtablissementFormFactory;
use Etudiant\Form\Etablissement\EtablissementHydrator;
use Etudiant\Form\Etablissement\EtablissementHydratorFactory;
use Etudiant\Provider\Privilege\EtablissementPrivileges;
use Etudiant\Service\Etablissement\EtablissementService;
use Etudiant\Service\Etablissement\EtablissementServiceFactory;
use Laminas\Router\Http\Literal;
use Laminas\Router\Http\Segment;
use UnicaenPrivilege\Guard\PrivilegeController;

return [
    'bjyauthorize' => [
        'guards' => [
            PrivilegeController::class => [
                [
                    'controller' => EtablissementController::class,
                    'action' => [
                        'index',
                    ],
                    'privileges' => [
                        EtablissementPrivileges::ETABLISSEMENT_INDEX,
                    ],
                ],
                [
                    'controller' => EtablissementController::class,
                    'action' => [
                        'afficher',
                    ],
                    'privileges' => [
                        EtablissementPrivileges::ETABLISSEMENT_AFFICHER,
                    ],
                ],
                [
                    'controller' => EtablissementController::class,
                    'action' => [
                        'ajouter',
                    ],
                    'privileges' => [
                        EtablissementPrivileges::ETABLISSEMENT_AJOUTER,
                    ],
                ],
                [
                    'controller' => EtablissementController::class,
                    'action' => [
                        'modifier',
                    ],
                    'privileges' => [
                        EtablissementPrivileges::ETABLISSEMENT_MODIFIER,
                    ],
                ],
                [
                    'controller' => EtablissementController::class,
                    'action' => [
                        'supprimer',
                    ],
                    'privileges' => [
                        EtablissementPrivileges::ETABLISSEMENT_SUPPRIMER,
                    ],
                ],
            ],
        ],
    ],

    'router' => [
        'routes' => [
            'etudiant' => [
                'child_routes' => [
                    'etablissement' => [
                        'type' => Literal::class,
                        'options' => [
                            'route' => '/etablissement',
                            'defaults' => [
                                /** @see EtablissementController::indexAction() */
                                'controller' => EtablissementController::class,
                                'action' => 'index',
                            ],
                        ],
                        'may_terminate' => true,
                        'child_routes' => [
                            'afficher' => [
                                'type' => Segment::class,
                                'options' => [
                                    'route' => '/afficher/:etablissement',
                                    'defaults' => [
                                        /** @see EtablissementController::afficherAction() */
                                        'action' => 'afficher',
                                    ],
                                ],
                            ],
                            'ajouter' => [
                                'type' => Literal::class,
                                'options' => [
                                    'route' => '/ajouter',
                                    'defaults' => [
                                        /** @see EtablissementController::ajouterAction() */
                                        'action' => 'ajouter',
                                    ],
                                ],
                            ],
                            'modifier' => [
                                'type' => Segment::class,
                                'options' => [
                                    'route' => '/modifier/:etablissement',
                                    'defaults' => [
                                        /** @see EtablissementController::modifierAction() */
                                        'action' => 'modifier',
                                    ],
                                ],
                            ],
                            'supprimer' => [
                                'type' => Segment::class,
                                'options' => [
                                    'route' => '/supprimer/:etablissement',
                                    'defaults' => [
                                        /** @see EtablissementController::supprimerAction() */
                                        'action' => 'supprimer',
                                    ],
                                ],
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ],

    'navigation' => [
        'default' => [
            'home' => [
                'pages' => [
                    'gestion' => [
                        'pages' => [
                            'etablissement' => [
                                'label' => "Gestion des établissements",
                                'route' => 'etudiant/etablissement',
                                'resource' => PrivilegeController::getResourceId(EtablissementController::class, 'index'),
                                'order' => 1000 + 400,
                                'icon' => 'fas fa-angle-right',
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ],

    'controllers' => [
        'factories' => [
            EtablissementController::class => EtablissementControllerFactory::class,
        ],
    ],
    'service_manager' => [
        'factories' => [
            EtablissementService::class => EtablissementServiceFactory::class,
        ],
    ],
    'form_elements' => [
        'factories' => [
            EtablissementForm::class => EtablissementFormFactory::class,
        ],
    ],
    'hydrators' => [
        'factories' => [
            EtablissementHydrator::class => EtablissementHydratorFactory::class,
        ],
    ],
    'view_helpers' => [
        'invokables' => [
        ],
        'factories' => [
        ],
        'aliases' => [
        ],
    ],
];
+101 −0
Original line number Diff line number Diff line
<?php

namespace Etudiant\Controller;

use Etudiant\Entity\Db\Etablissement;
use Etudiant\Form\Etablissement\EtablissementFormAwareTrait;
use Etudiant\Service\Etablissement\EtablissementServiceAwareTrait;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\ViewModel;

class EtablissementController extends AbstractActionController
{
    use EtablissementServiceAwareTrait;
    use EtablissementFormAwareTrait;

    public function indexAction(): ViewModel
    {
        $etablissements = $this->getEtablissementService()->getEtablissements();
        return new ViewModel([
            'etablissements' => $etablissements,
        ]);
    }

    public function afficherAction(): ViewModel
    {
        $etablissement = $this->getEtablissementService()->getRequestedEtablissement($this);
        return new ViewModel([
            'etablissement' => $etablissement,
        ]);
    }

    public function ajouterAction(): ViewModel
    {
        $etablissement = new Etablissement();
        $form = $this->getEtablissementForm();
        $form->setAttribute('action', $this->url()->fromRoute('etudiant/etablissement/ajouter'));
        $form->setAttribute('method', 'post');
        $form->bind($etablissement);

        if ($this->getRequest()->isPost()) {
            $form->setData($this->getRequest()->getPost());
            if ($form->isValid()) {
                $this->getEtablissementService()->create($etablissement);
                exit();
            }
        }

        $vm = new ViewModel();
        $vm->setTemplate('default/default-form');
        $vm->setVariables([
            'title' => 'Ajouter un établissement',
            'form' => $form,
        ]);
        return $vm;
    }

    public function modifierAction(): ViewModel
    {
        $etablissement = $this->getEtablissementService()->getRequestedEtablissement($this);
        $form = $this->getEtablissementForm();
        $form->setAttribute('action', $this->url()->fromRoute('etudiant/etablissement/modifier', ['etablissement' => $etablissement->getId()]));
        $form->setAttribute('method', 'post');
        $form->bind($etablissement);

        if ($this->getRequest()->isPost()) {
            $form->setData($this->getRequest()->getPost());
            if ($form->isValid()) {
                $this->getEtablissementService()->update($etablissement);
                exit();
            }
        }

        $vm = new ViewModel();
        $vm->setTemplate('default/default-form');
        $vm->setVariables([
            'title' => 'Modifier un établissement',
            'form' => $form,
        ]);
        return $vm;
    }

    public function supprimerAction(): ViewModel
    {
        $etablissement = $this->getEtablissementService()->getRequestedEtablissement($this);

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

        $vm = new ViewModel();
        $vm->setTemplate('default/confirmation');
        $vm->setVariables([
            'title' => "Suppression de l'établissement [" . $etablissement->getLibelle() . "]",
            'text' => "La suppression est définitive êtes-vous sûr&middot;e de vouloir continuer ?",
            'action' => $this->url()->fromRoute('etudiant/etablissement/supprimer', ["etablissement" => $etablissement->getId()], [], true),
        ]);
        return $vm;
    }
}
 No newline at end of file
+28 −0
Original line number Diff line number Diff line
<?php

namespace Etudiant\Controller;

use Etudiant\Form\Etablissement\EtablissementForm;
use Etudiant\Service\Etablissement\EtablissementService;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\ContainerInterface;
use Psr\Container\NotFoundExceptionInterface;

class EtablissementControllerFactory
{
    /**
     * @throws ContainerExceptionInterface
     * @throws NotFoundExceptionInterface
     */
    public function __invoke(ContainerInterface $container): EtablissementController
    {
        $etablissementService = $container->get(EtablissementService::class);
        $etablissementForm = $container->get('FormElementManager')->get(EtablissementForm::class);

        $controller = new EtablissementController();
        $controller->setEtablissementService($etablissementService);
        $controller->setEtablissementForm($etablissementForm);

        return $controller;
    }
}
 No newline at end of file
+41 −0
Original line number Diff line number Diff line
<?php

namespace Etudiant\Entity\Db;

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

class Etablissement implements HistoriqueAwareInterface
{
    use HistoriqueAwareTrait;

    private ?int $id = null;
    private ?string $libelle = null;
    private ?string $sigle = null;

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getLibelle(): ?string
    {
        return $this->libelle;
    }

    public function setLibelle(?string $libelle): void
    {
        $this->libelle = $libelle;
    }

    public function getSigle(): ?string
    {
        return $this->sigle;
    }

    public function setSigle(?string $sigle): void
    {
        $this->sigle = $sigle;
    }

}
 No newline at end of file
Loading