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

Formulaire de configuration des sessions

parent 2947c76d
Loading
Loading
Loading
Loading
+35 −0
Original line number Diff line number Diff line
@@ -19,4 +19,39 @@ alter table formation_seance add volume_fin timestamp;
-- partie EVENEMENT 
INSERT INTO unicaen_evenement_etat (CODE, LIBELLE, DESCRIPTION) VALUES ('annule', 'Événement dont le traitement a été annulé', null);
alter table unicaen_evenement_instance add mots_clefs text;

-- table de parametre des sessions de formation
create table formation_session_parametre
(
    id                    serial
        constraint formation_session_parametre_pk
        primary key,
    mail                  bool default true not null,
    evenement             bool default true not null,
    enquete               bool default true not null,
    histo_creation        timestamp         not null,
    histo_createur_id     integer           not null
        constraint formation_session_parametre_unicaen_utilisateur_user_null_fk_1
        references unicaen_utilisateur_user (id),
    histo_modification    timestamp,
    histo_modificateur_id integer
        constraint formation_session_parametre_unicaen_utilisateur_user_null_fk_2
        references unicaen_utilisateur_user (id),
    histo_destruction     timestamp,
    histo_destructeur_id  integer
        constraint formation_session_parametre_unicaen_utilisateur_user_null_fk_3
        references unicaen_utilisateur_user (id)
);

comment on table formation_session_parametre is 'Table permettant de parametre le comportement d''une session';

alter table formation_instance
    add parametre_id integer;

-- column reordering is not supported formation_instance.parametre_id

alter table formation_instance
    add constraint formation_instance_formation_session_parametre_null_fk
        foreign key (parametre_id) references formation_session_parametre (id)
            on delete set null;
