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

Ajout de la notification vers les étudiants

parent 6a036b23
Loading
Loading
Loading
Loading
+11 −8
Original line number Diff line number Diff line
@@ -2,23 +2,26 @@

/**
 * @var string $reponse
 * @var string $succes
 * @var string $echec
 * @var string $success
 * @var string $probleme
 */

?>

<?php if (isset($reponse)) : ?>
    <?php echo $reponse; ?>
<?php endif; ?>

<?php if(isset($succes)) : ?>
    <div class="alert alert-success">
        <?php echo $succes; ?>
<?php if (isset($success)) : ?>
    <div class="alert alert-success text-success">
        <span class="icon icon-checked"></span>
        <?php echo $success; ?>
    </div>
<?php endif; ?>

<?php if(isset($echec)) : ?>
    <div class="alert alert-danger">
        <?php echo $echec; ?>
<?php if (isset($error)) : ?>
    <div class="alert alert-danger text-danger">
        <span class="icon icon-unchecked"></span>
        <?php echo $error; ?>
    </div>
<?php endif; ?>
+11 −0
Original line number Diff line number Diff line
@@ -129,6 +129,7 @@ return [
                        'cloturer',
                        'reouvrir',
                        'changer-etat',
                        'notifier-inscrit',
                    ],
                    'privileges' => [
                        SessionPrivileges::SESSION_GERER_ETAT,
@@ -402,6 +403,16 @@ return [
                                    ],
                                ],
                            ],
                            'notifier-inscrit' => [
                                'type' => Segment::class,
                                'options' => [
                                    'route' => '/notifier-inscrit/:session',
                                    'defaults' => [
                                        /** @see SessionController::notifierInscritAction() */
                                        'action' => 'notifier-inscrit',
                                    ],
                                ],
                            ],
                        ],
                    ],
                ],
+6 −0
Original line number Diff line number Diff line
<?php

