src/Controller/HomeController.php line 38

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Group;
  4. use App\Entity\Register;
  5. use App\Service\DebugLogService;
  6. use App\Service\Home\DataDashboardService;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\RequestStack;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use Symfony\Component\Security\Core\Security;
  14. class HomeController extends AbstractController
  15. {
  16.     public function __construct(
  17.         private EntityManagerInterface $em,
  18.         private RequestStack $requestStack,
  19.         private DebugLogService $debugLogService,
  20.         private DataDashboardService $dds,
  21.     ) {
  22.     }
  23.     #[Route(''name'app_')]
  24.     public function home()
  25.     {
  26.         return $this->redirectToRoute('app_login');
  27.     }
  28.     #[Route(
  29.         '/{_locale}/home',
  30.         name'app_home',
  31.         requirements: ['_locale' => '%app.supported_locales%']
  32.     )]
  33.     public function index(Request $request)
  34.     {
  35.         /** @var \App\Entity\User $logged_user */
  36.         $logged_user $this->getUser();
  37.         $session $this->requestStack->getSession();
  38.         if ($request->request->has('group')) {
  39.             // Añadir grupo a session
  40.             $group $this->em->getRepository(Group::class)->find($request->request->get('group'));
  41.             $coordinator $group->getCoordinator();
  42.             if ($coordinator != null) {
  43.                 if ($logged_user->getId() === $coordinator->getId()) {
  44.                     $session->set('coordinator'1);
  45.                 } else {
  46.                     $session->set('coordinator'0);
  47.                 }
  48.             } else {
  49.                 $session->set('coordinator'0);
  50.             }
  51.             $session->set('group'$group);
  52.         } elseif ($request->request->has('option')) {
  53.             $session->remove('group');
  54.             $acting_as $request->request->get('option');
  55.             if ($acting_as == "2") {
  56.                 return $this->redirectToRoute('app_choose_group');
  57.             }
  58.         }
  59.         return $this->render('home/index.html.twig', []);
  60.     }
  61.     #[Route(
  62.         '/{_locale}/home/data',
  63.         name'app_data',
  64.         requirements: ['_locale' => '%app.supported_locales%']
  65.     )]
  66.     public function homeData(Security $security)
  67.     {
  68.         $tag $this->getTag('[/info]');
  69.         $start microtime(true);
  70.         // $this->print($tag . 'START');
  71.         // $this->debugLogService->mem($tag, 'START-MEM');
  72.         $user $security->getUser();
  73.         $group $this->requestStack->getSession()->get('group');
  74.         $result $this->dds->buildDataDashboard($user$group);
  75.         // $this->debugLogService->mem($tag, 'DONE-MEM');
  76.         $this->print($tag ' DONE - time: ' round((microtime(true) - $start) * 1000) . ' ms' PHP_EOL);
  77.         return $this->render('data/index.html.twig'$result);
  78.     }
  79.     #[Route(
  80.         '/{_locale}/actAs',
  81.         name'app_actAs',
  82.         requirements: ['_locale' => '%app.supported_locales%'],
  83.         methods: ['GET']
  84.     )]
  85.     public function actAs(Request $request): Response
  86.     {
  87.         /** @var \App\Entity\User $logged_user */
  88.         $logged_user $this->getUser();
  89.         $session $this->requestStack->getSession();
  90.         // $session->clear();
  91.         if (
  92.             in_array('ROLE_SUPER_ADMIN'$this->getUser()->getRoles()) ||
  93.             in_array('ROLE_OFFICE'$this->getUser()->getRoles()) ||
  94.             in_array('ROLE_ENDORSING_OFFICE'$this->getUser()->getRoles())
  95.         ) {
  96.             return $this->redirectToRoute('app_home');
  97.             // return $this->render('home/index.html.twig');
  98.         }
  99.         if ($logged_user->getGroupUsers()->isEmpty()) {
  100.             $groups '0';
  101.         } else {
  102.             $groups '1';
  103.         }
  104.         return $this->render('home/actAs.html.twig', [
  105.             'groups' => $groups,
  106.         ]);
  107.     }
  108.     #[Route(
  109.         '/{_locale}/choose_group',
  110.         name'app_choose_group',
  111.         requirements: ['_locale' => '%app.supported_locales%']
  112.     )]
  113.     public function chooseGroup(): Response
  114.     {
  115.         /** @var \App\Entity\User $logged_user */
  116.         $logged_user $this->getUser();
  117.         $groupusers $logged_user->getGroupUsers();
  118.         $groups = [];
  119.         for ($i 0$i count($groupusers); $i++) {
  120.             $group_id $groupusers[$i]->getGroupId();
  121.             $group $this->em->getRepository(Group::class)->find($group_id);
  122.             $groups[] = $group;
  123.         }
  124.         // dd($groups);
  125.         return $this->render('home/choose_group.html.twig', [
  126.             'groups' => $groups,
  127.         ]);
  128.     }
  129.     /**
  130.      * Funcion auxiliar para escribir en "debug.log"
  131.      */
  132.     private function print(string $message): void
  133.     {
  134.         $enable_prints true// en producción "false"
  135.         if ($enable_prints) {
  136.             $this->debugLogService->logDebug($message);
  137.             // $this->debugLogService->mem('TEST', $message);
  138.         }
  139.     }
  140.     /**
  141.      * Auxiliary function to format TAG
  142.      */
  143.     private function getTag(string $str_base)
  144.     {
  145.         $tag '[DP]' $str_base;
  146.         /** @var \App\Entity\User $logged_user */
  147.         $logged_user $this->getUser();
  148.         $session $this->requestStack->getSession();
  149.         if ($session->has('group')) {
  150.             $owner_group $session->get('group');
  151.             $tag '[G:' $owner_group->getCode() . ']' $tag;
  152.             // } else {
  153.             //     $owner_ringer = $logged_user->getRinger();
  154.             //     $tag = $tag . '[' . $owner_ringer . ']';
  155.         }
  156.         $tag '[U:' $logged_user->getId() . ']' $tag;
  157.         if ($logged_user->getRoles()[0] == "ROLE_OFFICE") {
  158.             $tag $tag '[OFFICE]';
  159.             // } else {
  160.             //     $tag = $tag . '[USER]: ';
  161.         }
  162.         return $tag ': ';
  163.     }
  164. }