src/Controller/RegisterController.php line 144

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\Routing\RouterInterface;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\RedirectResponse;
  9. use Symfony\Component\Security\Http\SecurityEvents;
  10. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  11. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  12. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  13. use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
  14. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  15. use Doctrine\ORM\EntityManagerInterface;
  16. use Symfony\Contracts\Translation\TranslatorInterface;
  17. use Symfony\Component\Mailer\MailerInterface;
  18. use Symfony\Component\Mime\Address;
  19. use Symfony\Component\Mime\Email;
  20. use League\HTMLToMarkdown\HtmlConverter;
  21. use App\Form\compteType;
  22. use App\Form\lostType;
  23. use App\Form\ResetPasswordType;
  24. use App\Services\iresaService;
  25. use App\Services\SendinblueService;
  26. use App\Entity\compte;
  27. use App\Entity\Language;
  28. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  29. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  30. /**
  31.  * @Route("/{_locale}", requirements={"_locale": "en|fr"})
  32.  */
  33. class RegisterController extends AbstractController
  34. {
  35.     private $tokenStorage;
  36.     private $eventDispatcher;
  37.     private $router;
  38.     private $translator;
  39.     private $passwordEncoder;
  40.     private $mailer;
  41.     private $em;
  42.     private $iresaService;
  43.     private $sendinblueService;
  44.     
  45.     public function __construct(RouterInterface $routerTokenStorageInterface $tokenStorageEventDispatcherInterface $eventDispatcherTranslatorInterface $translatorUserPasswordEncoderInterface $passwordEncoderMailerInterface $mailerEntityManagerInterface $emiresaService $iresaServiceSendinblueService $sendinblueService)
  46.     {
  47.         $this->tokenStorage $tokenStorage;
  48.         $this->eventDispatcher $eventDispatcher;
  49.         $this->router $router;
  50.         $this->translator $translator;
  51.         $this->passwordEncoder $passwordEncoder;
  52.         $this->mailer $mailer;
  53.         $this->em $em;
  54.         $this->iresaService $iresaService;
  55.         $this->sendinblueService $sendinblueService;
  56.     }
  57.     /**
  58.      *
  59.      * @Route("/compte", name="compte")
  60.      */
  61.     public function accountAction(Request $request)
  62.     { 
  63.         $session $request->getSession();
  64.         $locale $request->getLocale();
  65.         $lang  $this->em->getRepository(Language::class)->findOneByCode($locale);
  66.         $compte = new compte();
  67.         $compte->setLang($lang);
  68.         $form $this->createForm(compteType::class, $compte);
  69.         $resetPasswordFrom $this->createForm(lostType::class);
  70.         $form->handleRequest($request);
  71.         if ($form->isSubmitted() && $form->isValid()) { 
  72.             
  73.             $compte->setRoles(['ROLE_CUSTOMER']);
  74.             $password $this->passwordEncoder->encodePassword($compte$compte->getPassword());
  75.             $compte->setPassword($password);
  76.             $this->em->persist($compte);
  77.            
  78.             $createUserIresa $this->iresaService->iresaXFT("Create""Customer"$compte);
  79.             
  80.             if($createUserIresa != null) {
  81.                 $key intval($createUserIresa->Customer->Codes->Code[0]["Value"]);
  82.                 $compte->setKeyiresa($key);
  83.             }
  84.             $this->em->persist($compte);
  85.             $this->em->flush();
  86.             
  87.             $session->getFlashBag()->add('success', ['type' => 'success''title' => ""'message' => $this->translator->trans('compte.register.inscription.success', array(), 'app')]);
  88.             //return $this->redirectToRoute('compte');
  89.             $token = new UsernamePasswordToken($compte$compte->getPassword(), 'main_front'$compte->getRoles());
  90.             $this->tokenStorage->setToken($token);
  91.             $event = new InteractiveLoginEvent($request$token);
  92.             $this->eventDispatcher->dispatch($eventSecurityEvents::INTERACTIVE_LOGIN);
  93.             if($session->has('ReservationId') ) {
  94.                 $path $session->get('loginRedirectPath');
  95.                 $session->remove('ReservationId');
  96.                 $session->remove('loginRedirectPath');
  97.                 $response = new RedirectResponse($this->router->generate($path));
  98.                 return $response;
  99.             }
  100.         }
  101.         $route $request->query->get('route_name');
  102.         $params $request->query->get('params');
  103.         
  104.         return $this->render('/front/Compte/register.html.twig',[
  105.             'form' => $form->createView(),
  106.             'lostform' => $resetPasswordFrom->createView(),
  107.             "route_name" => $route,
  108.             "params" => $params
  109.         ]);
  110.     }
  111.     /**
  112.      *
  113.      * @Route("/compte/reset_password", name="form_reset_password")
  114.      */
  115.     public function resetPasswordAction(Request $request
  116.     {
  117.         $session $request->getSession();
  118.         $form $this->createForm(lostType::class);
  119.         $form->handleRequest($request);
  120.         
  121.         if ($form->isSubmitted() && $form->isValid()) {
  122.             $email $form->getData()['email'];
  123.             $user $this->em->getRepository(compte::class)->findOneBy(['email' => $email]);
  124.             if ($user) {
  125.                 $token md5(time() . rand());
  126.                 $user->setResetPasswordToken($token);
  127.                 $this->em->persist($user);
  128.                 $this->em->flush();
  129.                 $url $this->router->generate(
  130.                     'reinitialiserMotDePasse'
  131.                     [
  132.                         'token' => $token
  133.                     ], 
  134.                     UrlGeneratorInterface::ABSOLUTE_URL
  135.                 );
  136.                 $params = [
  137.                     'name' => $user->getprenom(),
  138.                     'email' => $user->getEmail(), 
  139.                     'token' => $token
  140.                     'url' => $url,
  141.                     'subject' => $this->translator->trans('compte.register.inscription.reinitialisation.email.sujet', array(), 'app'),
  142.                     'view' => 'reset_password'
  143.                 ];
  144.                 // template #933 Brevo - réinitialisation du mot de passe
  145.                 $this->sendMail($params933);
  146.                
  147.                 $title="";
  148.                 $message $this->translator->trans('compte.register.inscription.reinitialisation.flash', array(), 'app');
  149.                 $session->getFlashBag()->add('success', ['type' => 'success''title' => $title'message' => $message]);
  150.                 return $this->redirectToRoute('compte');
  151.             } 
  152.             
  153.             $message $this->translator->trans('compte.register.inscription.erreur.utilisateur_inconnu', array(), 'app');
  154.             $session->getFlashBag()->add('error', ['type' => 'success''title' => ""'message' => $message]);
  155.         }
  156.         return $this->render('security/request_password.html.twig', [
  157.             'form' => $form->createView()
  158.         ]);
  159.     }
  160.     
  161.     /**
  162.      * @Route("/reset/{token}", name="reinitialiserMotDePasse")
  163.      * 
  164.      */
  165.     public function confirmPasswordAction(Request $requestUserPasswordHasherInterface $userPasswordHasher$token null)
  166.     {   
  167.         $session $request->getSession();
  168.         if ($token) {
  169.             // We store the token in session and remove it from the URL, to avoid the URL being
  170.             // loaded in a browser and potentially leaking the token to 3rd party JavaScript.
  171.             $session->set('ResetPasswordToken'$token);
  172.             return $this->redirectToRoute('reinitialiserMotDePasse');
  173.         }
  174.         $token $request->getSession()->get('ResetPasswordToken');
  175.         if (null === $token) {
  176.             throw $this->createNotFoundException('No reset password token found in the URL or in the session.');
  177.         }
  178.         $user $this->em->getRepository(compte::class)->findOneBy(['resetPasswordToken' => $token]);
  179.         if(!$user) {
  180.             $title="";
  181.             $message="Utilisateur non trouvé ou requête expirée";
  182.             $session->getFlashBag()->add('error', ['type' => 'error''title' => $title'message' => $message]);
  183.             return $this->redirectToRoute('mon_compte');
  184.         }
  185.         $form $this->createForm(ResetPasswordType::class, ['token' => $token]);
  186.         $form->handleRequest($request);
  187.         if ($form->isSubmitted() && $form->isValid()) {
  188.             $session->remove('ResetPasswordToken');
  189.             /*
  190.             // TODO: Nouvelle méthode de hash à mettre en palce
  191.             $encodedPassword = $userPasswordHasher->hashPassword(
  192.                 $user,
  193.                 $form->get('plainPassword')->getData()
  194.             );
  195.             */
  196.             $encodedPassword $this->passwordEncoder->encodePassword($user,  $form->get('plainPassword')->getData());
  197.             $user->setPassword($encodedPassword);
  198.             $user->setResetPasswordToken(null);
  199.             $this->em->persist($user);
  200.             $this->em->flush();
  201.             $title="";
  202.             $message="Password changed!";
  203.             $session->getFlashBag()->add('success', ['type' => 'success''title' => $title'message' => $message]);
  204.             
  205.             $url $this->router->generate('compte', [], UrlGeneratorInterface::ABSOLUTE_URL);
  206.             $params = [
  207.                 'name' => $user->getprenom(),
  208.                 'email' => $user->getEmail(), 
  209.                 'token' => $token
  210.                 'url' => $url,
  211.                 'subject' => 'Mot de passe réinitialisé avec succès',
  212.                 'view' => 'reset_password_confirmation'
  213.             ];
  214.             $this->sendMail($params934);
  215.             return $this->redirectToRoute('mon_compte');
  216.         } 
  217.         
  218.         $array = [
  219.             'form' => $form->createView(), 
  220.             'token' => $token
  221.         ];
  222.         return $this->render('security/confirm_password.html.twig'$array);
  223.     }
  224.     private function sendMail($params$templateId null)
  225.     {
  226.         if($templateId == null) {
  227.             $content $this->renderView('/front/Compte/' .  $params['view'] . '.html.twig'$params);
  228.             
  229.             // Convertir le contenu HTML en texte brut
  230.             $converter = new HtmlConverter();
  231.             $texte $converter->convert($content);
  232.             
  233.             $message = (new Email())
  234.                 ->from(new Address('noreply@ateya.fr'"Ateya-vacances"))
  235.                 ->to(new Address($params['email'], $params['name']))
  236.                 ->subject($params['subject'])
  237.                 ->text($texte)
  238.                 ->html((string)$content)
  239.                 ;
  240.             try {
  241.                 $this->mailer->send($message);
  242.             } catch (TransportExceptionInterface $e) {
  243.                 throw new NotificationErrorSendingException(sprintf('error sending for %s'$notification->getRecipient()->getEmail()));
  244.             }
  245.         } else {
  246.             $vars = [
  247.                 "EMAIL" => $params['email'],
  248.                 "TOKEN" => $params['token'],
  249.                 "URL" => $params['url']
  250.             ];
  251.             $this->sendinblueService->setTemplateId($templateId);
  252.             $this->sendinblueService->setRecipient($params['email'], $params['name']);
  253.             $this->sendinblueService->setParams($vars);
  254.             try {
  255.                 $ret $this->sendinblueService->sendEmail();
  256.             } catch (Exception $e) {
  257.                echo $e->getMessage();
  258.             }
  259.         }
  260.         return "EMAIL";
  261.        
  262.     }
  263. }