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

Mail de confirmation fonctionnel

parent e0f53c49
Loading
Loading
Loading
Loading
Loading
+89 −4
Changes for module/Application/config/others/admin.config.php: 89 added lines, 4 removed lines.
Original line number Diff line number Diff line
<?php

use Application\Controller\Factory\RoleControllerFactory;
use Application\Controller\AdminController;
use Application\Controller\Factory\RoleControllerFactory;
use Application\Controller\MailConfirmationController;
use Application\Provider\Privilege\UtilisateurPrivileges;
use UnicaenAuth\Guard\PrivilegeController;
use UnicaenAuth\Provider\Privilege\Privileges;
use Zend\Mvc\Router\Http\Literal;
use Zend\Mvc\Router\Http\Segment;
use UnicaenAuth\Provider\Privilege\Privileges;
use Application\Form\Factory\MailConfirmationFormFactory;
use Application\Form\Factory\MailConfirmationHydratorFactory;
use Application\Service\MailConfirmationServiceFactory;
use Application\Controller\Factory\MailConfirmationControllerFactory;

return [
    'bjyauthorize'    => [
        'guards' => [
@@ -44,6 +50,17 @@ return [
                    ],
                    'privileges' => UtilisateurPrivileges::UTILISATEUR_ATTRIBUTION_ROLE,
                ],
                [
                    'controller' => MailConfirmationController::class,
                    'action'     => [
                        'index',
                        'envoie',
                        'reception',
                        'swap',
                        'remove'
                    ],
                    'privileges' => UtilisateurPrivileges::UTILISATEUR_ATTRIBUTION_ROLE,
                ],
            ],
        ],
    ],
@@ -71,6 +88,57 @@ return [
                    ],
                ],
            ],
            'mail-confirmation-acceuil' => [
                'type' => Segment::class,
                'options' => [
                    'route' => '/mail-confirmation-acceuil[/:id]',
                    'defaults' =>[
                        'controller' => MailConfirmationController::class,
                        'action' => 'index',
                    ],
                ],
            ],
            'mail-confirmation-swap' => [
                'type' => Segment::class,
                'options' => [
                    'route' => '/mail-confirmation-swap/:id',
                    'defaults' =>[
                        'controller' => MailConfirmationController::class,
                        'action' => 'swap',
                    ],
                ],
            ],
            'mail-confirmation-remove' => [
                'type' => Segment::class,
                'options' => [
                    'route' => '/mail-confirmation-remove/:id',
                    'defaults' =>[
                        'controller' => MailConfirmationController::class,
                        'action' => 'remove',
                    ],
                ],
            ],

            'mail-confirmation-envoie' => [
                'type' => Segment::class,
                'options' => [
                    'route' => '/mail-confirmation-envoie/:id',
                    'defaults' =>[
                        'controller' => MailConfirmationController::class,
                        'action' => 'envoie',
                    ],
                ],
            ],
            'mail-confirmation-reception' => [
                'type' => Segment::class,
                'options' => [
                    'route' => '/mail-confirmation-reception/:id/:code',
                    'defaults' =>[
                        'controller' => MailConfirmationController::class,
                        'action' => 'reception',
                    ],
                ],
            ],
            'modifier-privilege' => [
                'type'          => Segment::class,
                'options'       => [
@@ -122,10 +190,11 @@ return [
            ],
        ],
    ],

    'service_manager' => [
        'invokables' => array(
        ),
        'invokables' => [],
        'factories' => [
            'MailConfirmationService' => MailConfirmationServiceFactory::class,
        ],
    ],
    'controllers'     => [
@@ -134,6 +203,22 @@ return [
        ],
        'factories' => [
            'Application\Controller\Role' => RoleControllerFactory::class,
            MailConfirmationController::class => MailConfirmationControllerFactory::class,

        ],
    ],

    'form_elements'   => [
        'invokables' => [
        ],
        'factories' => [
            'MailConfirmationForm' => MailConfirmationFormFactory::class,
        ],
    ],
    'hydrators' => [
        'factories' => [
            'MailConfirmationHydrator' => MailConfirmationHydratorFactory::class,
        ]
    ],

];
+40 −0
Changes for module/Application/src/Application/Controller/Factory/MailConfirmationControllerFactory.php: 40 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Application\Controller\Factory;

