Pārlūkot izejas kodu

Passage de l'envoi de mail en service

François 6 gadi atpakaļ
vecāks
revīzija
50cac7d89d

+ 3 - 0
app/config/parameters.yml.dist

@@ -16,6 +16,9 @@ parameters:
     mailer_password: ~
     mailer_encryption: tls
     mailer_auth_mode: plain
+    mail_from: ~
+    mail_reply: ~
+    mail_name: ~
 
 
     # A secret key that's used to generate certain security-related tokens

+ 11 - 1
app/config/services.yml

@@ -48,4 +48,14 @@ services:
         class: AppBundle\Service\UniciteCollections
         public: true
         arguments:
-        - "@doctrine.orm.entity_manager"
+        - "@doctrine.orm.entity_manager"
+
+    film.mail:
+        class: AppBundle\Service\Mail
+        public: true
+        arguments:
+        - "@mailer"
+        - "@twig"
+        - '%mail_from%'
+        - '%mail_reply%'
+        - '%mail_name%'

+ 8 - 25
src/AppBundle/Controller/SecurityController.php

@@ -111,7 +111,7 @@ class SecurityController extends Controller
     /**
      * @Route("/register", name="security_register")
      */
-    public function registerAction(Request $request, UserPasswordEncoderInterface $encoder , \Swift_Mailer $mailer)
+    public function registerAction(Request $request, UserPasswordEncoderInterface $encoder)
     {
         $user = new User();
         $user->setActivated(false);
@@ -128,17 +128,8 @@ class SecurityController extends Controller
 
             $adresse = $this->generateUrl('security_activate', array('token'=>$user->getToken()), UrlGeneratorInterface::ABSOLUTE_URL);
 
-            $swiftMessage = new \Swift_Message('Videothèque - Activation de votre compte');
-            $message = $swiftMessage
-                ->setFrom('admin@fdlibre.eu')
-                ->setTo($user->getMail())
-                ->setBody($this->render('@App/security/mail_activate.html.twig', array(
-                    'user'  =>  $user,
-                    'lien'  =>  $adresse
-                )),
-                    'text/plain'
-                );
-            $mailer->send($message);
+            $mail = $this->get('film.mail');
+            $mail->sendMailActivation($user, $adresse);
 
             $this->addFlash('success', 'Votre compte a été créé. Un mail vient d\'être envoyé pour l\'activation du compte');
             return $this->redirectToRoute('login');
@@ -152,7 +143,7 @@ class SecurityController extends Controller
     /**
      * @Route("/motdepasseoublie", name="security_envoyertoken")
      */
-    public function recupMdpAction(Request $request, \Swift_Mailer $mailer)
+    public function recupMdpAction(Request $request)
     {
         $form = $this->createFormBuilder()
             ->add('email', SearchType::class)
@@ -169,18 +160,10 @@ class SecurityController extends Controller
                 $user->setToken();
                 $em->flush();
                 $adresse = $this->generateUrl('security_resetpassword', array('token'=>$user->getToken()), UrlGeneratorInterface::ABSOLUTE_URL);
-                $swiftMessage = new \Swift_Message('Videothèque - Mot de passe oublié');
-                $message = $swiftMessage
-                    ->setFrom('admin@fdlibre.eu')
-                    ->setTo($user->getMail())
-                    //->setBody("Salut ".$user->getUsername().", clique sur ce lien pour renouveller ton mot de passe : ". $adresse);
-                    ->setBody($this->render('@App/security/mail_tokenmdp.html.twig', array(
-                        'user'  =>  $user,
-                        'lien'  =>  $adresse
-                    )),
-                        'text/plain'
-                    );
-                $mailer->send($message);
+
+                $mail = $this->get('film.mail');
+                $mail->sendMailTokenMp($user, $adresse);
+
                 $this->addFlash('success', "Un mail vous a été envoyé à ".$user->getUsername()." pour récupérer le mot de passe");
                 return $this->redirectToRoute('login');
             } else {

+ 62 - 0
src/AppBundle/Service/Mail.php

@@ -0,0 +1,62 @@
+<?php
+
+namespace AppBundle\Service;
+
+use Symfony\Component\Templating\EngineInterface;
+use Twig\Environment;
+
+/**
+ * Envoi de mails
+ */
+class Mail
+{
+    protected $mailer;
+    protected $templating;
+    protected $from;
+    protected $reply;
+    protected $name;
+    /**
+     * Mail Manager
+     * @param $mailer
+     */
+    public function __construct(\Swift_Mailer $mailer, Environment $templating, $from, $reply, $name)
+    {
+        $this->mailer = $mailer;
+        $this->templating = $templating;
+        $this->from = $from;
+        $this->reply = $reply;
+        $this->name = $name;
+    }
+
+    protected function sendMessage($subject, $to, $body)
+    {
+        $mail = new \Swift_Message($subject);
+        $mail
+            ->setFrom($this->from, $this->name)
+            ->setTo($to)
+            ->setSubject($subject)
+            ->setBody($body)
+            ->setReplyTo($this->reply, $this->name)
+            ->setContentType('text/plain');
+
+        return $this->mailer->send($mail);
+    }
+
+    public function sendMailActivation(\AppBundle\Entity\User $user, $lien)
+    {
+        $subject = "Activation de votre compte";
+        $template = '@App/security/mail_activate.html.twig';
+        $to = $user->getMail();
+        $body = $this->templating->render($template, array('user' => $user, 'lien'  => $lien));
+        $this->sendMessage($subject, $to, $body);
+    }
+
+    public function sendMailTokenMp(\AppBundle\Entity\User $user, $lien)
+    {
+        $subject = "Mot de passe perdu";
+        $template = '@App/security/mail_tokenmdp.html.twig';
+        $to = $user->getMail();
+        $body = $this->templating->render($template, array('user' => $user, 'lien'  => $lien));
+        $this->sendMessage($subject, $to, $body);
+    }
+}