src/Controller/PortalAspiranteController.php line 49

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\SsoMatricula;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. use App\Entity\Registro\RegistroAspirante;
  8. use App\Entity\SsoPersona;
  9. use App\Entity\SsoUser;
  10. use App\Form\RegistroAspiranteType;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use App\Service\PortalAspiranteService;
  13. use App\Entity\Email\ConfirmaCorreo;
  14. use App\Repository\Email\ConfirmaCorreoRepository;
  15. use App\Form\PersonaType;
  16. use Doctrine\ORM\ORMException;
  17. use App\Service\PortalConsejoService;
  18. use App\Entity\Auditoria\Registro;
  19. use App\Entity\SsoUsuarioSistema;
  20. use App\Repository\SsoRolSistemaRepository;
  21. use App\Service\AuditoriaService;
  22. use Symfony\Component\Workflow\Registry;
  23. use App\Service\FileService;
  24. use Symfony\Component\Validator\Validator\ValidatorInterface;
  25. #[Route('/portal/aspirante')]
  26. class PortalAspiranteController extends AbstractController
  27. {
  28.     #[Route('/'name'portal_aspirante')]
  29.     public function index(): Response
  30.     {
  31.         // Tomo los sistemas asignados al usuario y que se encuentren activos
  32.         $sistemas $this->getUser()->getSsoUsuarioSistemas()->map(
  33.             function ($relacion) {
  34.                 return $relacion->getSistema();
  35.             })->filter(
  36.                 function ($sistema) {
  37.                     return $sistema->getClienteOauth2()->isActive();
  38.                 });
  39.         return $this->render('portal_aspirante/index.html.twig', [
  40.             'sistemas' => $sistemas,
  41.         ]);
  42.     }
  43.     #[Route('/registry'name'aspirante_registry'methods: ['GET','POST'])]
  44.     public function registry(
  45.         Request $request
  46.         PortalAspiranteService $portalService,
  47.         AuditoriaService $auditoriaService,
  48.     ): Response
  49.     {
  50.         $registroAspirante $portalService->inicializarRegistro();
  51.         $form $this->createForm(RegistroAspiranteType::class, $registroAspirante);
  52.         $form->handleRequest($request);
  53.         if ($form->isSubmitted() && $form->isValid()) {
  54.             $portalService->encriptarContraseña($registroAspirante);
  55.             $portalService->procesarAdjuntos($registroAspirante$form);
  56.             $portalService->correoConfirmacion($registroAspirante$request);
  57.             $auditoriaService->auditarEvento(
  58.                 Registro::EVENTO_REGISTRO
  59.                 nullnull
  60.                 $registroAspirante
  61.             );
  62.             $request->getSession()->getFlashBag()->add(
  63.                 'notice'// notice / warning / error
  64.                 "<h4>Confirmación de Email</h4>
  65.                 <p>Estimado/a " $registroAspirante->getNombres() . " se ha enviado  un correo a 
  66.                 <b>" $registroAspirante->getEmailPersonal() . "</b> que contiene un enlace al que deberás ingresar 
  67.                 para validar tu correo electrónico.</p>"
  68.             );
  69.             return $this->redirectToRoute('app_login', [], Response::HTTP_SEE_OTHER);
  70.         }
  71.         return $this->renderForm('security/registry.html.twig', [
  72.             'registroAspirante' => $registroAspirante,
  73.             'form' => $form,
  74.         ]);
  75.     }
  76.     #[Route('/descarga/reglamento'name'aspirante_descarga_reglamento'methods: ['POST'])]
  77.     public function descargaReglamento(
  78.         // Request $request, 
  79.         PortalAspiranteService $portalService,
  80.         // AuditoriaService $auditoriaService,
  81.     ): Response
  82.     {
  83.         $registroAspirante $portalService->inicializarRegistro();
  84.         $registroAspirante->marcarReglamentoDescargado();
  85.         $form $this->createForm(RegistroAspiranteType::class, $registroAspirante);
  86.         
  87.         return $this->renderForm('security/registry.html.twig', [
  88.             'registroAspirante' => $registroAspirante,
  89.             'form' => $form,
  90.         ]);
  91.     }
  92.     #[Route('/registro/{mail}/{token}'name'app_registro'methods: ['GET'])]
  93.     public function registro(
  94.         Request $request,
  95.         String $mail,
  96.         String $token,
  97.         ConfirmaCorreoRepository $confirmaCorreoRepository,
  98.         PortalAspiranteService $portalService,
  99.         AuditoriaService $auditoriaService,
  100.         ValidatorInterface $validator
  101.     ): Response 
  102.     {
  103.         $confirmaCorreo $confirmaCorreoRepository
  104.             ->findOneBy([
  105.                 'correoConfirma' => $mail,
  106.                 'token' => $token,
  107.                 'tipoCorreo' => ConfirmaCorreo::TIPO_REGISTRO,
  108.                 'FechaHoraConfirmacion' => null,
  109.             ]);
  110.         // dump($confirmaCorreo);
  111.         $redirectToLogin true// Variable para controlar la redirección
  112.         if ($confirmaCorreo) {
  113.             //TO-DO: validar si es alumno para la escuela
  114.             $futuroAlumno $portalService->verSiEsFuturoAlumno($confirmaCorreo);
  115.             if (!$futuroAlumno) {
  116.                 // Crear usuario y persona del sistema
  117.                 // Asignar al usuario sistemas por defecto
  118.                 $usuario $portalService->crearUsuarioRegistrado($confirmaCorreo);
  119.                 // Valido usuario creado antes de persistirlo
  120.                 $errores $validator->validate($usuario);
  121.                 if (count($errores) > 0) {
  122.                    
  123.                     $messages = [];
  124.                     // foreach ($errores as $paramName => $violationList) {
  125.                         foreach ($errores as $violation) {
  126.                             $messages[] = $violation->getMessage();
  127.                         }
  128.                         $messages implode(' <br/> '$messages);
  129.                     // }
  130.     
  131.                     $request->getSession()->getFlashBag()->add(
  132.                         'error'// notice / warning / error
  133.                         'Acceso incorrecto por lo siguiente: <br/>' $messages //(string) $errores
  134.                     );
  135.                 } else {
  136.                     $entityManager $this->getDoctrine()->getManager();
  137.                     $entityManager->persist($usuario);
  138.                     $entityManager->flush();
  139.                     // Copiar archivos adjuntos
  140.                     $portalService->copiarAdjuntos($confirmaCorreo->getRegistroAspirante(), $usuario);
  141.                     // Cambiar estado del registro
  142.                     // Marcar confirmado el correo
  143.                     $portalService->marcarRegistroConfirmado($confirmaCorreo);
  144.                     // Auditar evento
  145.                     $auditoriaService->auditarEvento(Registro::EVENTO_REGISTRO_CONFIRMA
  146.                         $usuario,
  147.                         null,
  148.                         $confirmaCorreo->getRegistroAspirante()
  149.                     );
  150.                     
  151.                     $request->getSession()->getFlashBag()->add(
  152.                         'notice'// notice / warning / error
  153.                         'Registro finalizado con éxito. Puede ahora ingresar al Portal con sus credenciales (DNI y contraseña).'
  154.                     );
  155.                 }
  156.             } else {
  157.                 $confirmaCorreo->marcarConfirmado();
  158.                 // Auditar evento
  159.                 $auditoriaService->auditarEvento(Registro::EVENTO_REGISTRO_CONFIRMA
  160.                     null,
  161.                     null,
  162.                     $confirmaCorreo->getRegistroAspirante()
  163.                 );
  164.                 $redirectToLogin false// No redirigir al login si se entra en este else
  165.             }
  166.         } else {
  167.             return $this->render('portal_aspirante/verificandoInfo.html.twig'); 
  168.             $request->getSession()->getFlashBag()->add(
  169.                 'error'// notice / warning / error
  170.                 'Acceso incorrecto. Por favor vuelva a repetir el proceso de registro.'
  171.             );
  172.         }
  173.         // Redirigir solo si $redirectToLogin es true
  174.         if ($redirectToLogin) {
  175.             return $this->redirectToRoute('app_login', [], Response::HTTP_SEE_OTHER);
  176.         } else {
  177.             return $this->render('portal_aspirante/verificandoInfo.html.twig'); 
  178.         }
  179.     }
  180.     #[Route('/perfil'name'portal_aspirante_perfil')]
  181.     public function perfil(Request $request
  182.         PortalConsejoService $portalService
  183.         ): Response
  184.     {
  185.         $form $this->createForm(
  186.             PersonaType::class, 
  187.             $this->getUser()->getPersona(),
  188.             ['disabled' => true]
  189.         );
  190.         $formPassword $portalService->procesarCambioPassword($request$this->getUser());
  191.         $formEmail $portalService->procesarCambioEmail($request$this->getUser(), "Portal Digital de Aspirantes");
  192.         
  193.         return $this->renderForm('portal_aspirante/perfil.html.twig', [
  194.             'form' => $form,
  195.             'formPassword' => $formPassword,
  196.             'formEmail' => $formEmail,
  197.         ]);
  198.     }
  199.     #[Route('/help'name'portal_aspirante_ayuda')]
  200.     public function help(): Response
  201.     {
  202.         throw new \LogicException('Falta implementar esta funcionalidad.');
  203.     }
  204. }