```
 No newline at end of file
+80 −0
Original line number Diff line number Diff line
<?php

namespace Formation;

use Formation\Controller\SessionParametreController;
use Formation\Controller\SessionParametreControllerFactory;
use Formation\Form\SessionParametre\SessionParametreForm;
use Formation\Form\SessionParametre\SessionParametreFormFactory;
use Formation\Form\SessionParametre\SessionParametreHydrator;
use Formation\Form\SessionParametre\SessionParametreHydratorFactory;
use Formation\Provider\Privilege\FormationinstancePrivileges;
use Formation\Service\SessionParametre\SessionParametreService;
use Formation\Service\SessionParametre\SessionParametreServiceFactory;
use UnicaenPrivilege\Guard\PrivilegeController;
use Laminas\Router\Http\Literal;
use Laminas\Router\Http\Segment;

return [
    'bjyauthorize' => [
        'guards' => [
            PrivilegeController::class => [
                [
                    'controller' => SessionParametreController::class,
                    'action' => [
                        'modifier',
                    ],
                    'privileges' => [
                        FormationinstancePrivileges::FORMATIONINSTANCE_MODIFIER,
                    ],
                ],
            ],
        ],
    ],

    'router'          => [
        'routes' => [
            'formation' => [
                'type'  => Literal::class,
                'options' => [
                    'route'    => '/formation',
                ],
                'may_terminate' => true,
                'child_routes' => [
                    'session-parametre' => [
                        'type'  => Segment::class,
                        'options' => [
                            'route'    => '/session-parametre/:session',
                            'defaults' => [
                                'controller' => SessionParametreController::class,
                                'action'     => 'modifier',
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ],

    'service_manager' => [
        'factories' => [
            SessionParametreService::class => SessionParametreServiceFactory::class,
        ],
    ],
    'controllers'     => [
        'factories' => [
            SessionParametreController::class => SessionParametreControllerFactory::class,
        ],
    ],
    'form_elements' => [
        'factories' => [
            SessionParametreForm::class => SessionParametreFormFactory::class,
        ],
    ],
    'hydrators' => [
        'factories' => [
            SessionParametreHydrator::class => SessionParametreHydratorFactory::class,
        ],
    ]

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

namespace Formation\Controller;

use Formation\Entity\Db\SessionParametre;
use Formation\Form\SessionParametre\SessionParametreFormAwareTrait;
use Formation\Service\FormationInstance\FormationInstanceServiceAwareTrait;
use Formation\Service\SessionParametre\SessionParametreServiceAwareTrait;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\ViewModel;

class SessionParametreController extends AbstractActionController {
    use FormationInstanceServiceAwareTrait;
    use SessionParametreServiceAwareTrait;
    use SessionParametreFormAwareTrait;

    public function modifierAction() : ViewModel
    {
        $session = $this->getFormationInstanceService()->getRequestedFormationInstance($this, 'session');

        $parametre = $session->getParametre();
        if ($parametre === null) {
            $parametre = new SessionParametre();
            $parametre = $this->getSessionParametreService()->create($parametre);
            $session->setParametre($parametre);
            $this->getFormationInstanceService()->update($session);
        }

        $form = $this->getSessionParametreForm();
        $form->setAttribute('action', $this->url()->fromRoute('formation/session-parametre', ['session'=>$session->getId()], [], true));
        $form->bind($parametre);

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $form->setData($data);
            if ($form->isValid()) {
                $this->getSessionParametreService()->update($parametre);
            }
        }

        $vm =  new ViewModel([
            'title' => "Paramètre de la session de formation",
            'form' => $form,
        ]);
        $vm->setTemplate('formation/default/default-form');
        return $vm;
    }
}
 No newline at end of file
+37 −0
Original line number Diff line number Diff line
<?php

namespace Formation\Controller;

use Formation\Form\SessionParametre\SessionParametreForm;
use Formation\Service\FormationInstance\FormationInstanceService;
use Formation\Service\SessionParametre\SessionParametreService;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\ContainerInterface;
use Psr\Container\NotFoundExceptionInterface;

class SessionParametreControllerFactory {

    /**
     * @param ContainerInterface $container
     * @return SessionParametreController
     * @throws ContainerExceptionInterface
     * @throws NotFoundExceptionInterface
     */
    public function __invoke(ContainerInterface $container) : SessionParametreController
    {
        /**
         * @var FormationInstanceService $sessionService
         * @var SessionParametreService $sessionParametreService
         * @var SessionParametreForm $sessionParametreForm
         */
        $sessionService = $container->get(FormationInstanceService::class);
        $sessionParametreService = $container->get(SessionParametreService::class);
        $sessionParametreForm = $container->get('FormElementManager')->get(SessionParametreForm::class);

        $controller = new SessionParametreController();
        $controller->setFormationInstanceService($sessionService);
        $controller->setSessionParametreService($sessionParametreService);
        $controller->setSessionParametreForm($sessionParametreForm);
        return $controller;
    }
}
 No newline at end of file
+18 −0
Original line number Diff line number Diff line
@@ -52,6 +52,8 @@ class FormationInstance implements HistoriqueAwareInterface, HasSourceInterface,
    /** @var ArrayCollection (Formateur) */
    private $formateurs;

    private ?SessionParametre $parametre = null;

    /**
     * @return string
     */
@@ -446,6 +448,16 @@ class FormationInstance implements HistoriqueAwareInterface, HasSourceInterface,
        $this->coutTtc = $coutTtc;
    }

    public function getParametre(): ?SessionParametre
    {
        return $this->parametre;
    }

    public function setParametre(?SessionParametre $parametre): void
    {
        $this->parametre = $parametre;
    }

    /** PREDICAT D'ETAT *********************************************************************************************/

    public function estPreparation() : bool
@@ -480,6 +492,12 @@ class FormationInstance implements HistoriqueAwareInterface, HasSourceInterface,
        return $this->getFormation()->getLibelle();
    }


    public function getLieuString() : string
    {
        return ($this->getLieu())?" à ".$this->getLieu():"";
    }

    public function getInstanceCode() : string
    {
        return $this->getFormation()->getId() . "/" . $this->getId();
Loading