src/Controller/Publico/RecuperarCuentaController.php line 42

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