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

Mail de confirmation

parent 34cb578f
Loading
Loading
Loading
Loading
Loading
+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
+157 −0
Changes for module/Application/src/Application/Controller/MailConfirmationController.php: 157 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\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']);

                        if (filter_var($data['email'], FILTER_VALIDATE_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 {
                            $this->flashMessenger()->addErrorMessage("MailConfirmation: Votre email n'est pas valide");
                        }
                    } 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');
        //$this->mailConfirmationService->generateCode($id);
        $mailConfirmation = $this->mailConfirmationService->getDemandeById($id);


        $confirm = $this->url()->fromRoute('mail-confirmation-reception', ['id' => $mailConfirmation->getId(), 'code' => $mailConfirmation->getCode()], ['force_canonical' => true] , true);
        $destinataire = $mailConfirmation->getIndividu()->getPrenom1() ." ". $mailConfirmation->getIndividu()->getNomUsuel() . " " . "&lt;<tt>".$mailConfirmation->getEmail()."</tt>&gt;";
        $titre = "[SyGAL] Confirmation de votre email";
        $corps = "<br/>"
            ."&nbsp;&nbsp;&nbsp;&nbsp;Bonjour,<br/><br/>"
            ."Pour finaliser l'enregistrement de votre email professionelle veuillez confirmer celui-ci en cliquant sur le liens suivant :<br/>"
            ."<a href='".$confirm."'>"
            .$confirm
            ."</a><br/><br/>"
            ."Une fois confirmé, cet email sera utilisé pour recevoir les notifications de SyGAL et vous permettera de vous connecter à SyGAL.";


        $this->notificationService->notifierMailConfirmation($mailConfirmation, $titre, $corps);

        return $this->redirect()->toRoute("home");
        /** Branchement du mail mais peut être echanger avec une vue classique en
         * décommentant le code si dessous*/

//        return new ViewModel([
//            'destinataire' => $destinataire,
//            'titre' => $titre,
//            'corps' => $corps,
//        ]);
    }

    /**
     * @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>
+23 −0
Changes for module/Application/src/Application/Form/Factory/MailConfirmationFormFactory.php: 23 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Application\Form\Factory;

use Application\Form\MailConfirmationForm;
use Application\Form\Hydrator\MailConfirmationHydrator;
use Zend\Form\FormElementManager;

class MailConfirmationFormFactory
{
    public function __invoke(FormElementManager $formElementManager)
    {
        $sl = $formElementManager->getServiceLocator();

        /** @var MailConfirmationHydrator $hydrator */
        $hydrator = $sl->get('HydratorManager')->get('MailConfirmationHydrator');

        $form = new MailConfirmationForm();
        $form->setHydrator($hydrator);
        
        return $form;
    }
}
 No newline at end of file
Loading