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

Mecanique pour l'appariemment President + Utilisateur et fonction à ajouter pour notifier

parent f9f40a26
Loading
Loading
Loading
Loading
+138 −0
Original line number Diff line number Diff line
<?php

namespace Application;

use Application\Controller\CoEncadrantController;
use Application\Controller\Factory\PresidentJuryControllerFactory;
use Application\Controller\PresidentJuryController;
use Application\Form\AdresseMail\AdresseMailForm;
use Application\Form\AdresseMail\AdresseMailFormFactory;
use Application\Form\AdresseMail\AdresseMailHydrator;
use Application\Provider\Privilege\PresidentJuryPrivileges;
use UnicaenAuth\Guard\PrivilegeController;
use Zend\Router\Http\Literal;
use Zend\Router\Http\Segment;

return [
    'bjyauthorize'    => [
        'guards' => [
            PrivilegeController::class => [
                [
                    'controller' => PresidentJuryController::class,
                    'action'     => [
                        'index',
                    ],
                    'privileges' => [
                        PresidentJuryPrivileges::PRESIDENT_GESTION
                    ],
                ],
                [
                    'controller' => PresidentJuryController::class,
                    'action'     => [
                        'ajouter-mail',
                        'supprimer-mail',
                    ],
                    'privileges' => [
                        PresidentJuryPrivileges::PRESIDENT_MODIFIER_MAIL,
                    ],
                ],
                [
                    'controller' => PresidentJuryController::class,
                    'action'     => [
                        'notifier-correction',
                    ],
                    'privileges' => [
                        PresidentJuryPrivileges::PRESIDENT_NOTIFIER,
                    ],
                ],
            ],
        ],
    ],

    'router'          => [
        'routes' => [
            'president-jury' => [
                'type'          => Literal::class,
                'options'       => [
                    'route'    => '/president-jury',
                    'defaults' => [
                        'controller'    => PresidentJuryController::class,
                        'action'        => 'index',
                    ],
                ],
                'may_terminate' => true,
                'child_routes'  => [
                    'notifier-correction' => [
                        'type'          => Segment::class,
                        'options'       => [
                            'route'    => '/notifier-correction/:president',
                            'defaults' => [
                                'controller'    => PresidentJuryController::class,
                                'action'        => 'notifier-correction',
                            ],
                        ],
                    ],
                    'ajouter-mail' => [
                        'type'          => Segment::class,
                        'options'       => [
                            'route'    => '/ajouter-mail/:president',
                            'defaults' => [
                                'controller'    => PresidentJuryController::class,
                                'action'        => 'ajouter-mail',
                            ],
                        ],
                    ],
                    'supprimer-mail' => [
                        'type'          => Segment::class,
                        'options'       => [
                            'route'    => '/supprimer-mail/:president',
                            'defaults' => [
                                'controller'    => PresidentJuryController::class,
                                'action'        => 'supprimer-mail',
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ],

    'navigation'      => [
        'default' => [
            'home' => [
                'pages' => [
                    'admin' => [
                        'pages' => [
                            'president-jury' => [
                                'label'    => 'Présidents du jury',
                                'route'    => 'president-jury',
                                'resource' => PrivilegeController::getResourceId(CoEncadrantController::class, 'index'),
                                'order'    => 1100,
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ],

    'controllers' => [
        'factories' => [
            PresidentJuryController::class => PresidentJuryControllerFactory::class,
        ],
    ],
    'form_elements' => [
        'factories' => [
            AdresseMailForm::class => AdresseMailFormFactory::class,
        ],
    ],
    'hydrators' => [
        'invokables' => [
            AdresseMailHydrator::class => AdresseMailHydrator::class,
        ]
    ],
    'service_manager' => [
        'factories' => [
        ],
    ],
];
+2 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ use Application\Service\These\Factory\TheseObserverServiceFactory;
use Application\Service\These\Factory\TheseRechercheServiceFactory;
use Application\Service\These\Factory\TheseServiceFactory;
use Application\Service\These\TheseRechercheService;
use Application\Service\These\TheseService;
use Application\Service\TheseAnneeUniv\TheseAnneeUnivService;
use Application\Service\TheseAnneeUniv\TheseAnneeUnivServiceFactory;
use Application\View\Helper\Url\UrlTheseHelperFactory;
@@ -1108,6 +1109,7 @@ return [
        ],
        'aliases' => [
            TheseRechercheService::class => 'TheseRechercheService',
            TheseService::class => 'TheseService',
        ]
    ],
    'controllers'     => [
+20 −1
Original line number Diff line number Diff line
<?php

use Application\Controller\Factory\UtilisateurControllerFactory;
use Application\Controller\UtilisateurController;
use Application\Form\CreationUtilisateurForm;
use Application\Form\CreationUtilisateurFromIndividuForm;
use Application\Form\Factory\CreationUtilisateurFormFactory;
@@ -15,6 +14,7 @@ use Application\Form\Validator\NewEmailValidator;
use Application\Form\Validator\PasswordValidator;
use Application\Provider\Privilege\UtilisateurPrivileges;
use Application\Service\Individu\IndividuServiceFactory;
use Application\Service\Utilisateur\UtilisateurService;
use Application\Service\Utilisateur\UtilisateurServiceFactory;
use Application\View\Helper\IndividuUsurpationHelperFactory;
use UnicaenAuth\Guard\PrivilegeController;
@@ -65,6 +65,13 @@ return [
                    ],
                    'roles' => [],
                ],
                [
                    'controller' => 'Application\Controller\Utilisateur',
                    'action'     => [
                        'appariemment',
                    ],
                    'roles' => ['user'],
                ],
            ],
        ],
    ],
@@ -129,6 +136,15 @@ return [
                            ],
                        ],
                    ],
                    'appariemment' => [
                        'type'          => Segment::class,
                        'options'       => [
                            'route'       => '/appariemment/:these/:individu',
                            'defaults'    => [
                                'action' => 'appariemment',
                            ],
                        ],
                    ],
                    'rechercher-people' => [
                        'type'          => Segment::class,
                        'options'       => [
@@ -203,6 +219,9 @@ return [
            'IndividuService' => IndividuServiceFactory::class,
            'UtilisateurService' => UtilisateurServiceFactory::class,
        ],
        'aliases' => [
            UtilisateurService::class => 'UtilisateurService'
        ]
    ],
    'controllers'     => [
        'invokables' => [
+41 −0
Original line number Diff line number Diff line
<?php

namespace Application\Controller\Factory;

use Application\Controller\PresidentJuryController;
use Application\Form\AdresseMail\AdresseMailForm;
use Application\Service\Acteur\ActeurService;
use Application\Service\These\TheseService;
use Interop\Container\ContainerInterface;
use Soutenance\Service\Membre\MembreService;

class PresidentJuryControllerFactory
{
    /**
     * @param ContainerInterface $container
     * @return PresidentJuryController
     */
    public function __invoke(ContainerInterface $container)
    {
        /**
         * @var ActeurService $acteurService
         * @var MembreService $membreService
         * @var TheseService $theseService
         */
        $acteurService = $container->get(ActeurService::class);
        $membreService = $container->get(MembreService::class);
        $theseService = $container->get(TheseService::class);

        /**
         * @var AdresseMailForm $adresseMailForm
         */
        $adresseMailForm = $container->get('FormElementManager')->get(AdresseMailForm::class);

        $controller = new PresidentJuryController();
        $controller->setActeurService($acteurService);
        $controller->setMembreService($membreService);
        $controller->setTheseService($theseService);
        $controller->setAdresseMailForm($adresseMailForm);
        return $controller;
    }
}
 No newline at end of file
+79 −0
Original line number Diff line number Diff line
<?php

namespace Application\Controller;

use Application\Entity\Db\Acteur;
use Application\Form\AdresseMail\AdresseMailFormAwareTrait;
use Application\Service\Acteur\ActeurServiceAwareTrait;
use Application\Service\These\TheseServiceAwareTrait;
use DateInterval;
use DateTime;
use Soutenance\Service\Membre\MembreServiceAwareTrait;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\Mvc\Plugin\FlashMessenger\FlashMessenger;
use Zend\View\Model\ViewModel;

/** @method FlashMessenger flashMessenger() **/

class PresidentJuryController extends AbstractActionController {
    use ActeurServiceAwareTrait;
    use MembreServiceAwareTrait;
    use TheseServiceAwareTrait;
    use AdresseMailFormAwareTrait;

    public function indexAction() {
        $date = (new DateTime())->sub(new DateInterval('P4M'));

        $presidents = $this->getActeurService()->getRepository()->fetchPresidentDuJuryTheseAvecCorrection();
        $presidents = array_filter($presidents, function (Acteur $president) use ($date) { return $president->getThese()->getDateSoutenance() > $date;});

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

    public function notifierCorrectionAction()
    {
        $president = $this->getActeurService()->getRequestedActeur($this, 'president');
        $these = $president->getThese();

        $this->getTheseService()->notifierCorrectionsApportees($these, $this);

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

    public function ajouterMailAction()
    {
        $president = $this->getActeurService()->getRequestedActeur($this, 'president');

        $membre = $this->getMembreService()->createDummyMembre();
        $form = $this->getAdresseMailForm();
        $form->setAttribute('action', $this->url()->fromRoute('president-jury/ajouter-mail', ['president' => $president->getId()], [], true));
        $form->bind($membre);

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $form->setData($data);
            if ($form->isValid()) {
                $membre->setActeur($president);
                $this->getMembreService()->create($membre);
            }
        }

        $vm = new ViewModel([
            'title' => "Ajout d'un mail pour le président du jury",
            'form' => $form,
        ]);
        $vm->setTemplate("soutenance/default/default-form");
        return $vm;
    }

    public function supprimerMailAction()
    {
        $president = $this->getActeurService()->getRequestedActeur($this, 'president');
        $membre = $this->getMembreService()->getMembreByActeur($president);
        $this->getMembreService()->delete($membre);
        return $this->redirect()->toRoute('president-jury', [], [], true);
    }
}
 No newline at end of file
Loading