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@daiteke.aplicaciones.debamatika.com
  67. ''DaitekeCRM'))
  68.                             ->to($user->getEmail())
  69.                             ->subject('Finalizar Registro Daiteke')
  70.                             ->htmlTemplate('accesos/usuario/emailRegistro.html.twig')
  71.             );
  72.             $mensaje "usuario.mensajeEnlace";
  73.             $datos $empleada->getNombre() . " (" $empleada->getEmail() . ")";
  74.             $datos2 "";
  75.         } else {
  76.             $datos "";
  77.             $datos2 $empleada->getNombre() . " (" $empleada->getEmail() . ")";
  78.             if ($empleada->getUsuario()->isVerified()) {
  79.                 $mensaje "usuario.mensajeRegistrado";
  80.             } else {
  81.                 $mensaje "usuario.mensajePendienteEmail";
  82.             }
  83.         }
  84.         return $this->render('accesos/usuario/registrar.html.twig', [
  85.                     'mensaje' => $mensaje,
  86.                     'datos' => $datos,
  87.                     'datos2' => $datos2,
  88.                     'titulo' => 'usuario.nuevo'
  89.         ]);
  90.     }
  91.     #[Route('/registrarContacto/{id}'name'app_accesos_usuario_registro_contacto'methods: ['POST''GET'])]
  92.     public function registrarContacto(Contacto $contactoEntityManagerInterface $entityManager): Response {
  93.         if (!$contacto->getUsuario()) {
  94.             $user = new Usuario();
  95.             $user->setEmail($contacto->getEmail());
  96.             $user->setNombre($contacto->getNombre());
  97.             $user->setContacto($contacto);
  98.             $user->setPassword("");
  99.             $user->setHabilitado(true);
  100.             $roles[] = 'ROLE_EXTERNO';
  101.             $user->setRoles($roles);
  102.             $entityManager->persist($user);
  103.             $entityManager->flush();
  104.             $this->emailVerifier->sendEmailConfirmation('app_accesos_usuario_finalizar'$user,
  105.                     (new TemplatedEmail())
  106.                             ->from(new Address('daiteke@daiteke.aplicaciones.debamatika.com
  107. ''Daiteke CRM'))
  108.                             ->to($user->getEmail())
  109.                             ->subject('Finalizar Registro Daiteke')
  110.                             ->htmlTemplate('accesos/usuario/emailRegistro.html.twig')
  111.             );
  112.             $mensaje "usuario.mensajeEnlace";
  113.             $datos $contacto->getNombre() . " (" $contacto->getEmail() . ")";
  114.             $datos2 "";
  115.         } else {
  116.             $datos "";
  117.             $datos2 $contacto->getNombre() . " (" $contacto->getEmail() . ")";
  118.             if ($contacto->getUsuario()->isVerified()) {
  119.                 $mensaje "usuario.mensajeRegistrado";
  120.             } else {
  121.                 $mensaje "usuario.mensajePendienteEmail";
  122.             }
  123.         }
  124.         return $this->render('accesos/usuario/registrar.html.twig', [
  125.                     'mensaje' => $mensaje,
  126.                     'datos' => $datos,
  127.                     'datos2' => $datos2,
  128.                     'titulo' => 'usuario.nuevo',
  129.         ]);
  130.     }
  131.     #[Route('/registrarContactoProveedor/{id}'name'app_accesos_usuario_registro_contactoproveedor'methods: ['POST''GET'])]
  132.     public function registrarContactoProveedor(ContactoProveedor $contactoProveedorEntityManagerInterface $entityManager): Response {
  133.         if (!$contactoProveedor->getUsuario()) {
  134.             $user = new Usuario();
  135.             $user->setEmail($contactoProveedor->getEmail());
  136.             $user->setNombre($contactoProveedor->getNombre());
  137.             $user->setContactoProveedor($contactoProveedor);
  138.             $user->setPassword("");
  139.             $user->setHabilitado(true);
  140.             $roles[] = 'ROLE_EXTERNO';
  141.             $user->setRoles($roles);
  142.             $entityManager->persist($user);
  143.             $entityManager->flush();
  144.             $this->emailVerifier->sendEmailConfirmation('app_accesos_usuario_finalizar'$user,
  145.                     (new TemplatedEmail())
  146.                             ->from(new Address('daiteke@daiteke.aplicaciones.debamatika.com
  147. ''Daiteke CRM'))
  148.                             ->to($user->getEmail())
  149.                             ->subject('Finalizar Registro Daiteke')
  150.                             ->htmlTemplate('accesos/usuario/emailRegistro.html.twig')
  151.             );
  152.             $mensaje "usuario.mensajeEnlace";
  153.             $datos $contactoProveedor->getNombre() . " (" $contactoProveedor->getEmail() . ")";
  154.             $datos2 "";
  155.         } else {
  156.             $datos "";
  157.             $datos2 $contactoProveedor->getNombre() . " (" $contactoProveedor->getEmail() . ")";
  158.             if ($contactoProveedor->getUsuario()->isVerified()) {
  159.                 $mensaje "usuario.mensajeRegistrado";
  160.             } else {
  161.                 $mensaje "usuario.mensajePendienteEmail";
  162.             }
  163.         }
  164.         return $this->render('accesos/usuario/registrar.html.twig', [
  165.                     'mensaje' => $mensaje,
  166.                     'datos' => $datos,
  167.                     'datos2' => $datos2,
  168.                     'titulo' => 'usuario.nuevo'
  169.         ]);
  170.     }
  171.     #[Route('/finalizar/registro'name'app_accesos_usuario_finalizar')]
  172.     public function finalizarRegistro(Request $requestUserPasswordHasherInterface $userPasswordHasherUsuarioRepository $usuarioRepository): Response {
  173.         $id $request->get('id');
  174.         if (null === $id) {
  175.             return $this->redirectToRoute('app_login', [], Response::HTTP_SEE_OTHER);
  176.         }
  177.         $user $usuarioRepository->find($id);
  178.         if (!$user->isVerified()) {
  179.             $form $this->createForm(UsuarioType::class, $user);
  180.             $form->handleRequest($request);
  181.             if ($form->isSubmitted() && $form->isValid()) {
  182.                 if ($form->get('password')->getData() == $form->get('passwordrep')->getData()) {
  183.                     $user->setPassword(
  184.                             $userPasswordHasher->hashPassword(
  185.                                     $user,
  186.                                     $form->get('password')->getData()
  187.                             )
  188.                     );
  189.                     $user->setIsVerified(true);
  190.                     $usuarioRepository->add($user);
  191.                     $redireccion = new RedirectResponse('/');
  192.                     $redireccion->setTargetUrl($_SERVER['HTTP_REFERER']);
  193.                     return $redireccion;
  194.                     //   return $this->redirectToRoute('app_accesos_usuario_finalizar', [], Response::HTTP_SEE_OTHER);
  195.                 } else {
  196.                     $this->addFlash('mal''usuario.mensajePasswordDistinta');
  197.                 }
  198.             }
  199.             return $this->render('accesos/usuario/form.html.twig', [
  200.                         'form' => $form->createView(),
  201.                         'mensaje' => "",
  202.             ]);
  203.         } else {
  204.             return $this->render('accesos/usuario/form.html.twig', [
  205.                         'mensaje' => 'usuario.mensajeExito',
  206.             ]);
  207.         }
  208.     }
  209.     //recoge el usuario conectado y cambia la password
  210.     #[Route('/cambiarPassword'name'app_accesos_usuario_cambiar_password'methods: ['POST''GET'])]
  211.     public function cambiarPasswordUsuario(UsuarioRepository $usuarioRepository): Response {
  212.         $user $this->get('security.token_storage')->getToken()->getUser();
  213.         $user->setIsVerified(false);
  214.         $usuarioRepository->add($user);
  215.         $this->emailVerifier->sendEmailConfirmation('app_accesos_usuario_cambiar_password_form'$user,
  216.                 (new TemplatedEmail())
  217.                         ->from(new Address('daiteke@daiteke.aplicaciones.debamatika.com
  218. ''Daiteke CRM'))
  219.                         ->to($user->getEmail())
  220.                         ->subject('Restablecer contraseña Daiteke')
  221.                         ->htmlTemplate('accesos/usuario/emailPassword.html.twig'));
  222.         $mensaje 'usuario.mensajePasswordEmail';
  223.         $datos $user->getNombre() . " (" $user->getEmail() . ")";
  224.         return $this->render('accesos/usuario/registrar.html.twig', [
  225.                     'mensaje' => $mensaje,
  226.                     'datos' => $datos,
  227.                     'datos2' => '',
  228.                     'titulo' => 'usuario.cambiarPassword'
  229.         ]);
  230.     }
  231. //formulario para introducir el email y cambiar contraseña, comprueba que el email existe y manda email
  232.     #[Route('/recuperarpassword/'name'app_accesos_usuario_recuperar_password'methods: ['POST''GET'])]
  233.     public function recuperarPassword(Request $requestUsuarioRepository $usuarioRepository): Response {
  234.         $form $this->createForm(\App\Form\Accesos\RecuperarPasswordType::class);
  235.         $form->handleRequest($request);
  236.         if ($form->isSubmitted() && $form->isValid()) {
  237.             $email $form->get('email')->getData();
  238.             $user $usuarioRepository->findOneBy(['email' => $email]);
  239.             if (is_null($user)) {
  240.                 $this->addFlash('mal''usuario.emailError');
  241.             } else {
  242.                 $user->setIsVerified(false);
  243.                 $usuarioRepository->add($user);
  244.                 $this->emailVerifier->sendEmailConfirmation('app_accesos_usuario_cambiar_password_form'$user,
  245.                         (new TemplatedEmail())
  246.                                 ->from(new Address('daiteke@daiteke.aplicaciones.debamatika.com
  247. ''Daiteke CRM'))
  248.                                 ->to($user->getEmail())
  249.                                 ->subject('Restablecer contraseña Daiteke')
  250.                                 ->htmlTemplate('accesos/usuario/emailPassword.html.twig'));
  251.                 $this->addFlash('bien''usuario.mensajePasswordEmail');
  252.             }
  253.         }
  254.         return $this->render('accesos/usuario/recuperarPassword.html.twig', [
  255.                     'form' => $form->createView(),
  256.         ]);
  257.     }
  258. //formulario para cambiar contraseña
  259.     #[Route('/cambiarPasswordForm/'name'app_accesos_usuario_cambiar_password_form'methods: ['POST''GET'])]
  260.     public function cambiarPasswordForm(Request $requestUserPasswordHasherInterface $userPasswordHasherUsuarioRepository $usuarioRepository): Response {
  261.         $id $request->get('id');
  262.         if (null === $id) {
  263.             return $this->redirectToRoute('app_login', [], Response::HTTP_SEE_OTHER);
  264.         }
  265.         $user $usuarioRepository->find($id);
  266.         if (!$user->isVerified()) {
  267.             $form $this->createForm(UsuarioType::class, $user);
  268.             $form->handleRequest($request);
  269.             if ($form->isSubmitted() && $form->isValid()) {
  270.                 if ($form->get('password')->getData() == $form->get('passwordrep')->getData()) {
  271.                     $user->setPassword(
  272.                             $userPasswordHasher->hashPassword(
  273.                                     $user,
  274.                                     $form->get('password')->getData()
  275.                             )
  276.                     );
  277.                     $user->setIsVerified(true);
  278.                     $usuarioRepository->add($user);
  279.                     $redireccion = new RedirectResponse('/');
  280.                     $redireccion->setTargetUrl($_SERVER['HTTP_REFERER']);
  281.                     return $redireccion;
  282.                     //   return $this->redirectToRoute('app_accesos_usuario_finalizar', [], Response::HTTP_SEE_OTHER);
  283.                 } else {
  284.                     $this->addFlash('mal''usuario.mensajePasswordDistinta');
  285.                 }
  286.             }
  287.             return $this->render('accesos/usuario/form.html.twig', [
  288.                         'form' => $form->createView(),
  289.                         'mensaje' => "",
  290.             ]);
  291.         } else {
  292.             return $this->render('accesos/usuario/form.html.twig', [
  293.                         'mensaje' => 'usuario.mensajeExitoPassword',
  294.             ]);
  295.         }
  296.     }
  297.     #[Route('/cambiarEstado/{id}'name'app_accesos_usuario_cambiar_estado'methods: ['POST''GET'])]
  298.     public function cambiarEstado(Usuario $usuarioUsuarioRepository $usuarioRepository): Response {
  299.         if ($usuario->getHabilitado()) {
  300.             $usuario->setHabilitado(false);
  301.         } else {
  302.             $usuario->setHabilitado(true);
  303.         }
  304.         $usuarioRepository->add($usuario);
  305.         return new Response();
  306.     }
  307.     #[Route('/setAdmin/{id}'name'app_accesos_usuario_admin'methods: ['POST''GET'])]
  308.     public function setAdmin(Usuario $usuarioUsuarioRepository $usuarioRepository): Response {
  309.         if (in_array('ROLE_ADMIN'$usuario->getRoles(), true)) {
  310.             $roles[] = 'ROLE_EMPLEADA';
  311.             $usuario->setRoles($roles);
  312.         } else {
  313.             $roles = ['ROLE_ADMIN'];
  314.             $usuario->setRoles($roles);
  315.         }
  316.         $usuarioRepository->add($usuario);
  317.         return new Response();
  318.     }
  319.     /* #[Route('/new', name: 'app_accesos_usuario_new', methods: ['GET', 'POST'])]
  320.       public function new(Request $request, UsuarioRepository $usuarioRepository): Response {
  321.       $usuario = new Usuario();
  322.       $form = $this->createForm(UsuarioType::class, $usuario);
  323.       $form->handleRequest($request);
  324.       if ($form->isSubmitted() && $form->isValid()) {
  325.       $usuarioRepository->add($usuario);
  326.       return $this->redirectToRoute('app_accesos_usuario_index', [], Response::HTTP_SEE_OTHER);
  327.       }
  328.       return $this->renderForm('accesos/usuario/new.html.twig', [
  329.       'usuario' => $usuario,
  330.       'form' => $form,
  331.       ]);
  332.       }
  333.       #[Route('/{id}', name: 'app_accesos_usuario_show', methods: ['GET'])]
  334.       public function show(Usuario $usuario): Response {
  335.       return $this->render('accesos/usuario/show.html.twig', [
  336.       'usuario' => $usuario,
  337.       ]);
  338.       }
  339.       #[Route('/{id}/edit', name: 'app_accesos_usuario_edit', methods: ['GET', 'POST'])]
  340.       public function edit(Request $request, Usuario $usuario, UsuarioRepository $usuarioRepository): Response {
  341.       $form = $this->createForm(UsuarioType::class, $usuario);
  342.       $form->handleRequest($request);
  343.       if ($form->isSubmitted() && $form->isValid()) {
  344.       $usuarioRepository->add($usuario);
  345.       return $this->redirectToRoute('app_accesos_usuario_index', [], Response::HTTP_SEE_OTHER);
  346.       }
  347.       return $this->renderForm('accesos/usuario/edit.html.twig', [
  348.       'usuario' => $usuario,
  349.       'form' => $form,
  350.       ]);
  351.       }
  352.       #[Route('/{id}', name: 'app_accesos_usuario_delete', methods: ['POST'])]
  353.       public function delete(Request $request, Usuario $usuario, UsuarioRepository $usuarioRepository): Response {
  354.       if ($this->isCsrfTokenValid('delete' . $usuario->getId(), $request->request->get('_token'))) {
  355.       $usuarioRepository->remove($usuario);
  356.       }
  357.       return $this->redirectToRoute('app_accesos_usuario_index', [], Response::HTTP_SEE_OTHER);
  358.       }
  359.      */
  360. }