use Application\Controller\MailConfirmationController;
use Application\Service\Individu\IndividuService;
use Application\Service\MailConfirmationService;
use Application\Service\Notification\NotificationService;
use Zend\Mvc\Controller\ControllerManager;

class MailConfirmationControllerFactory
{
    /**
     * Create service
     *
     * @param ControllerManager $controllerManager
     * @return MailConfirmationController
     */
    public function __invoke(ControllerManager $controllerManager)
    {
        $sl = $controllerManager->getServiceLocator();

        /**
         * @var MailConfirmationService $mailConfirmationService
         * @var NotificationService $notificationService
         * @var IndividuService $individuService
         */
        $mailConfirmationService = $sl->get('MailConfirmationService');
        $notificationService = $sl->get('NotificationService');
        $individuService = $sl->get('IndividuService');

        $controller = new MailConfirmationController();
        $controller->setMailConfirmationService($mailConfirmationService);
        $controller->setIndividuService($individuService);
        $controller->setNotificationService($notificationService);


        return $controller;
    }
}
 No newline at end of file
+137 −0
Changes for module/Application/src/Application/Controller/MailConfirmationController.php: 137 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Application\Controller;

use Application\Entity\Db\MailConfirmation;
use Application\Form\MailConfirmationForm;
use Application\Service\Individu\IndividuService;
use Application\Service\Individu\IndividuServiceAwareTrait;
use Application\Service\MailConfirmationService;
use Application\Service\Notification\NotificationServiceAwareTrait;
use Zend\View\Model\ViewModel;

class MailConfirmationController extends AbstractController {
    use NotificationServiceAwareTrait;
    use IndividuServiceAwareTrait;

    /** @var MailConfirmationService $mailConfirmationService */
    public $mailConfirmationService;

    public function setMailConfirmationService(MailConfirmationService $service)
    {
        $this->mailConfirmationService = $service;
    }


    public function indexAction()
    {

        $request = $this->getRequest();
        $id = $this->params()->fromRoute('id');

        $form = null;
        $individu = null;
        $mailConfirmation = null;

        if ($request->isPost()) {
            //dès lors que l'on revient d'un post on affiche le formalaire de demande
            /** @var MailConfirmationForm $form */
            $form = $this->getServiceLocator()->get('formElementManager')->get('MailConfirmationForm');

            if ($id !== null) {
                //edition d'une demande existante
                $mailConfirmation = $this->mailConfirmationService->getDemandeById($id);
            } else {
                //nouvelle demande
                $mailConfirmation = new MailConfirmation();
                $mailConfirmation->setEtat(MailConfirmation::ENVOYER);
                $data = $request->getPost();

                if (isset($data['idIndividu'])) {
                    $individu = $this->individuService->getIndviduById($data['idIndividu']);
                    $mailConfirmation->setIndividu($individu);
                    if (isset($data['email']) && $data['email'] !== "") {
                        $mailConfirmation->setEmail($data['email']);

                        //enresgistrement de la demande
                        $id = $this->mailConfirmationService->save($mailConfirmation);
                        $this->mailConfirmationService->generateCode($id);
                        $this->redirect()->toRoute('mail-confirmation-envoie', ['id' => $id], [] , true);
                        $form = null;
                    } else {
                        //pas de mail on reste sur le formulaire
                    }
                } else {
                    $individu = $this->individuService->getIndviduById($data['individu']['id']);
                    $mailConfirmation->setIndividu($individu);
                }


            }
            if ($form !== null) $form->bind($mailConfirmation);
        }

        return new ViewModel([
              'form' => $form,
              'encours' => $this->mailConfirmationService->getDemandeEnCours(),
              'confirmees' => $this->mailConfirmationService->getDemandeConfirmees(),
        ]);
    }

