src/Controller/Accesos/UsuarioController.php line 262

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Accesos;
  3. use App\Entity\Accesos\Usuario;
  4. use App\Form\Accesos\UsuarioType;
  5. use App\Repository\Accesos\UsuarioRepository;
  6. use App\Security\EmailVerifier;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\Mime\Address;
  13. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Contracts\Translation\TranslatorInterface;
  16. use SymfonyCasts\Bundle\VerifyEmail\Exception\VerifyEmailExceptionInterface;
  17. use App\Entity\Admin\Empleada;
  18. use Symfony\Component\HttpFoundation\RedirectResponse;
  19. use App\Entity\Admin\Contacto;
  20. use App\Entity\Admin\ContactoProveedor;
  21. #[Route('/accesos/usuario')]
  22. class UsuarioController extends AbstractController {
  23.     private EmailVerifier $emailVerifier;
  24.     public function __construct(EmailVerifier $emailVerifier) {
  25.         $this->emailVerifier $emailVerifier;
  26.     }
  27.     #[Route('/'name'app_accesos_usuario_index'methods: ['GET'])]
  28.     public function index(UsuarioRepository $usuarioRepository): Response {
  29.         $usuarioEmpleadas $usuarioRepository->createQueryBuilder('u')
  30.                 ->where('u.empleada != :valor')
  31.                 ->setParameter('valor''NULL')
  32.                 ->getQuery()
  33.                 ->getResult();
  34.         $usuarioContactos $usuarioRepository->createQueryBuilder('u')
  35.                 ->where('u.contacto != :valor')
  36.                 ->setParameter('valor''NULL')
  37.                 ->getQuery()
  38.                 ->getResult();
  39.         $usuarioContactoProveedores $usuarioRepository->createQueryBuilder('u')
  40.                 ->where('u.contactoProveedor != :valor')
  41.                 ->setParameter('valor''NULL')
  42.                 ->getQuery()
  43.                 ->getResult();
  44.         return $this->render('accesos/usuario/index.html.twig', [
  45.                     'usuarios' => $usuarioRepository->findAll(),
  46.                     'empleadas' => $usuarioEmpleadas,
  47.                     'contactoProveedores' => $usuarioContactoProveedores,
  48.                     'contactos' => $usuarioContactos,
  49.         ]);
  50.     }
  51.     #[Route('/registrarEmpleada/{id}'name'app_accesos_usuario_registro_empleada'methods: ['POST''GET'])]
  52.     public function registrarEmpleada(Empleada $empleadaEntityManagerInterface $entityManager): Response {
  53.         if (!$empleada->getUsuario()) {
  54.             $user = new Usuario();
  55.             $user->setEmail($empleada->getEmail());
  56.             $user->setNombre($empleada->getNombre());
  57.             $user->setEmpleada($empleada);
  58.             $user->setPassword("");
  59.             $user->setHabilitado(true);
  60.             $roles[] = 'ROLE_EMPLEADA';
  61.             $user->setRoles($roles);
  62.             $entityManager->persist($user);
  63.             $entityManager->flush();
  64.             $this->emailVerifier->sendEmailConfirmation('app_accesos_usuario_finalizar'$user,
  65.                     (new TemplatedEmail())
  66.                             ->from(new Address('daiteke@aplicaciones.debamatika.com''DaitekeCRM'))
  67.                             ->to($user->getEmail())
  68.                             ->subject('Finalizar Registro Daiteke')
  69.                             ->htmlTemplate('accesos/usuario/emailRegistro.html.twig')
  70.             );
  71.             $mensaje "usuario.mensajeEnlace";
  72.             $datos $empleada->getNombre() . " (" $empleada->getEmail() . ")";
  73.             $datos2 "";
  74.         } else {
  75.             $datos "";
  76.             $datos2 $empleada->getNombre() . " (" $empleada->getEmail() . ")";
  77.             if ($empleada->getUsuario()->isVerified()) {
  78.                 $mensaje "usuario.mensajeRegistrado";
  79.             } else {
  80.                 $mensaje "usuario.mensajePendienteEmail";
  81.             }
  82.         }
  83.         return $this->render('accesos/usuario/registrar.html.twig', [
  84.                     'mensaje' => $mensaje,
  85.                     'datos' => $datos,
  86.                     'datos2' => $datos2,
  87.                     'titulo' => 'usuario.nuevo'
  88.         ]);
  89.     }
  90.     #[Route('/registrarContacto/{id}'name'app_accesos_usuario_registro_contacto'methods: ['POST''GET'])]
  91.     public function registrarContacto(Contacto $contactoEntityManagerInterface $entityManager): Response {
  92.         if (!$contacto->getUsuario()) {
  93.             $user = new Usuario();
  94.             $user->setEmail($contacto->getEmail());
  95.             $user->setNombre($contacto->getNombre());
  96.             $user->setContacto($contacto);
  97.             $user->setPassword("");
  98.             $user->setHabilitado(true);
  99.             $roles[] = 'ROLE_EXTERNO';
  100.             $user->setRoles($roles);
  101.             $entityManager->persist($user);
  102.             $entityManager->flush();
  103.             $this->emailVerifier->sendEmailConfirmation('app_accesos_usuario_finalizar'$user,
  104.                     (new TemplatedEmail())
  105.                             ->from(new Address('daiteke@aplicaciones.debamatika.com''Daiteke CRM'))
  106.                             ->to($user->getEmail())
  107.                             ->subject('Finalizar Registro Daiteke')
  108.                             ->htmlTemplate('accesos/usuario/emailRegistro.html.twig')
  109.             );
  110.             $mensaje "usuario.mensajeEnlace";
  111.             $datos $contacto->getNombre() . " (" $contacto->getEmail() . ")";
  112.             $datos2 "";
  113.         } else {
  114.             $datos "";
  115.             $datos2 $contacto->getNombre() . " (" $contacto->getEmail() . ")";
  116.             if ($contacto->getUsuario()->isVerified()) {
  117.                 $mensaje "usuario.mensajeRegistrado";
  118.             } else {
  119.                 $mensaje "usuario.mensajePendienteEmail";
  120.             }
  121.         }
  122.         return $this->render('accesos/usuario/registrar.html.twig', [
  123.                     'mensaje' => $mensaje,
  124.                     'datos' => $datos,
  125.                     'datos2' => $datos2,
  126.                     'titulo' => 'usuario.nuevo',
  127.         ]);
  128.     }
  129.     #[Route('/registrarContactoProveedor/{id}'name'app_accesos_usuario_registro_contactoproveedor'methods: ['POST''GET'])]
  130.     public function registrarContactoProveedor(ContactoProveedor $contactoProveedorEntityManagerInterface $entityManager): Response {
  131.         if (!$contactoProveedor->getUsuario()) {
  132.             $user = new Usuario();
  133.             $user->setEmail($contactoProveedor->getEmail());
  134.             $user->setNombre($contactoProveedor->getNombre());
  135.             $user->setContactoProveedor($contactoProveedor);
  136.             $user->setPassword("");
  137.             $user->setHabilitado(true);
  138.             $roles[] = 'ROLE_EXTERNO';
  139.             $user->setRoles($roles);
  140.             $entityManager->persist($user);
  141.             $entityManager->flush();
  142.             $this->emailVerifier->sendEmailConfirmation('app_accesos_usuario_finalizar'$user,
  143.                     (new TemplatedEmail())
  144.                             ->from(new Address('daiteke@aplicaciones.debamatika.com''Daiteke CRM'))
  145.                             ->to($user->getEmail())
  146.                             ->subject('Finalizar Registro Daiteke')
  147.                             ->htmlTemplate('accesos/usuario/emailRegistro.html.twig')
  148.             );
  149.             $mensaje "usuario.mensajeEnlace";
  150.             $datos $contactoProveedor->getNombre() . " (" $contactoProveedor->getEmail() . ")";
  151.             $datos2 "";
  152.         } else {
  153.             $datos "";
  154.             $datos2 $contactoProveedor->getNombre() . " (" $contactoProveedor->getEmail() . ")";
  155.             if ($contactoProveedor->getUsuario()->isVerified()) {
  156.                 $mensaje "usuario.mensajeRegistrado";
  157.             } else {
  158.                 $mensaje "usuario.mensajePendienteEmail";
  159.             }
  160.         }
  161.         return $this->render('accesos/usuario/registrar.html.twig', [
  162.                     'mensaje' => $mensaje,
  163.                     'datos' => $datos,
  164.                     'datos2' => $datos2,
  165.                     'titulo' => 'usuario.nuevo'
  166.         ]);
  167.     }
  168.     #[Route('/finalizar/registro'name'app_accesos_usuario_finalizar')]
  169.     public function finalizarRegistro(Request $requestUserPasswordHasherInterface $userPasswordHasherUsuarioRepository $usuarioRepository): Response {
  170.         $id $request->get('id');
  171.         if (null === $id) {
  172.             return $this->redirectToRoute('app_login', [], Response::HTTP_SEE_OTHER);
  173.         }
  174.         $user $usuarioRepository->find($id);
  175.         if (!$user->isVerified()) {
  176.             $form $this->createForm(UsuarioType::class, $user);
  177.             $form->handleRequest($request);
  178.             if ($form->isSubmitted() && $form->isValid()) {
  179.                 if ($form->get('password')->getData() == $form->get('passwordrep')->getData()) {
  180.                     $user->setPassword(
  181.                             $userPasswordHasher->hashPassword(
  182.                                     $user,
  183.                                     $form->get('password')->getData()
  184.                             )
  185.                     );
  186.                     $user->setIsVerified(true);
  187.                     $usuarioRepository->add($user);
  188.                     $redireccion = new RedirectResponse('/');
  189.                     $redireccion->setTargetUrl($_SERVER['HTTP_REFERER']);
  190.                     return $redireccion;
  191.                     //   return $this->redirectToRoute('app_accesos_usuario_finalizar', [], Response::HTTP_SEE_OTHER);
  192.                 } else {
  193.                     $this->addFlash('mal''usuario.mensajePasswordDistinta');
  194.                 }
  195.             }
  196.             return $this->render('accesos/usuario/form.html.twig', [
  197.                         'form' => $form->createView(),
  198.                         'mensaje' => "",
  199.             ]);
  200.         } else {
  201.             return $this->render('accesos/usuario/form.html.twig', [
  202.                         'mensaje' => 'usuario.mensajeExito',
  203.             ]);
  204.         }
  205.     }
  206.     //recoge el usuario conectado y cambia la password
  207.     #[Route('/cambiarPassword'name'app_accesos_usuario_cambiar_password'methods: ['POST''GET'])]
  208.     public function cambiarPasswordUsuario(UsuarioRepository $usuarioRepository): Response {
  209.         $user $this->get('security.token_storage')->getToken()->getUser();
  210.         $user->setIsVerified(false);
  211.         $usuarioRepository->add($user);
  212.         $this->emailVerifier->sendEmailConfirmation('app_accesos_usuario_cambiar_password_form'$user,
  213.                 (new TemplatedEmail())
  214.                         ->from(new Address('daiteke@aplicaciones.debamatika.com''Daiteke CRM'))
  215.                         ->to($user->getEmail())
  216.                         ->subject('Restablecer contraseña Daiteke')
  217.                         ->htmlTemplate('accesos/usuario/emailPassword.html.twig'));
  218.         $mensaje 'usuario.mensajePasswordEmail';
  219.         $datos $user->getNombre() . " (" $user->getEmail() . ")";
  220.         return $this->render('accesos/usuario/registrar.html.twig', [
  221.                     'mensaje' => $mensaje,
  222.                     'datos' => $datos,
  223.                     'datos2' => '',
  224.                     'titulo' => 'usuario.cambiarPassword'
  225.         ]);
  226.     }
  227. //formulario para introducir el email y cambiar contraseña, comprueba que el email existe y manda email
  228.     #[Route('/recuperarpassword/'name'app_accesos_usuario_recuperar_password'methods: ['POST''GET'])]
  229.     public function recuperarPassword(Request $requestUsuarioRepository $usuarioRepository): Response {
  230.         $form $this->createForm(\App\Form\Accesos\RecuperarPasswordType::class);
  231.         $form->handleRequest($request);
  232.         if ($form->isSubmitted() && $form->isValid()) {
  233.             $email $form->get('email')->getData();
  234.             $user $usuarioRepository->findOneBy(['email' => $email]);
  235.             if (is_null($user)) {
  236.                 $this->addFlash('mal''usuario.emailError');
  237.             } else {
  238.                 $user->setIsVerified(false);
  239.                 $usuarioRepository->add($user);
  240.                 $this->emailVerifier->sendEmailConfirmation('app_accesos_usuario_cambiar_password_form'$user,
  241.                         (new TemplatedEmail())
  242.                                 ->from(new Address('daiteke@aplicaciones.debamatika.com''Daiteke CRM'))
  243.                                 ->to($user->getEmail())
  244.                                 ->subject('Restablecer contraseña Daiteke')
  245.                                 ->htmlTemplate('accesos/usuario/emailPassword.html.twig'));
  246.                 $this->addFlash('bien''usuario.mensajePasswordEmail');
  247.             }
  248.         }
  249.         return $this->render('accesos/usuario/recuperarPassword.html.twig', [
  250.                     'form' => $form->createView(),
  251.         ]);
  252.     }
  253. //formulario para cambiar contraseña
  254.     #[Route('/cambiarPasswordForm/'name'app_accesos_usuario_cambiar_password_form'methods: ['POST''GET'])]
  255.     public function cambiarPasswordForm(Request $requestUserPasswordHasherInterface $userPasswordHasherUsuarioRepository $usuarioRepository): Response {
  256.         $id $request->get('id');
  257.         if (null === $id) {
  258.             return $this->redirectToRoute('app_login', [], Response::HTTP_SEE_OTHER);
  259.         }
  260.         $user $usuarioRepository->find($id);
  261.         if (!$user->isVerified()) {
  262.             $form $this->createForm(UsuarioType::class, $user);
  263.             $form->handleRequest($request);
  264.             if ($form->isSubmitted() && $form->isValid()) {
  265.                 if ($form->get('password')->getData() == $form->get('passwordrep')->getData()) {
  266.                     $user->setPassword(
  267.                             $userPasswordHasher->hashPassword(
  268.                                     $user,
  269.                                     $form->get('password')->getData()
  270.                             )
  271.                     );
  272.                     $user->setIsVerified(true);
  273.                     $usuarioRepository->add($user);
  274.                     $redireccion = new RedirectResponse('/');
  275.                     $redireccion->setTargetUrl($_SERVER['HTTP_REFERER']);
  276.                     return $redireccion;
  277.                     //   return $this->redirectToRoute('app_accesos_usuario_finalizar', [], Response::HTTP_SEE_OTHER);
  278.                 } else {
  279.                     $this->addFlash('mal''usuario.mensajePasswordDistinta');
  280.                 }
  281.             }
  282.             return $this->render('accesos/usuario/form.html.twig', [
  283.                         'form' => $form->createView(),
  284.                         'mensaje' => "",
  285.             ]);
  286.         } else {
  287.             return $this->render('accesos/usuario/form.html.twig', [
  288.                         'mensaje' => 'usuario.mensajeExitoPassword',
  289.             ]);
  290.         }
  291.     }
  292.     #[Route('/cambiarEstado/{id}'name'app_accesos_usuario_cambiar_estado'methods: ['POST''GET'])]
  293.     public function cambiarEstado(Usuario $usuarioUsuarioRepository $usuarioRepository): Response {
  294.         if ($usuario->getHabilitado()) {
  295.             $usuario->setHabilitado(false);
  296.         } else {
  297.             $usuario->setHabilitado(true);
  298.         }
  299.         $usuarioRepository->add($usuario);
  300.         return new Response();
  301.     }
  302.     #[Route('/setAdmin/{id}'name'app_accesos_usuario_admin'methods: ['POST''GET'])]
  303.     public function setAdmin(Usuario $usuarioUsuarioRepository $usuarioRepository): Response {
  304.         if (in_array('ROLE_ADMIN'$usuario->getRoles(), true)) {
  305.             $roles[] = 'ROLE_EMPLEADA';
  306.             $usuario->setRoles($roles);
  307.         } else {
  308.             $roles = ['ROLE_ADMIN'];
  309.             $usuario->setRoles($roles);
  310.         }
  311.         $usuarioRepository->add($usuario);
  312.         return new Response();
  313.     }
  314.     /* #[Route('/new', name: 'app_accesos_usuario_new', methods: ['GET', 'POST'])]
  315.       public function new(Request $request, UsuarioRepository $usuarioRepository): Response {
  316.       $usuario = new Usuario();
  317.       $form = $this->createForm(UsuarioType::class, $usuario);
  318.       $form->handleRequest($request);
  319.       if ($form->isSubmitted() && $form->isValid()) {
  320.       $usuarioRepository->add($usuario);
  321.       return $this->redirectToRoute('app_accesos_usuario_index', [], Response::HTTP_SEE_OTHER);
  322.       }
  323.       return $this->renderForm('accesos/usuario/new.html.twig', [
  324.       'usuario' => $usuario,
  325.       'form' => $form,
  326.       ]);
  327.       }
  328.       #[Route('/{id}', name: 'app_accesos_usuario_show', methods: ['GET'])]
  329.       public function show(Usuario $usuario): Response {
  330.       return $this->render('accesos/usuario/show.html.twig', [
  331.       'usuario' => $usuario,
  332.       ]);
  333.       }
  334.       #[Route('/{id}/edit', name: 'app_accesos_usuario_edit', methods: ['GET', 'POST'])]
  335.       public function edit(Request $request, Usuario $usuario, UsuarioRepository $usuarioRepository): Response {
  336.       $form = $this->createForm(UsuarioType::class, $usuario);
  337.       $form->handleRequest($request);
  338.       if ($form->isSubmitted() && $form->isValid()) {
  339.       $usuarioRepository->add($usuario);
  340.       return $this->redirectToRoute('app_accesos_usuario_index', [], Response::HTTP_SEE_OTHER);
  341.       }
  342.       return $this->renderForm('accesos/usuario/edit.html.twig', [
  343.       'usuario' => $usuario,
  344.       'form' => $form,
  345.       ]);
  346.       }
  347.       #[Route('/{id}', name: 'app_accesos_usuario_delete', methods: ['POST'])]
  348.       public function delete(Request $request, Usuario $usuario, UsuarioRepository $usuarioRepository): Response {
  349.       if ($this->isCsrfTokenValid('delete' . $usuario->getId(), $request->request->get('_token'))) {
  350.       $usuarioRepository->remove($usuario);
  351.       }
  352.       return $this->redirectToRoute('app_accesos_usuario_index', [], Response::HTTP_SEE_OTHER);
  353.       }
  354.      */
  355. }