use Atelier\Form\Notification\NotificationForm;
use Atelier\Form\Notification\NotificationFormFactory;
use Atelier\Form\Notification\NotificationHydrator;
use Atelier\Form\Notification\NotificationHydratorFactory;
use Doctrine\ORM\Mapping\Driver\XmlDriver;
use Doctrine\Persistence\Mapping\Driver\MappingDriverChain;
use Atelier\Form\Justification\JustificationForm;
@@ -55,11 +59,13 @@ return array(
    'form_elements'   => [
        'factories' => [
            JustificationForm::class => JustificationFormFactory::class,
            NotificationForm::class => NotificationFormFactory::class,
        ],
    ],
    'hydrators'       => [
        'factories' => [
            JustificationHydrator::class => JustificationHydratorFactory::class,
            NotificationHydrator::class => NotificationHydratorFactory::class,
        ],
    ],
    'controllers'     => [
+68 −0
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@

namespace Atelier\Controller;

use Atelier\Form\Notification\NotificationFormAwareTrait;
use Atelier\Service\Groupe\GroupeServiceAwareTrait;
use Etudiant\Service\Etudiant\EtudiantServiceAwareTrait;
use Atelier\Entity\Db\Inscription;
@@ -68,6 +69,7 @@ class SessionController extends AbstractActionController
    use UserServiceAwareTrait;
    use InscriptionFormAwareTrait;
    use JustificationFormAwareTrait;
    use NotificationFormAwareTrait;
    use SelectionnerIntervenantFormAwareTrait;
    use SessionFormAwareTrait;
    use VilleServiceAwareTrait;
@@ -491,6 +493,72 @@ class SessionController extends AbstractActionController
        return $vm;
    }

    public function notifierInscritAction(): ViewModel
    {
        $session = $this->getSessionService()->getRequestedSession($this);

        $form = $this->getNotificationForm();
        $form->setAttribute('action', $this->url()->fromRoute('atelier/session/notifier-inscrit', ['session' => $session->getId()], [], true));
        $form->bind($session);

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $form->setData($data);
            if ($form->isValid()) {
                $inscriptions = match ($data['liste']) {
                    Inscription::PRINCIPALE => $session->getListePrincipale(),
                    Inscription::COMPLEMENTAIRE => $session->getListeComplementaire(),
                    'tous' => $session->getListeValide(),
                    default => [],
                };
                $sujet = trim($data['sujet']);
                $corps = trim($data['corps']);

                foreach ($inscriptions as $inscription) {
                    $adresse = $inscription->getEtudiant()->getEmail();
                    $mails[$inscription->getEtudiant()->getDenomination()] = ($adresse)?$this->getMailService()->sendMail($adresse, $sujet, $corps):null;
                    if ($mails[$inscription->getEtudiant()->getDenomination()])
                    {
                        $mails[$inscription->getEtudiant()->getDenomination()]->setMotsClefs([$session->generateTag(), $inscription->generateTag(), 'Notification interne']);
                        $this->getMailService()->update($mails[$inscription->getEtudiant()->getDenomination()]);
                        //$session->addMail($mails[$inscription->getEtudiant()->getDenomination()]);
                    }
                }
                $this->getSessionService()->update($session);

                $success = []; $probleme = [];
                foreach ($mails as $individu => $mail) {
                    if ($mail === null) $probleme[] = $individu; else $success[] = $individu;
                }
                if (!empty($success)) {
                    $successTexte = " Les stagiaires ont été notifié·es (".count($success)." courrier·s envoyé·s).";
                }
                if (!empty($probleme)) {
                    $problemeTexte = "L'opération n'a pas pu être faite pour les inscriptions de  : <ul>";
                    foreach ($probleme as $individu) $problemeTexte .= "<li>" . $individu . "</li>";
                    $problemeTexte .= "</ul>";
                }

                $vm = new ViewModel([
                    'title' => "Notification des inscrits",
                    'reponse' => "Opération effectuée",
                    'success' => $successTexte??null,
                    'error' => $problemeTexte??null,
                ]);
                $vm->setTemplate('default/reponse');
                return $vm;
            }
        }

        $vm = new ViewModel([
            'title' => "Notification des inscrits",
            'form' => $form,
        ]);
        $vm->setTemplate('default/default-form');
        return $vm;
    }

    /** Enquete *******************************************************************************************************/

    public function enqueteAction() : ViewModel
+4 −0
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@
namespace Atelier\Controller;


use Atelier\Form\Notification\NotificationForm;
use Atelier\Service\Groupe\GroupeService;
use Etudiant\Service\Etudiant\EtudiantService;
use Atelier\Form\Inscription\InscriptionForm;
@@ -70,6 +71,7 @@ class SessionControllerFactory
         *
         * @var InscriptionForm $inscriptionForm
         * @var JustificationFormAwareTrait $justificationForm
         * @var NotificationForm $notificationForm
         * @var SelectionnerIntervenantForm $selectionnerIntervenantForm
         * @var SessionForm $sessionForm
         */
@@ -97,6 +99,7 @@ class SessionControllerFactory

        $inscriptionForm = $container->get('FormElementManager')->get(InscriptionForm::class);
        $justificationForm = $container->get('FormElementManager')->get(JustificationForm::class);
        $notificationForm = $container->get('FormElementManager')->get(NotificationForm::class);
        $selectionnerIntervenantForm = $container->get('FormElementManager')->get(SelectionnerIntervenantForm::class);
        $sessionForm = $container->get('FormElementManager')->get(SessionForm::class);

@@ -124,6 +127,7 @@ class SessionControllerFactory

        $controller->setInscriptionForm($inscriptionForm);
        $controller->setJustificationForm($justificationForm);
        $controller->setNotificationForm($notificationForm);
        $controller->setSelectionnerIntervenantForm($selectionnerIntervenantForm);
        $controller->setSessionForm($sessionForm);

Loading