src/Controller/ResetPasswordController.php line 35

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\ResetPassword;
  4. use App\Form\ResetPasswordType;
  5. use App\Services\MailerServices;
  6. use App\Repository\UserRepository;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use App\Repository\ResetPasswordRepository;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\Mailer\MailerInterface;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use Symfony\Contracts\Translation\TranslatorInterface;
  14. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  15. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  16. class ResetPasswordController extends AbstractController
  17. {
  18.     private $em;
  19.     private $mailerint;
  20.     private $tanslator;
  21.     public function __construct(EntityManagerInterface $emMailerInterface $mailerintTranslatorInterface $tanslator)
  22.     {
  23.         $this->em           $em;
  24.         $this->mailerint    $mailerint;
  25.         $this->tanslator    $tanslator
  26.     }
  27.     /**
  28.      * @Route("/mot-de-passe-oublie", name="reset_password")
  29.      */
  30.     public function index(Request $requestUserRepository $userRepoEntityManagerInterface $emMailerServices $ms): Response
  31.     {
  32.         if ($this->getUser()) {
  33.             return $this->redirectToRoute('account');
  34.         }
  35.         if ($request->get('_username')) {//mi-recuperer ny email avy @formulaire
  36.             $user $userRepo->findOneByEmail($request->get('_username'));
  37.             //dd($user);
  38.             if ($user) {
  39.                 //etape , Enregistrer dans bd la demnde reset_password avec user, token, createdAt
  40.                $reset_password = new ResetPassword();
  41.                $reset_password->setUser($user)
  42.                               ->setToken(uniqid())
  43.                               ->setCreatedAt(new \DateTime());
  44.                 $em->persist($reset_password);
  45.                 $em->flush();
  46.                 //etape 2: envoyer email a l'user pour mettre a jour son mot de passe
  47.                 $url $this->generateUrl('update_password', [
  48.                     'token' => $reset_password->getToken()
  49.                 ]);
  50.                 $token $reset_password->getToken();
  51.                 $name_to  null;
  52.                 $subject  'PHARMADEXI-Reinitialiser votre Mot de passe';
  53.                 $template 'emails/reset_password.html.twig';
  54.                 //dd($user->getRoles());
  55.                 if ($user->getRoles()[0] != "ROLE_PRESCRIPTEUR") {
  56.                     $name_to $user->getDesignation();
  57.                 } else {
  58.                      $name_to $user->getFullName();
  59.                 }
  60.                 
  61.                 $ms->resetPasswordMail($this->mailerint'pharmadexi@gmail.com'$user->getEmail(), $name_to$subject$template$token);
  62.                 $this->addFlash('success'$this->tanslator->trans('vous allez bientôt recevoir par email un lien pour la réinitialisation'));
  63.             }else{
  64.                 $this->addFlash('danger'$this->tanslator->trans('Adresse e-mail inconnue'));
  65.             }
  66.         }
  67.         return $this->render('compte/reset_password.html.twig');
  68.     }
  69.     /**
  70.      * @Route("/modifier-mon-mot-de-passe/{token}", name="update_password")
  71.      */
  72.     public function update($tokenResetPasswordRepository $resetRepoRequest $requestUserPasswordEncoderInterface $encoderEntityManagerInterface $em): Response
  73.     {
  74.         $reset_password $resetRepo->findOneByToken($token);
  75.         if (!$reset_password) {
  76.             die('ato');
  77.             return $this->redirectToRoute('reset_password');
  78.         }
  79.         //verifier si createdAt = now -3h
  80.         $now = new \DateTime();
  81.         if ($now $reset_password->getCreatedAt()->modify('+ 3 hour')) {
  82.             $this->addFlash('notice'$this->tanslator->trans("Délai expiré, merci de renouveler votre demande"));
  83.             return $this->redirectToRoute('reset_password');
  84.         }
  85.         $form $this->createForm(ResetPasswordType::class);
  86.         $form->handleRequest($request);
  87.         if ($form->isSubmitted() && $form->isValid()) {
  88.             //dd($form->getData());
  89.             $new_pwd $form->get('new_password')->getData();
  90.             $user $reset_password->getUser();
  91.             $password $encoder->encodePassword($user$new_pwd);
  92.             $user->setPassword($password);
  93.             $em->flush();
  94.             $this->addFlash('success'$this->tanslator->trans('Votre mot de passe a été mis à jour'));
  95.             return $this->redirectToRoute('login');
  96.         }
  97.         return $this->render('compte/update_password.html.twig',[
  98.             'form' => $form->createView()
  99.         ]);
  100.     }
  101. }