src/Controller/AdminController.php line 32

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\Routing\Annotation\Route;
  6. use Symfony\Component\HttpFoundation\Session\Session;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\Routing\Generator\UrlGenerator;
  9. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  10. use Symfony\Component\Security\Core\Security;
  11. use App\Entity\User;
  12. use App\Repository\UserRepository;
  13. use App\Repository\RegionRepository;
  14. use App\Form\UserType;
  15. use App\Service\AdminService;
  16. use Symfony\Component\Security\Http\Attribute\CurrentUser;
  17. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  18. /**
  19.  * @Route("/admin", name="admin_")
  20.  */
  21. class AdminController extends AbstractController
  22. {
  23.     #[Route('/login'name'login')]
  24.     public function login(AuthenticationUtils $authenticationUtils): Response
  25.     {
  26.         // get the login error if there is one
  27.         $error $authenticationUtils->getLastAuthenticationError();
  28.         // last username entered by the user
  29.         $lastUsername $authenticationUtils->getLastUsername();
  30.         return $this->render('admin/login.html.twig', [
  31.             'last_username' => $lastUsername,
  32.             'error'         => $error,
  33.         ]);
  34.     }
  35.     #[Route('/logout'name'logout')]
  36.     public function logout(Security $security): Response
  37.     {
  38.         // logout the user in on the current firewall
  39.         $response $security->logout();
  40.         // you can also disable the csrf logout
  41.         $response $security->logout(false);
  42.         echo "en logout....";
  43.         die;
  44.         return $this->redirect($this->generateUrl('admin_login'));
  45.     }
  46.     #[Route('/home'name'home')]
  47.     public function home(#[CurrentUser] ?User $user): Response
  48.     {
  49.         return $this->redirect($this->generateUrl('admin_admin_home'));
  50.     }
  51.     #[Route('/'name'default')]
  52.     public function default(
  53.         Request $request,
  54.         ): Response
  55.     {
  56.         return $this->redirect($this->generateUrl('admin_index'));
  57.     }
  58.     #[Route('/index'name'index')]
  59.     public function index(
  60.         Request $request,
  61.         ): Response
  62.     {
  63.         $userActual $this->getUser();
  64.         if (!$userActual){
  65.             $this->addFlash('warning''Sesión Expirada!');
  66.             return $this->redirect($this->generateUrl('admin_login'));
  67.         }
  68.         if (!$userActual->isActivo()) {
  69.             $this->addFlash('warning''Usuario inactivo');
  70.             return $this->redirect($this->generateUrl('admin_login'));
  71.         }
  72.         return $this->redirect($this->generateUrl('admin_home'));
  73.     }
  74.     #[Route('/admin-home'name'admin_home')]
  75.     public function adminHome(
  76.         Request $request,
  77.         AdminService $adminService,
  78.         ): Response
  79.     {
  80.         $userActual $this->getUser();
  81.         if (!$userActual){
  82.             $this->addFlash('warning''Sesión Expirada!');
  83.             return $this->redirect($this->generateUrl('admin_login'));
  84.         }
  85.         if (!$userActual->isActivo()) {
  86.             $this->addFlash('warning''Usuario inactivo');
  87.             return $this->redirect($this->generateUrl('admin_login'));
  88.         }
  89.         $menuAdmin $adminService->getMenuAdmin($userActual->getRoles());
  90.         return $this->render('admin/admin-home.html.twig', [
  91.             'menuAdmin' => $menuAdmin
  92.         ]);
  93.     }
  94.     #[Route('/usuarios'name'usuarios')]
  95.     public function usuarios(
  96.         Request $request,
  97.         UserRepository $userRepository,
  98.         AdminService $adminService,
  99.         RegionRepository $regionRepository,
  100.         ): Response
  101.     {
  102.         try {
  103.             $userActual $this->getUser();
  104.             if (!$userActual){
  105.                 $this->addFlash('warning''Sesión Expirada!');
  106.                 return $this->redirect($this->generateUrl('admin_login'));
  107.             }
  108.             if (!$userActual->isActivo()) {
  109.                 $this->addFlash('warning''Usuario inactivo');
  110.                 return $this->redirect($this->generateUrl('admin_login'));
  111.             }
  112.             if(
  113.                 !$this->isGranted('ROLE_SUPER_ADMIN') &&
  114.                 !$this->isGranted('ROLE_ADMINISTRADOR_USU')
  115.             ){
  116.                 $this->addFlash('warning''Acceso denegado');
  117.                 return $this->redirect($this->generateUrl('admin_home'));
  118.             }
  119.             $page $request->query->getInt('page'1);
  120.             $limit 10;
  121.             $filters = [
  122.                 'id' => $request->query->get('id'),
  123.                 'nombres' => $request->query->get('nombres'),
  124.                 'email' => $request->query->get('email'),
  125.                 'region' => $request->query->get('region'),
  126.                 'role' => $request->query->get('role'),
  127.                 'activo' => $request->query->get('activo'),
  128.             ];
  129.             $menuAdmin $adminService->getMenuAdmin($userActual->getRoles(), 'admin_usuarios');
  130.             $usuarios $userRepository->findAllPaginatedWithFilters($page$limit$filters$userActual);
  131.             $roles $adminService->getRolesLista();
  132.             $regiones $regionRepository->findAll();
  133.             return $this->render('admin/usuarios.html.twig', [
  134.                 'usuarios'=>$usuarios,
  135.                 'filters' => $filters,
  136.                 'menuAdmin' => $menuAdmin,
  137.                 'roles' => $roles,
  138.                 'regiones'=> $regiones,
  139.             ]);
  140.         } catch (\Exception $e) {
  141.             $this->addFlash('danger''Ocurrió un error Inesperado' $e->getMessage());
  142.             return $this->redirect($this->generateUrl('admin_home'));
  143.         }
  144.     }
  145.     #[Route('/usuarios/edit/{id}'name'usuarios_edit')]
  146.     public function usuariosEditar(
  147.         Request $request,
  148.         Int $id,
  149.         UserPasswordHasherInterface $passwordHasher,
  150.         UserRepository $userRepository,
  151.         AdminService $adminService,
  152.         ): Response
  153.     {
  154.         try {
  155.             $userActual $this->getUser();
  156.             if (!$userActual){
  157.                 $this->addFlash('warning''Sesión Expirada!');
  158.                 return $this->redirect($this->generateUrl('admin_login'));
  159.             }
  160.             if (!$userActual->isActivo()) {
  161.                 $this->addFlash('warning''Usuario inactivo');
  162.                 return $this->redirect($this->generateUrl('admin_login'));
  163.             }
  164.             if(
  165.                 !$this->isGranted('ROLE_SUPER_ADMIN') &&
  166.                 !$this->isGranted('ROLE_ADMINISTRADOR_USU')
  167.             ){
  168.                 $this->addFlash('warning''Acceso denegado');
  169.                 return $this->redirect($this->generateUrl('admin_home'));
  170.             }
  171.             $menuAdmin $adminService->getMenuAdmin($userActual->getRoles(), 'admin_usuarios');
  172.             $usuario $userRepository->findOneById($id);
  173.             $form $this->createForm(UserType::class, $usuario, [
  174.                 'userActual' => $userActual,
  175.             ]);
  176.             if ($request->isMethod('POST')) {
  177.                 $form->handleRequest($request);
  178.                 if ($form->isSubmitted() && $form->isValid()) {
  179.                     try {
  180.                         $dataForm $request->request->all();
  181.                         if (isset($dataForm["user"]["changePassword"]) && $dataForm["user"]["changePassword"]) {
  182.                             $plainPassword $dataForm["user"]["plainPassword"]["first"];
  183.                             $hashedPassword $passwordHasher->hashPassword($usuario$plainPassword);
  184.                             $usuario->setPassword($hashedPassword);
  185.                         }
  186.                         $userRepository->save($usuariotrue);
  187.                         $this->addFlash('success''Usuario guardado exitosamente');
  188.                         return $this->redirect($this->generateUrl('admin_usuarios'));
  189.                     } catch (\Exception $e) {
  190.                         $this->addFlash('danger''Ocurrió un error al guardar el usuario' $e->getMessage());
  191.                         return $this->redirectToRoute('admin_usuarios_edit', ['id' => $id]);
  192.                     }
  193.                 }else{
  194.                     foreach ($form->getErrors() as $error) {
  195.                         $message[] = $error->getMessage();
  196.                         $this->addFlash('danger'$error->getMessage());
  197.                     }
  198.                 }
  199.             }
  200.             return $this->renderForm('admin/usuarios_edit.html.twig', [
  201.                 'usuario'=>$usuario,
  202.                 'form' => $form,
  203.                 'menuAdmin' => $menuAdmin,
  204.             ]);
  205.         } catch (\Exception $e) {
  206.             $this->addFlash('danger''Ocurrió un error Inesperado' $e->getMessage());
  207.             return $this->redirect($this->generateUrl('admin_home'));
  208.         }
  209.     }
  210.     #[Route('/usuarios/new'name'usuarios_new')]
  211.     public function usuariosNew(
  212.         Request $request,
  213.         UserRepository $userRepository,
  214.         UserPasswordHasherInterface $passwordHasher,
  215.         AdminService $adminService,
  216.         ): Response
  217.     {
  218.         try {
  219.             $userActual $this->getUser();
  220.             if (!$userActual){
  221.                 $this->addFlash('warning''Sesión Expirada!');
  222.                 return $this->redirect($this->generateUrl('admin_login'));
  223.             }
  224.             if (!$userActual->isActivo()) {
  225.                 $this->addFlash('warning''Usuario inactivo');
  226.                 return $this->redirect($this->generateUrl('admin_login'));
  227.             }
  228.             if(
  229.                 !$this->isGranted('ROLE_SUPER_ADMIN') &&
  230.                 !$this->isGranted('ROLE_ADMINISTRADOR_USU')
  231.             ){
  232.                 $this->addFlash('warning''Acceso denegado');
  233.                 return $this->redirect($this->generateUrl('admin_home'));
  234.             }
  235.             $menuAdmin $adminService->getMenuAdmin($userActual->getRoles(), 'admin_usuarios');
  236.             $usuario = new User();
  237.             $form $this->createForm(UserType::class, $usuario,
  238.                 ['userActual' => $userActual,]
  239.             );
  240.             if ($request->isMethod('POST')) {
  241.                 $form->handleRequest($request);
  242.                 if ($form->isSubmitted() && $form->isValid()) {
  243.                     try {
  244.                         $dataForm $request->request->all();
  245.                         $plainPassword $dataForm["user"]["plainPassword"]["first"];
  246.                         $hashedPassword $passwordHasher->hashPassword($usuario$plainPassword);
  247.                         $usuario->setPassword($hashedPassword);
  248.                         $usuariosExistente $userRepository->findOneByEmail($usuario->getEmail());
  249.                         if(!empty($usuariosExistente)){
  250.                             $this->addFlash('danger''Email ya registrado');
  251.                             return $this->redirect($this->generateUrl('admin_usuarios_new'));
  252.                         }
  253.                         $userRepository->save($usuariotrue);
  254.                         $this->addFlash('success''Usuario guardado exitosamente');
  255.                         return $this->redirect($this->generateUrl('admin_usuarios'));
  256.                     } catch (\Exception $e) {
  257.                         $this->addFlash('danger''Ocurrió un error al guardar el usuario' /*. $e->getMessage() */);
  258.                         return $this->redirect($this->generateUrl('admin_usuarios_new'));
  259.                     }
  260.                 }else{
  261.                     foreach ($form->getErrors() as $error) {
  262.                         $message[] = $error->getMessage();
  263.                         $this->addFlash('danger'$error->getMessage());
  264.                     }
  265.                 }
  266.             }
  267.             return $this->renderForm('admin/usuarios_new.html.twig', [
  268.                 'usuario'=>$usuario,
  269.                 'form' => $form,
  270.                 'menuAdmin' => $menuAdmin,
  271.             ]);
  272.         } catch (\Exception $e) {
  273.             $this->addFlash('danger''Ocurrió un error Inesperado' $e->getMessage());
  274.             return $this->redirect($this->generateUrl('admin_home'));
  275.         }
  276.     }
  277.     /**
  278.      * @Route("/admin-menu-usuarios-view", name="adminMenuUsuariosView")
  279.      */
  280.     public function adminMenuUsuariosView(
  281.         Request $request,
  282.         AdminService $adminService,
  283.     )
  284.     {
  285.         try {
  286.             $userActual $this->getUser();
  287.             if (!$userActual){
  288.                 $this->addFlash('warning''Sesión Expirada!');
  289.                 return $this->redirect($this->generateUrl('admin_login'));
  290.             }
  291.             if (!$userActual->isActivo()) {
  292.                 $this->addFlash('warning''Usuario inactivo');
  293.                 return $this->redirect($this->generateUrl('admin_login'));
  294.             }
  295.             $menuAdmin $adminService->getMenuAdmin($userActual->getRoles(), 'admin_usuarios');
  296.             return $this->renderForm(
  297.                 'base_admin_menu.html.twig',
  298.                 ['menuAdmin' => $menuAdmin]
  299.             );
  300.         } catch (\Exception $e) {
  301.             $this->addFlash('danger''Ocurrió un error Inesperado' $e->getMessage());
  302.             return $this->redirect($this->generateUrl('admin_home'));
  303.         }
  304.     }
  305. }