    public function envoieAction()
    {

        $id = $this->params()->fromRoute('id');
        $mailConfirmation = $this->mailConfirmationService->getDemandeById($id);
        //if ($mailConfirmation->getCode() === null) {
            $this->mailConfirmationService->generateCode($id);
            $mailConfirmation = $this->mailConfirmationService->getDemandeById($id);
       // }

        return new ViewModel([
            'mailConfirmation' => $mailConfirmation,
            'notifier' => $this->notificationService,
        ]);
    }

    /**
     * @return ViewModel
     * @throws \Doctrine\ORM\OptimisticLockException
     */
    public function receptionAction()
    {
        /**
         * @var int $id
         * @var MailConfirmation $mailConfirmation
         */
        $id   = $this->params()->fromRoute('id');
        $code = $this->params()->fromRoute('code');
        $mailConfirmation = $this->mailConfirmationService->getDemandeById($id);

        if (! $mailConfirmation->isConfirmer() && $mailConfirmation->getCode() === $code) {
            $this->mailConfirmationService->confirmEmail($id);
        }

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

    /**
     * @throws \Doctrine\ORM\OptimisticLockException
     */
    public function swapAction()
    {
        $id = $this->params()->fromRoute('id');
        $this->mailConfirmationService->swapEtat($id);

        $this->redirect()->toRoute('mail-confirmation-acceuil');
    }

    public function removeAction() {
        $id = $this->params()->fromRoute('id');
        $this->mailConfirmationService->remove($id);

        $this->redirect()->toRoute('mail-confirmation-acceuil');
    }
}
+116 −0
Changes for module/Application/src/Application/Entity/Db/MailConfirmation.php: 116 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Application\Entity\Db;

class MailConfirmation {

    const ENVOYER = 'E';
    const CONFIRMER = 'C';

    /** @var int $id */
    private $id;
    /** @var Individu $individu */
    protected $individu;
    /** @var string $email */
    protected $email;
    /** @var string $etat */
    protected $etat;
    /** @var string code */
    protected $code;

    /**
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * @return Individu
     */
    public function getIndividu()
    {
        return $this->individu;
    }

    /**
     * @param Individu $individu
     * @return MailConfirmation
     */
    public function setIndividu($individu)
    {
        $this->individu = $individu;
        return $this;
    }

    /**
     * @return string
     */
    public function getEmail()
    {
        return $this->email;
    }

    /**
     * @param string $email
     * @return MailConfirmation
     */
    public function setEmail($email)
    {
        $this->email = $email;
        return $this;
    }

    /**
     * @return string
     */
    public function getEtat()
    {
        return $this->etat;
    }

    /**
     * @param string $etat
     * @return MailConfirmation
     */
    public function setEtat($etat)
    {
        $this->etat = $etat;
        return $this;
    }

    /**
     * @return string
     */
    public function getCode()
    {
        return $this->code;
    }

    /**
     * @param string $code
     */
    public function setCode($code)
    {
        $this->code = $code;
    }

    /**
     * @return boolean
     */
    public function isEnvoyer()
    {
        return $this->etat === MailConfirmation::ENVOYER;
    }

    /**
     * @return boolean
     */
    public function isConfirmer()
    {
        return $this->etat === MailConfirmation::CONFIRMER;
    }


}
 No newline at end of file
+21 −0
Changes for module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.MailConfirmation.dcm.xml: 21 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
    <entity name="Application\Entity\Db\MailConfirmation" table="MAIL_CONFIRMATION">
        <id name="id" type="integer" column="ID">
            <generator strategy="SEQUENCE"/>
        </id>

        <field name="email"     column="EMAIL"      nullable="false"    type="string"   length="256"/>
        <field name="etat"      column="ETAT"       nullable="false"    type="string"   length="1"/>
        <field name="code"      column="CODE"       nullable="true"     type="string"   length="19"/>

        <many-to-one field="individu" target-entity="Application\Entity\Db\Individu">
            <join-columns>
                <join-column name="INDIVIDU_ID" referenced-column-name="ID"/>
            </join-columns>
        </many-to-one>

    </entity>
</doctrine-mapping>
Loading