Loading CHANGELOG.md +1 −0 Changes for CHANGELOG.md: 1 added line, 0 removed lines. Original line number Diff line number Diff line Loading @@ -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 ----- Loading doc/release-notes/v4.0.4.md 0 → 100644 +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 module/Application/config/others/individu-compl.config.php 0 → 100644 +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 module/Application/src/Application/Controller/Factory/IndividuComplControllerFactory.php 0 → 100644 +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 module/Application/src/Application/Controller/IndividuComplController.php 0 → 100644 +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·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
CHANGELOG.md +1 −0 Changes for CHANGELOG.md: 1 added line, 0 removed lines. Original line number Diff line number Diff line Loading @@ -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 ----- Loading
doc/release-notes/v4.0.4.md 0 → 100644 +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
module/Application/config/others/individu-compl.config.php 0 → 100644 +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
module/Application/src/Application/Controller/Factory/IndividuComplControllerFactory.php 0 → 100644 +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
module/Application/src/Application/Controller/IndividuComplController.php 0 → 100644 +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·e de vouloir continuer ?", 'action' => $this->url()->fromRoute('individu-compl/detruire', ["individu-compl" => $individuCompl->getId()], [], true), ]); } return $vm; } } No newline at end of file