src/Controller/RegisterController.php line 31

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  8. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  9. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
  10. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  11. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  12. use Symfony\Component\Mailer\MailerInterface;
  13. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  14. use Symfony\Component\Mime\Address;
  15. use App\Entity\Account;
  16. use App\Form\RegisterFormType;
  17. class RegisterController extends AbstractController
  18. {
  19.     #[Route('/{_locale}/register',
  20.             locale"en",
  21.             format"html",
  22.             requirements: ["_locale" => "en|es|ca""_format" => "html|xml", ],
  23.             defaults: ["_locale" => "en"], name'register')]
  24.     public function register (Request $requestUserPasswordHasherInterface $passwordHasherMailerInterface $mailer)
  25.     {
  26.         $user = new Account();
  27.         $form $this->createForm(RegisterFormType::class, $user, array('type'=>'register'));
  28.         $form->handleRequest($request);     
  29.         if ($form->isSubmitted() && $form->isValid()) {
  30.             $hashedPassword $passwordHasher->hashPassword(
  31.                 $user,
  32.                 'retabit_platform'
  33.             );
  34.             // encode the plain password
  35.             $user->setPassword$hashedPassword );
  36.             $roles[0] = 'ROLE_GUEST';
  37.             $user->setRoles($roles);
  38.             $user->setCreationDay(new \DateTimeImmutable());
  39.             $entityManager $this->getDoctrine()->getManager();
  40.             $entityManager->persist($user);
  41.             $entityManager->flush();
  42.             $admins $entityManager->getRepository(Account::class)->findByRole('ROLE_SUPER_ADMIN');
  43.             $recipients = array();
  44.             foreach($admins as $admin){
  45.                 $recipients [] = $admin["email"];
  46.             }
  47.              
  48.             //Send email to admins
  49.             $email = (new TemplatedEmail())
  50.                 ->from(new Address('info@retabit.es''Retabit'))
  51.                 ->to(...$recipients)
  52.                 ->subject('RETABIT Register')
  53.                 ->htmlTemplate('Backoffice/email_register.html.twig')
  54.                 ->context([
  55.                     'expiration_date' => new \DateTime('+7 days'),
  56.                     'guest' => $user
  57.                 ])                
  58.             ;
  59.             $logoPath $this->getParameter('kernel.project_dir') . '/public/img/logo-menu-white.png';
  60.         
  61.             $cid $email->embedFromPath($logoPath'logo');
  62.             $mailer->send($email);
  63.             
  64.             return $this->render('Register/guestRegistered.html.twig');          
  65.         }
  66.         return $this->renderForm('Register/register.html.twig', [
  67.             'registerForm' => $form,
  68.         ]);
  69.     }
  70.     #[Route('guest-registered'name'guest-registered')]
  71.     public function guestRegistered (Request $request) : Response
  72.     {
  73.         return $this->renderForm('Register/guestRegistered.html.twig');
  74.     }
  75.     #[Route('change-rol'name'changeRol')]
  76.     public function changeRol (Request $request
  77.     {
  78.         // un superAdmin   // admin      // register
  79.         $em $this->getDoctrine()->getManager();
  80.         $usersToUpdate $em->getRepository(Account::class)->findUsersWithNonSallesEmail();
  81.         if (empty($usersToUpdate)) {
  82.             $this->addFlash('info''No se encontraron usuarios para actualizar.');
  83.             return $this->redirectToRoute('dashboard');
  84.         }
  85.         
  86.         foreach ($usersToUpdate as $user) {
  87.             $user->setRoles(['ROLE_REGISTERED']); 
  88.             $em->persist($user);
  89.         }
  90.        
  91.         $em->flush();
  92.         $this->addFlash('success'sprintf('Se han actualizado %d usuarios.'count($usersToUpdate)));
  93.         return $this->redirectToRoute('dashboard');
  94.     }
  95.     /*#[Route('/reset-password', name: 'app_forgot_password')]
  96.     public function requestReset(Request $request, MailerInterface $mailer, EntityManagerInterface $em)
  97.     {
  98.         $form = $this->createForm(PasswordResetRequestFormType::class);
  99.         $form->handleRequest($request);
  100.     
  101.         if ($form->isSubmitted() && $form->isValid()) {
  102.             $email = $form->get('email')->getData();
  103.             $user = $em->getRepository(User::class)->findOneBy(['email' => $email]);
  104.             if ($user) {
  105.                 $token = Uuid::v4()->toRfc4122();
  106.                 $user->setResetToken($token);
  107.                 $user->setResetTokenExpiresAt(new \DateTimeImmutable('+1 hour'));
  108.                 $em->flush();
  109.                 $resetLink = $this->generateUrl('app_reset_password', ['token' => $token], UrlGeneratorInterface::ABSOLUTE_URL);
  110.                 $emailMessage = (new Email())
  111.                     ->from('no-reply@tusitio.com')
  112.                     ->to($user->getEmail())
  113.                     ->subject('Restablecer contraseña')
  114.                     ->html("<p>Haz clic en el siguiente enlace para restablecer tu contraseña:</p><p><a href='$resetLink'>$resetLink</a></p>");
  115.                 $mailer->send($emailMessage);
  116.             }
  117.             $this->addFlash('success', 'Si el correo existe, recibirás instrucciones.');
  118.             return $this->redirectToRoute('app_login');
  119.         }
  120.         return $this->render('security/request_reset.html.twig', [
  121.             'form' => $form->createView(),
  122.         ]);
  123.     }
  124.     #[Route('/reset-password/{token}', name: 'app_reset_password')]
  125.     public function resetPassword(Request $request, string $token, EntityManagerInterface $em, UserPasswordHasherInterface $hasher)
  126.     {
  127.         $user = $em->getRepository(User::class)->findOneBy(['resetToken' => $token]);
  128.         if (!$user || $user->getResetTokenExpiresAt() < new \DateTimeImmutable()) {
  129.             throw $this->createNotFoundException('Token inválido o expirado.');
  130.         }
  131.         $form = $this->createFormBuilder()
  132.             ->add('password', PasswordType::class, ['label' => 'Nueva contraseña'])
  133.             ->add('submit', SubmitType::class, ['label' => 'Restablecer'])
  134.             ->getForm();
  135.         $form->handleRequest($request);
  136.         if ($form->isSubmitted() && $form->isValid()) {
  137.             $user->setPassword(
  138.                 $hasher->hashPassword($user, $form->get('password')->getData())
  139.             );
  140.             $user->setResetToken(null);
  141.             $user->setResetTokenExpiresAt(null);
  142.             $em->flush();
  143.             $this->addFlash('success', 'Contraseña actualizada.');
  144.             return $this->redirectToRoute('app_login');
  145.         }
  146.         return $this->render('security/reset_password.html.twig', [
  147.             'form' => $form->createView()
  148.         ]);
  149.     }*/
  150. }