src/Controller/Publico/RecuperarCuentaController.php line 39

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Publico;
  3. use App\Repository\Ajustes\UsuarioRepository;
  4. use App\Service\EmailService;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\Mailer\Header\TagHeader;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. use Symfony\Component\Security\Csrf\TokenGenerator\TokenGeneratorInterface;
  12. use Symfony\Contracts\Translation\TranslatorInterface;
  13. /**
  14.  * @Route("/recuperar-cuenta", name="recuperar_pass_", methods = {"GET", "POST"})
  15.  */
  16. class RecuperarCuentaController extends AbstractController
  17. {
  18.     public const BASEDIR '/pages/publico/recuperar';
  19.     protected $em;
  20.     protected $ur;
  21.     protected $tr;
  22.     protected $tokGen;
  23.     public function __construct(EntityManagerInterface $emUsuarioRepository $urTranslatorInterface $tiTokenGeneratorInterface $tkGen)
  24.     {
  25.         $this->em $em;
  26.         $this->ur $ur;
  27.         $this->tr $ti;
  28.         $this->tokGen $tkGen;
  29.     }
  30.     /**
  31.      * @Route("/", name="index")
  32.      */
  33.     public function recuperarContrasenya(Request $requestEmailService $servEmails): Response
  34.     {
  35.         
  36.         if ($this->getUser()) {
  37.             return $this->redirectToRoute('index');
  38.         }
  39.         
  40.         $email $request->request->get('e''');
  41.         if ('' != $email) {
  42.             $token $this->isCsrfTokenValid('restore-password'$request->request->get('t'''));
  43.             if (false == $token) {
  44.                 $this->addFlash('danger'$this->tr->trans('cambio_pass.info', [], 'messages'));
  45.                 return $this->redirectToRoute('recuperar_pass_index');
  46.             }
  47.             $user $this->ur->findOneBy(['email' => $email]);
  48.             if (!$user) {
  49.                 $this->addFlash('danger'$this->tr->trans('cambio_pass.error.notfound', [], 'messages'));
  50.                 return $this->redirectToRoute('recuperar_pass_index');
  51.             }
  52.             if (!$user->getEnabled()) {
  53.                 $this->addFlash('danger'$this->tr->trans('cambio_pass.error.disabled', [], 'messages'));
  54.                 return $this->redirectToRoute('recuperar_pass_index');
  55.             }
  56.             $token $user->getPasswordRecoverToken() ? $user->getPasswordRecoverToken() : $this->tokGen->generateToken();
  57.             $user
  58.                 ->setPasswordRecoverToken($token)
  59.                 ->setPasswordRecoverRequestedAt(new \Datetime())
  60.                 ->setPasswordRecoverResquestIp($request->getClientIp())
  61.             ;
  62.             $this->em->flush();
  63.             $params = [
  64.                 'to' => [$user->getEmail()],
  65.                 'plantilla' => self::BASEDIR.'/mail/rec_mail_pass.html.twig',
  66.                 'asunto' => $this->tr->trans('cambio_pass.mail.asunto'),
  67.                 'plantilla_params' => [
  68.                     'token' => $token,
  69.                     'usuario' => $user,
  70.                 ],
  71.                 'header' => [
  72.                     new TagHeader('password-reset'),
  73.                 ],
  74.             ];
  75.             $result $servEmails->envioBasico($params);
  76.             if ($result) {
  77.                 // Envio de mail de recuperación al correo asociado a este usuario...
  78.                 $this->addFlash('success'$this->tr->trans('cambio_pass.send.success', ['{correo}' => $user->getEmail()]));
  79.                 return $this->redirectToRoute('app_login');
  80.             }
  81.             $this->addFlash('danger'$this->tr->trans('cambio_pass.send.abort'));
  82.             return $this->redirectToRoute('recuperar_pass_index');
  83.         }
  84.         return $this->render(self::BASEDIR.'/rec_pass_indice.html.twig');
  85.     }
  86.     /**
  87.      * @Route("-enviada", name="success")
  88.      */
  89.     public function recuperarSucess(Request $request): Response
  90.     {
  91.         $this->bd->addRouteItem('Inicio''index');
  92.         $this->bd->addItem('Restablecer contraseña');
  93.         $this->seo->get('basic')->setTitle('Restablecer contraseña solicitado - HidrosaludPDF');
  94.         return $this->render(self::BaseDir.'/sec_pass_solicitar_success.html.twig');
  95.     }
  96. }