src/Controller/UsuarioController.php line 526

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Role;
  4. use App\Entity\Unidad;
  5. use App\Entity\Usuario;
  6. use App\Form\ChangePasswordFormType;
  7. use App\Form\SolicitudAccesoType;
  8. use App\Security\EmailVerifier;
  9. use Doctrine\DBAL\Exception;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Doctrine\ORM\EntityRepository;
  12. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  13. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  14. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  15. use Symfony\Component\Asset\Packages;
  16. use Symfony\Component\HttpFoundation\JsonResponse;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\HttpFoundation\Response;
  19. use Symfony\Component\Mime\Address;
  20. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  23. #[Route('/usuario')]
  24. class UsuarioController extends AbstractController
  25. {
  26.     public EntityManagerInterface $entityManager;
  27.     public EmailVerifier $emailVerifier;
  28.     /**
  29.      * @param EntityManagerInterface $entityManager
  30.      * @param EmailVerifier $emailVerifier
  31.      */
  32.     public function __construct(EntityManagerInterface $entityManagerEmailVerifier $emailVerifier)
  33.     {
  34.         $this->entityManager $entityManager;
  35.         $this->emailVerifier $emailVerifier;
  36.     }
  37.     #[Route('/'name'usuario_index')]
  38.     public function index(Request $request): Response
  39.     {
  40.         /** @var Usuario $user */
  41.         $user $this->getUser();
  42.         $perfil $request->getSession()->get('perfil');
  43.         $nivel $perfil[1]["nivel"];
  44.         if ($nivel == 0) {
  45.             $this->addFlash('danger''El acceso al módulo de "Usuarios" está restringido.');
  46.             return $this->redirectToRoute('homepage');
  47.         }
  48.         $data = [];
  49.         if ($user->getRol()->getIdRol() == 1) {
  50.             $form $this->createFormBuilder()
  51.                 ->add('unidad'EntityType::class, [
  52.                     'class' => Unidad::class,
  53.                     'attr' => ['class' => 'form-control'],
  54.                     'placeholder' => 'Todo',
  55.                     'query_builder' => function (EntityRepository $er) {
  56.                         return $er->createQueryBuilder('u')
  57.                             ->orderBy('u.nombre''ASC')
  58.                             ;
  59.                     }
  60.                 ])
  61.                 ->add('rol'EntityType::class, [
  62.                     'class' => Role::class,
  63.                     'attr' => ['class' => 'form-control'],
  64.                     'placeholder' => 'Todo',
  65.                     'query_builder' => function (EntityRepository $er) {
  66.                         return $er->createQueryBuilder('r')
  67.                             ->orderBy('r.idRol''ASC')
  68.                             ;
  69.                     }
  70.                 ])
  71.                 ->getForm();
  72.             $form->handleRequest($request);
  73.             $users $this->entityManager->getRepository(Usuario::class)->findAll();
  74.             if ($request->isMethod('POST')) {
  75.                 if ($form['unidad']->getData() == null && $form['rol']->getData() == null){
  76.                     $users $this->entityManager->getRepository(Usuario::class)->findAll();
  77.                 } elseif($form['unidad']->getData() != null && $form['rol']->getData() == null) {
  78.                     $users $this->entityManager->getRepository(Usuario::class)->findBy([
  79.                         'unidad' => $form['unidad']->getData()
  80.                     ]);
  81.                 } elseif ($form['unidad']->getData() == null && $form['rol']->getData() != null) {
  82.                     $users $this->entityManager->getRepository(Usuario::class)->findBy([
  83.                         'rol' => $form['rol']->getData()
  84.                     ]);
  85.                 } else {
  86.                     $users $this->entityManager->getRepository(Usuario::class)->findBy([
  87.                         'rol' => $form['rol']->getData(),
  88.                         'unidad' => $form['unidad']->getData()
  89.                     ]);
  90.                 }
  91.                 foreach ($users as $u){
  92.                     $urlEditar $this->generateUrl('usuario_editar', ['id' => $u->getIdUsu()]);
  93.                     $urlContrasena $this->generateUrl('usuario_contrasena', ['idUsu' => $u->getIdUsu()]);
  94.                     $urlActivar $this->generateUrl('usuario_activar', ['idUsu' => $u->getIdUsu()]);
  95.                     $urlRechazar $this->generateUrl('usuario_rechazar', ['idUsu' => $u->getIdUsu()]);
  96.                     $urlSuspender $this->generateUrl('usuario_suspender', ['idUsu'=> $u->getIdUsu()]);
  97.                     $urlEliminar $this->generateUrl('usuario_eliminar', ['idUsu'=> $u->getIdUsu()]);
  98.                     $data[] = [
  99.                         'id' => $u->getIdUsu(),
  100.                         'nombre' => $u->getNombre() . " " $u->getPapellido() . " " $u->getSapellido(),
  101.                         'correo' => $u->getCorreo(),
  102.                         'rol' => $u->getRol()->getNombre(),
  103.                         'unidad' => $u->getUnidad()->getNombre(),
  104.                         'estatus' => $u->getEstatus(),
  105.                         'urlEditar' => $urlEditar,
  106.                         'urlContrasena' => $urlContrasena,
  107.                         'urlActivar' => $urlActivar,
  108.                         'urlRechazar' => $urlRechazar,
  109.                         'urlSuspender' => $urlSuspender,
  110.                         'urlEliminar' => $urlEliminar
  111.                     ];
  112.                 }
  113.                 return new JsonResponse($dataResponse::HTTP_OK);
  114.             }
  115.         }
  116.         if ($user->getRol()->getIdRol() == 2) {
  117.             $form $this->createFormBuilder()
  118.                 ->add('unidad'EntityType::class, [
  119.                     'class' => Unidad::class,
  120.                     'attr' => ['class' => 'form-control'],
  121.                     'placeholder' => 'Todo',
  122.                     'query_builder' => function (EntityRepository $er) {
  123.                         return $er->createQueryBuilder('u')
  124.                             ->orderBy('u.nombre''ASC')
  125.                             ;
  126.                     }
  127.                 ])
  128.                 ->add('rol'EntityType::class, [
  129.                     'class' => Role::class,
  130.                     'attr' => ['class' => 'form-control'],
  131.                     'query_builder' => function (EntityRepository $er) {
  132.                         return $er->createQueryBuilder('r')
  133.                             ->where('r.idRol = 3')
  134.                             ;
  135.                     }
  136.                 ])
  137.                 ->getForm();
  138.             $form->handleRequest($request);
  139.             $users $this->entityManager->getRepository(Usuario::class)->findBy([
  140.                 'rol' => 3
  141.             ]);
  142.             if ($request->isMethod('POST')) {
  143.                 if ($form['unidad']->getData() == null){
  144.                     $users $this->entityManager->getRepository(Usuario::class)->findBy([
  145.                         'rol' => $form['rol']->getData()
  146.                     ]);
  147.                 } else {
  148.                     $users $this->entityManager->getRepository(Usuario::class)->findBy([
  149.                         'unidad' => $form['unidad']->getData(),
  150.                         'rol' => $form['rol']->getData()
  151.                     ]);
  152.                 }
  153.                 foreach ($users as $u){
  154.                     $urlEditar $this->generateUrl('usuario_editar', ['id' => $u->getIdUsu()], UrlGeneratorInterface::ABSOLUTE_URL);
  155.                     $urlContrasena $this->generateUrl('usuario_contrasena', ['idUsu' => $u->getIdUsu()], UrlGeneratorInterface::ABSOLUTE_URL);
  156.                     $urlActivar $this->generateUrl('usuario_activar', ['idUsu' => $u->getIdUsu()], UrlGeneratorInterface::ABSOLUTE_URL);
  157.                     $urlRechazar $this->generateUrl('usuario_rechazar', ['idUsu' => $u->getIdUsu()], UrlGeneratorInterface::ABSOLUTE_URL);
  158.                     $urlSuspender $this->generateUrl('usuario_suspender', ['idUsu'=> $u->getIdUsu()], UrlGeneratorInterface::ABSOLUTE_URL);
  159.                     $urlEliminar $this->generateUrl('usuario_eliminar', ['idUsu'=> $u->getIdUsu()], UrlGeneratorInterface::ABSOLUTE_URL);
  160.                     $data[] = [
  161.                         'id' => $u->getIdUsu(),
  162.                         'nombre' => $u->getNombre() . " " $u->getPapellido() . " " $u->getSapellido(),
  163.                         'correo' => $u->getCorreo(),
  164.                         'rol' => $u->getRol()->getNombre(),
  165.                         'unidad' => $u->getUnidad()->getNombre(),
  166.                         'estatus' => $u->getEstatus(),
  167.                         'urlEditar' => $urlEditar,
  168.                         'urlContrasena' => $urlContrasena,
  169.                         'urlActivar' => $urlActivar,
  170.                         'urlRechazar' => $urlRechazar,
  171.                         'urlSuspender' => $urlSuspender,
  172.                         'urlEliminar' => $urlEliminar
  173.                     ];
  174.                 }
  175.                 return new JsonResponse($dataResponse::HTTP_OK);
  176.             }
  177.         }
  178.         if ($user->getRol()->getIdRol() == 3) {
  179.             $form $this->createFormBuilder()
  180.                 ->add('unidad'EntityType::class, [
  181.                     'class' => Unidad::class,
  182.                     'attr' => ['class' => 'form-control'],
  183.                     'query_builder' => function (EntityRepository $er) {
  184.                         return $er->createQueryBuilder('u')
  185.                             ->orderBy('u.nombre''ASC')
  186.                             ;
  187.                     }
  188.                 ])
  189.                 ->add('rol'EntityType::class, [
  190.                     'class' => Role::class,
  191.                     'attr' => ['class' => 'form-control'],
  192.                     'query_builder' => function (EntityRepository $er) {
  193.                         return $er->createQueryBuilder('r')
  194.                             ->where('r.idRol = 3')
  195.                             ;
  196.                     }
  197.                 ])
  198.                 ->getForm();
  199.             $form->handleRequest($request);
  200.             $users $this->entityManager->getRepository(Usuario::class)->findBy([
  201.                 'unidad' => $user->getUnidad()->getIdUni(),
  202.                 'rol' => [34]
  203.             ]);
  204.             if ($request->isMethod('POST')) {
  205.                 if (empty($form['unidad']->getData()) && empty($form['rol']->getData())) {
  206.                     $users $this->entityManager->getRepository(Usuario::class)->findAll();
  207.                 } else {
  208.                     $users $this->entityManager->getRepository(Usuario::class)->findBy([
  209.                         'unidad' => $form['unidad']->getData(),
  210.                         'rol' => $form['rol']->getData()
  211.                     ]);
  212.                 }
  213.                 foreach ($users as $u){
  214.                     $urlEditar $this->generateUrl('usuario_editar', ['id' => $u->getIdUsu()], UrlGeneratorInterface::ABSOLUTE_URL);
  215.                     $urlContrasena $this->generateUrl('usuario_contrasena', ['idUsu' => $u->getIdUsu()], UrlGeneratorInterface::ABSOLUTE_URL);
  216.                     $urlActivar $this->generateUrl('usuario_activar', ['idUsu' => $u->getIdUsu()], UrlGeneratorInterface::ABSOLUTE_URL);
  217.                     $urlRechazar $this->generateUrl('usuario_rechazar', ['idUsu' => $u->getIdUsu()], UrlGeneratorInterface::ABSOLUTE_URL);
  218.                     $urlSuspender $this->generateUrl('usuario_suspender', ['idUsu'=> $u->getIdUsu()], UrlGeneratorInterface::ABSOLUTE_URL);
  219.                     $urlEliminar $this->generateUrl('usuario_eliminar', ['idUsu'=> $u->getIdUsu()], UrlGeneratorInterface::ABSOLUTE_URL);
  220.                     $data[] = [
  221.                         'id' => $u->getIdUsu(),
  222.                         'nombre' => $u->getNombre() . " " $u->getPapellido() . " " $u->getSapellido(),
  223.                         'correo' => $u->getCorreo(),
  224.                         'rol' => $u->getRol()->getNombre(),
  225.                         'unidad' => $u->getUnidad()->getNombre(),
  226.                         'estatus' => $u->getEstatus(),
  227.                         'urlEditar' => $urlEditar,
  228.                         'urlContrasena' => $urlContrasena,
  229.                         'urlActivar' => $urlActivar,
  230.                         'urlRechazar' => $urlRechazar,
  231.                         'urlSuspender' => $urlSuspender,
  232.                         'urlEliminar' => $urlEliminar
  233.                     ];
  234.                 }
  235.                 return new JsonResponse($dataResponse::HTTP_OK);
  236.             }
  237.         }
  238.         return $this->render('usuario/index.html.twig', [
  239.             'usuarios' => $users,
  240.             'form' => $form->createView(),
  241.             'data' => $data
  242.         ]);
  243.     }
  244.     /**
  245.      * @Route("/edit/{id}", name="usuario_editar", methods={"GET", "POST"})
  246.      * @param EntityManagerInterface $emi
  247.      * @param Request $request
  248.      * @param Usuario $usuario
  249.      * @param Packages $packages
  250.      * @return Response | JsonResponse
  251.      */
  252.     public function editar(EntityManagerInterface $emiRequest $requestUsuario $usuarioPackages $packages): Response
  253.     {
  254.         /** @var Usuario $user */
  255.         $user $this->getUser();
  256.         $perfil $request->getSession()->get('perfil');
  257.         $nivel $perfil[1]["nivel"];
  258.         if ($nivel == 0) {
  259.             $this->addFlash('danger''El acceso al módulo de "Usuarios" está restringido.');
  260.             return $this->redirectToRoute('homepage');
  261.         }
  262.         if ($user->getRol()->getIdRol() == 1){
  263.             $form $this->createForm(SolicitudAccesoType::class, $usuario, array('data_info' => 1));
  264.         } elseif ($user->getRol()->getIdRol() == 2) {
  265.             $form $this->createForm(SolicitudAccesoType::class, $usuario, array('data_info' => 2));
  266.         } else {
  267.             $form $this->createForm(SolicitudAccesoType::class, $usuario, array('data_info' => 3));
  268.         }
  269.         if($user->getRol()->getIdRol() == 3){
  270.             $form->remove('nombre');
  271.             $form->remove('papellido');
  272.             $form->remove('sapellido');
  273.             $form->remove('correo');
  274.             $form->remove('contrasena');
  275.             $form->remove('unidad');
  276.             $form->remove('estatus');
  277.         } else {
  278.             $form->remove("contrasena");
  279.         }
  280.         $form->handleRequest($request);
  281.         if ($form->isSubmitted() && $form->isValid()) {
  282.             $emi->persist($usuario);
  283.             $emi->flush();
  284.             # Se genera la url del documento subido
  285.             $link_activar $this->generateUrl('usuario_activar', ['idUsu' => $usuario->getIdUsu()], UrlGeneratorInterface::ABSOLUTE_URL);
  286.             $data = array(
  287.                 'id' => $usuario->getIdUsu(),
  288.                 'nombre' => $usuario->getNombre() . " " $usuario->getPapellido() . " " $usuario->getSapellido(),
  289.                 'correo' => $usuario->getCorreo(),
  290.                 'unidad' => $usuario->getUnidad()->getNombre(),
  291.                 'rol' => "",
  292.                 'estatus' => $usuario->getEstatus(),
  293.                 'link_activar' => $link_activar,
  294.                 'mensaje' => 'Información actualizada.'
  295.             );
  296.             if (!empty($usuario->getRol())){
  297.                 $data['rol'] = $usuario->getRol()->getNombre();
  298.             }
  299.             return new JsonResponse($data);
  300.         }
  301.         if ($form->isSubmitted() && !$form->isValid()) {
  302.             $view $this->renderView('usuario/modificar_usuario.html.twig', [
  303.                 'form' => $form->createView(),
  304.             ]);
  305.             $response = new JsonResponse(['form' => $view]);
  306.             $response->setStatusCode(Response::HTTP_BAD_REQUEST);
  307.             return $response;
  308.         }
  309.         $data = [
  310.             'id' => $usuario->getIdUsu(),
  311.             'nombre' => $usuario->getNombre(),
  312.             'papellido' => $usuario->getPapellido(),
  313.             'sapellido' => $usuario->getSapellido(),
  314.             'correo' => $usuario->getCorreo(),
  315.             'unidad' => $usuario->getUnidad()->getNombre(),
  316.             'estatus' => $usuario->getEstatus()
  317.         ];
  318.         return $this->render('usuario/modificar_usuario.html.twig', [
  319.             'form' => $form->createView(),
  320.             'data' => $data
  321.         ]);
  322.     }
  323.     /*
  324.      * @Route("/estatus/{idUsu}/{estatus}", name="usuario_estatus", methods={"GET", "POST"})
  325.      * @param EntityManagerInterface $entityManager
  326.      * @param Request $request
  327.      * @ParamConverter("idUsu", class="App\Entity\Usuario")
  328.      * @return Response | JsonResponse
  329.      *
  330.     public function cambiarEstatus(EntityManagerInterface $entityManager, Request $request, Usuario $usuario): Response
  331.     {
  332.         $u = $entityManager->getRepository(Usuario::class)->findOneBy(['idUsu' => $request->get('idUsu')]);
  333.         #if ($request->get('estatus') == 0){
  334.             $u->setEstatus('Suspendido');
  335.             $entityManager->persist($u);
  336.             $entityManager->flush();
  337.         #} else {
  338.         #    $usuario->setEstatus('Rechazado');
  339.         #    $entityManager->persist($u);
  340.         #    $entityManager->flush();
  341.         #}
  342.         return new JsonResponse([
  343.             'mensaje' => 'El usuario ' . $u->getNombre() . ' ' . $u->getPapellido() . ' ha cambiado de estatus a ' . $u->getEstatus() . '.',
  344.             'id' => $u->getIdUsu(),
  345.             'accion' => $request->get('estatus'),
  346.             'estatus' => $u->getEstatus()
  347.         ]);
  348.     }*/
  349.     /**
  350.      * @Route("/rechazar/{idUsu}", name="usuario_rechazar", methods={"GET", "POST"})
  351.      * @param EntityManagerInterface $entityManager
  352.      * @param Request $request
  353.      * @param Usuario $usuario
  354.      * @return Response | JsonResponse
  355.      */
  356.     public function rechazar(EntityManagerInterface $entityManagerRequest $requestUsuario $usuario): Response
  357.     {
  358.         $usuario->setEstatus('Rechazado');
  359.         $entityManager->persist($usuario);
  360.         $entityManager->flush();
  361.         return new JsonResponse([
  362.             'mensaje' => 'El usuario ' $usuario->getNombre() . ' ' $usuario->getPapellido() . ' ha cambiado de estatus a ' $usuario->getEstatus() . '.',
  363.             'id' => $usuario->getIdUsu(),
  364.             'estatus' => $usuario->getEstatus()
  365.         ]);
  366.     }
  367.     /**
  368.      * @Route("/suspender/{idUsu}", name="usuario_suspender", methods={"GET", "POST"})
  369.      * @param EntityManagerInterface $entityManager
  370.      * @param Request $request
  371.      * @param Usuario $usuario
  372.      * @return Response | JsonResponse
  373.      */
  374.     public function suspender(EntityManagerInterface $entityManagerRequest $requestUsuario $usuario): Response
  375.     {
  376.         $usuario->setEstatus('Suspendido');
  377.         $entityManager->persist($usuario);
  378.         $entityManager->flush();
  379.         return new JsonResponse([
  380.             'mensaje' => 'El usuario ' $usuario->getNombre() . ' ' $usuario->getPapellido() . ' ha cambiado de estatus a ' $usuario->getEstatus() . '.',
  381.             'id' => $usuario->getIdUsu(),
  382.             'estatus' => $usuario->getEstatus()
  383.         ]);
  384.     }
  385.     /**
  386.      * @Route("/eliminar/{idUsu}", name="usuario_eliminar", methods={"GET", "POST"})
  387.      * @param EntityManagerInterface $emi
  388.      * @param Request $request
  389.      * @param Usuario $usuario
  390.      * @return Response | JsonResponse
  391.      * @throws Exception
  392.      */
  393.     public function eliminar(EntityManagerInterface $emiRequest $requestUsuario $usuario): Response
  394.     {
  395.         $perfil $request->getSession()->get('perfil');
  396.         $nivel $perfil[3]["nivel"];
  397.         if ($nivel == 0) {
  398.             $this->addFlash('danger''El acceso al módulo de "Usuarios" está restringido.');
  399.             return $this->redirectToRoute('homepage');
  400.         }
  401.         $conn $emi->getConnection();
  402.         # Se inicia la transacción
  403.         $conn->setAutoCommit(false);
  404.         $conn->beginTransaction();
  405.         $deleteQuery "DELETE FROM usuario WHERE usuario.id_usu = :usuario";
  406.         $statement $conn->prepare($deleteQuery);
  407.         $statement->bindValue('usuario'$usuario->getIdUsu());
  408.         $statement->executeQuery();
  409.         $conn->commit();
  410.         $data = [
  411.             'id' => $usuario->getIdUsu(),
  412.             'mensaje' => 'El usuario ' $usuario->getNombre() . " " $usuario->getPapellido() . " ha sido removido"
  413.         ];
  414.         return new JsonResponse($data);
  415.     }
  416.     /**
  417.      * @Route("/contrasena/{idUsu}", name="usuario_contrasena", methods={"GET", "POST"})
  418.      * @param Request $request
  419.      * @param EntityManagerInterface $entityManager
  420.      * @param Usuario $usuario
  421.      * @param UserPasswordHasherInterface $userPasswordHasher
  422.      * @return Response | JsonResponse
  423.      */
  424.     public function cambioContrasena(Request $requestEntityManagerInterface $entityManagerUsuario $usuarioUserPasswordHasherInterface $userPasswordHasher): Response
  425.     {
  426.         $perfil $request->getSession()->get('perfil');
  427.         $nivel $perfil[3]["nivel"];
  428.         if ($nivel == 0) {
  429.             $this->addFlash('danger''El acceso al módulo de "Usuarios" está restringido.');
  430.             return $this->redirectToRoute('homepage');
  431.         }
  432.         $form $this->createForm(SolicitudAccesoType::class);
  433.         $form->remove("nombre");
  434.         $form->remove("papellido");
  435.         $form->remove("sapellido");
  436.         $form->remove("correo");
  437.         $form->remove("unidad");
  438.         $form->remove("rol");
  439.         $form->remove("estatus");
  440.         $form->handleRequest($request);
  441.         if ($form->isSubmitted() && $form->isValid()) {
  442.             $encodedPassword $userPasswordHasher->hashPassword(
  443.                 $usuario,
  444.                 $form->get('contrasena')->getData()
  445.             );
  446.             $usuario->setContrasena($encodedPassword);
  447.             $entityManager->persist($usuario);
  448.             $entityManager->flush();
  449.             return new JsonResponse(array('mensaje' => 'Se cambio la contraseña.'));
  450.         }
  451.         if ($form->isSubmitted() && !$form->isValid()) {
  452.             $view $this->renderView('usuario/contrasena.html.twig', [
  453.                 'form' => $form->createView(),
  454.                 'nombre' => $usuario->getNombre() . " " $usuario->getPapellido()
  455.             ]);
  456.             $response = new JsonResponse(['form' => $view]);
  457.             $response->setStatusCode(Response::HTTP_BAD_REQUEST);
  458.             return $response;
  459.         }
  460.         return $this->render('usuario/contrasena.html.twig', [
  461.             'form' => $form->createView(),
  462.             'nombre' => $usuario->getNombre() . " " $usuario->getPapellido()
  463.         ]);
  464.     }
  465.     /**
  466.      * @Route("/activar/{idUsu}", name="usuario_activar", methods={"GET", "POST"})
  467.      * @param Request $request
  468.      * @param EntityManagerInterface $entityManager
  469.      * @param Usuario $usuario
  470.      * @param UserPasswordHasherInterface $userPasswordHasher
  471.      * @return Response | JsonResponse
  472.      */
  473.     public function activar(Request $requestEntityManagerInterface $entityManagerUsuario $usuarioUserPasswordHasherInterface $userPasswordHasher): Response
  474.     {
  475.         $data = [
  476.             'password' => '',
  477.             'correo' => ''
  478.         ];
  479.         $data['password'] = $this->randomPassword();
  480.         $data['correo'] = $usuario->getCorreo();
  481.         // Encode(hash) the plain password, and set it.
  482.         $encodedPassword $userPasswordHasher->hashPassword(
  483.             $usuario,
  484.             $data['password']
  485.         );
  486.         $usuario->setContrasena($encodedPassword);
  487.         $usuario->setEstatus('Aceptado');
  488.         $entityManager->flush();
  489.         // generate a signed url and email it to the user
  490.         $this->emailVerifier->sendEmailConfirmation('app_verify_email'$usuario,
  491.             (new TemplatedEmail())
  492.                 ->from(new Address('no-reply-ti@conalepmex.edu.mx''Sistema de Gestión de Mantenimiento para Equipos de Computo'))
  493.                 ->to($data['correo'])
  494.                 ->subject('Solicitud de acceso aprobada')
  495.                 ->context(['data' => $data])
  496.                 ->htmlTemplate('usuario/confirmation_email.html.twig')
  497.         );
  498.         // do anything else you need here, like send an email
  499.         $data = array(
  500.             'id' => $usuario->getIdUsu(),
  501.             'nombre' => $usuario->getNombre() . " " $usuario->getPapellido() . " " $usuario->getSapellido(),
  502.             'correo' => $usuario->getCorreo(),
  503.             'unidad' => $usuario->getUnidad()->getNombre(),
  504.             'rol' => "",
  505.             'estatus' => $usuario->getEstatus(),
  506.             'mensaje' => 'Se activó y notificó al usuario con el correo: ' $usuario->getCorreo()
  507.         );
  508.         if (!empty($usuario->getRol())){
  509.             $data['rol'] = $usuario->getRol()->getNombre();
  510.         }
  511.         return new JsonResponse($data);
  512.     }
  513.     /**
  514.      * Validates and process the reset URL that the user clicked in their email.
  515.      *
  516.      * @Route("/reset", name="app_cambiar_contrasena")
  517.      */
  518.     public function reset(Request $requestUserPasswordHasherInterface $userPasswordHasherEntityManagerInterface $em): Response
  519.     {
  520.         /** @var Usuario $user */
  521.         $user $this->getUser();
  522.         $form $this->createForm(ChangePasswordFormType::class);
  523.         $form->handleRequest($request);
  524.         if ($form->isSubmitted() && $form->isValid()) {
  525.             // Encode(hash) the plain password, and set it.
  526.             $encodedPassword $userPasswordHasher->hashPassword(
  527.                 $user,
  528.                 $form->get('plainPassword')->getData()
  529.             );
  530.             $user->setContrasena($encodedPassword);
  531.             $em->flush();
  532.             $this->addFlash('success''Se ha actualizado la contraseña correctamente.');
  533.             return $this->redirectToRoute('homepage');
  534.         }
  535.         return $this->render('usuario/reset.html.twig', [
  536.             'resetForm' => $form->createView(),
  537.         ]);
  538.     }
  539.     /**
  540.      * Acción para generar contraseñas aleatorias
  541.      *
  542.      * @return string
  543.      */
  544.     protected function randomPassword(): string
  545.     {
  546.         $alphabet "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ0123456789";
  547.         $pass = array(); //remember to declare $pass as an array
  548.         $alphaLength strlen($alphabet) - 1//put the length -1 in cache
  549.         for ($i 0$i 8$i++) {
  550.             $n rand(0$alphaLength);
  551.             $pass[] = $alphabet[$n];
  552.         }
  553.         return implode($pass); //turn the array into a string
  554.     }   
  555. }