Forráskód Böngészése

Mails en template et activation du compte (fonction encore inactive)

François 6 éve
szülő
commit
ac512796e9

+ 1 - 1
app/config/security.yml

@@ -21,7 +21,7 @@ security:
             security: false
 
         main_login:
-            pattern: ^/(login$|register$|motdepasseoublie$|resetpassword/token=)
+            pattern: ^/(login$|register$|motdepasseoublie$|resetpassword/token=|activate/token=)
             anonymous: true
             logout_on_user_change: true
 

+ 45 - 5
src/AppBundle/Controller/SecurityController.php

@@ -111,21 +111,36 @@ class SecurityController extends Controller
     /**
      * @Route("/register", name="security_register")
      */
-    public function registerAction(Request $request, UserPasswordEncoderInterface $encoder)
+    public function registerAction(Request $request, UserPasswordEncoderInterface $encoder , \Swift_Mailer $mailer)
     {
         $user = new User();
+        $user->setActivated(false);
         $form = $this->createForm(UserRegisterType::class, $user);
         $form->handleRequest($request);
         if ($form->isSubmitted() && $form->isValid())
         {
-            $user = $form->getData();
             $user->setRoles(array('ROLE_USER'));
             $encoded = $encoder->encodePassword($user, $user->getPassword());
             $user->setPassword($encoded);
             $em = $this->getDoctrine()->getManager();
             $em->persist($user);
             $em->flush();
-            $this->addFlash('success', 'Votre compte a été créé. Vous pouvez vous identifier');
+
+            $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);
+
+            $this->addFlash('success', 'Votre compte a été créé. Un mail vient d\'être envoyé pour l\'activation du compte');
             return $this->redirectToRoute('login');
         }
 
@@ -174,8 +189,13 @@ class SecurityController extends Controller
                 $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("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);
                 $this->addFlash('success', "Un mail vous a été envoyé à ".$user->getUsername()." pour récupérer le mot de passe");
                 return $this->redirectToRoute('login');
@@ -231,4 +251,24 @@ class SecurityController extends Controller
         $em->flush();
         return $this->redirectToRoute('admin_index');
     }
+
+    /**
+     * @Route("/activate/token={token}", name="security_activate")
+     */
+    public function activateAction(Request $request, User $user = null)
+    {
+        if ($user != null)
+        {
+            if ($user->isValidToken())
+            {
+                $user->setActivated(true);
+                $em = $this->getDoctrine()->getManager();
+                $em->flush();
+                $this->addFlash('success', "Votre compte est activé");
+                return $this->redirectToRoute('login');
+            }
+        }
+        $this->addFlash('warning', "Ce token n'est plus valide");
+        return $this->redirectToRoute('videotheque_liste');
+    }
 }

+ 26 - 0
src/AppBundle/Entity/User.php

@@ -87,6 +87,13 @@ class User implements UserInterface
      */
     private $salt;
 
+    /**
+     * @var boolean
+     *
+     * @ORM\Column(name="activated", type="boolean")
+     */
+    private $activated;
+
     /**
      * @var array
      *
@@ -175,6 +182,24 @@ class User implements UserInterface
         return $this->username;
     }
 
+    /**
+     * @return bool
+     */
+    public function isActivated()
+    {
+        return $this->activated;
+    }
+
+    /**
+     * @param bool $activated
+     */
+    public function setActivated($activated)
+    {
+        $this->activated = $activated;
+    }
+
+
+
     /**
      * @return string
      */
@@ -368,6 +393,7 @@ class User implements UserInterface
         $this->films = new \Doctrine\Common\Collections\ArrayCollection();
         $this->setToken();
         $this->setLastActivity(new \DateTime('now'));
+        $this->setActivated(true);
     }
 
     ///////////////////////////////////////////////////////////////

+ 1 - 0
src/AppBundle/Form/UserEditPasswordType.php

@@ -17,6 +17,7 @@ class UserEditPasswordType extends AbstractType
             ->remove('nom')
             ->remove('prenom')
             ->remove('mail')
+            ->remove('activated')
             ->remove('roles');
     }
 

+ 2 - 1
src/AppBundle/Form/UserEditProfilType.php

@@ -15,7 +15,8 @@ class UserEditProfilType extends AbstractType
     {
         $builder
             ->remove('password')
-            ->remove('roles');
+            ->remove('roles')
+            ->remove('activated');
     }
 
     public function getParent()

+ 2 - 1
src/AppBundle/Form/UserRegisterType.php

@@ -14,7 +14,8 @@ class UserRegisterType extends AbstractType
     public function buildForm(FormBuilderInterface $builder, array $options)
     {
         $builder
-            ->remove('roles');
+            ->remove('roles')
+            ->remove('activated');
     }
 
     public function getParent()

+ 7 - 0
src/AppBundle/Form/UserType.php

@@ -39,6 +39,13 @@ class UserType extends AbstractType
                 ),
                 'multiple'  => true
             ))
+            ->add('activated', ChoiceType::class, array(
+                'label' => 'Compte activé',
+                'choices'   => array(
+                    'Oui'   => true,
+                    'Non'   => false
+                )
+            ))
             ->add('save', SubmitType::class, array('label' => 'Enregistrer'));
 
     }

+ 8 - 0
src/AppBundle/Resources/views/security/mail_activate.html.twig

@@ -0,0 +1,8 @@
+Bonjour {{ user.nomComplet }},
+
+Votre compte est bien enregistré, merci de cliquer sur le lien suivant pour l'activer.
+
+{{ lien }}
+
+A++
+François

+ 8 - 0
src/AppBundle/Resources/views/security/mail_tokenmdp.html.twig

@@ -0,0 +1,8 @@
+Bonjour {{ user.nomComplet }},
+
+Voici le lien pour modifier votre mot de passe. Il est valable 2 heures.
+
+{{ lien }}
+
+A++
+François

+ 7 - 1
src/AppBundle/Resources/views/security/register.html.twig

@@ -4,5 +4,11 @@
 {% block titre %}S'enregistrer{%  endblock %}
 
 {% block body %}
-    {{ form(form) }}
+    <div class="container">
+        <div class="row">
+            <div class="col-4">
+                {{ form(form) }}
+            </div>
+        </div>
+    </div>
 {% endblock %}