src/Controller/DashboardController.php line 37

Open in your IDE?
  1. <?php
  2. /**
  3.  * @author Thomas HERISSON (contact@scaledev.fr)
  4.  * @copyright 2021 - ScaleDEV SAS, 12 RUE CHARLES MORET, 10120 ST ANDRE LES VERGERS
  5.  * @license commercial
  6.  */
  7. declare(strict_types=1);
  8. namespace App\Controller;
  9. use App\Entity\User;
  10. use App\Repository\ContextRepository;
  11. use App\Services\BluueLogo;
  12. use App\Repository\UserRepository;
  13. use App\Event\DashboardWidgetsEvent;
  14. use Doctrine\ORM\EntityManagerInterface;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. use Symfony\Component\HttpFoundation\JsonResponse;
  18. use Symfony\Component\HttpFoundation\RequestStack;
  19. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  20. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  21. class DashboardController extends AbstractController
  22. {
  23.     /**
  24.      * @param EventDispatcherInterface $eventDispatcher
  25.      * @param RequestStack $requestStack
  26.      * @param UserRepository $userRepo
  27.      * @param EntityManagerInterface $em
  28.      * @param ContextRepository $contextRepo
  29.      * @return Response
  30.      * @Route("/", name="app_dashboard", host="%app.default_host%")
  31.      */
  32.     public function index(
  33.         EventDispatcherInterface $eventDispatcher,
  34.         RequestStack $requestStack,
  35.         UserRepository $userRepo,
  36.         EntityManagerInterface $em,
  37.         ContextRepository $contextRepo
  38.     ): Response {
  39.         $request $requestStack->getMainRequest();
  40.         $query $request->query;
  41.         /** @var ?User $user */
  42.         $user $this->getUser();
  43.         $userConfig $user->getConfig();
  44.         $settings $userConfig['core']['dashboard'] ?? [
  45.             'dateBegin' => null,
  46.             'dateEnd' => null
  47.         ];
  48.         $dateNoFilter $query->get('date_no_filter');
  49.         $userNoFilter $query->get('user_no_filter');
  50.         $dateBegin $query->get('date_begin');
  51.         if (!$dateBegin && !$dateNoFilter) {
  52.             $dateBegin $settings['dateBegin'];
  53.             $query->set('date_begin'$dateBegin);
  54.         } else {
  55.             $settings['dateBegin'] = $dateBegin;
  56.         }
  57.         $dateEnd $query->get('date_end');
  58.         if (!$dateEnd && !$dateNoFilter) {
  59.             $dateEnd $settings['dateEnd'];
  60.             $query->set('date_end'$dateEnd);
  61.         } else {
  62.             $settings['dateEnd'] = $dateEnd;
  63.         }
  64.         $usersFilter = [];
  65.         if (!$userNoFilter) {
  66.             foreach ($query->all() as $key => $el) {
  67.                 if (str_starts_with($key'user_id')) {
  68.                     $usersFilter[] = $el;
  69.                 }
  70.             }
  71.             if (empty($usersFilter)) {
  72.                 foreach ($settings as $key => $setting) {
  73.                     if (str_starts_with($key'user_id')) {
  74.                         $query->set($key$setting);
  75.                     }
  76.                 }
  77.             }
  78.             $usersFilter = [];
  79.             foreach ($query->all() as $key => $el) {
  80.                 if (str_starts_with($key'user_id')) {
  81.                     $usersFilter[] = $el;
  82.                 }
  83.             }
  84.             foreach ($settings as $key => $setting) {
  85.                 if (str_starts_with($key'user_id')) {
  86.                     unset($settings[$key]);
  87.                 }
  88.             }
  89.             foreach ($query->all() as $key => $el) {
  90.                 if (str_starts_with($key'user_id')) {
  91.                     $settings[$key] = $el;
  92.                 }
  93.             }
  94.         }
  95.         $contextId null;
  96.         foreach ($query->all() as $key => $el) {
  97.             if (str_starts_with($key'contextId')) {
  98.                 $settings[$key] = $el;
  99.                 $contextId $el;
  100.             }
  101.         }
  102.         $userConfig['core']['dashboard'] = $settings;
  103.         $user->setConfig($userConfig);
  104.         $em->flush();
  105.         if ($dateBegin) {
  106.             $dateRange date("d-m-Y"strtotime($dateBegin)) . ' - ' date("d-m-Y"strtotime($dateEnd));
  107.         } else {
  108.             $dateRange null;
  109.         }
  110.         $dashboardWidgetsEvent = new DashboardWidgetsEvent([]);
  111.         $eventDispatcher->dispatch(
  112.             $dashboardWidgetsEvent,
  113.             DashboardWidgetsEvent::NAME
  114.         );
  115.         $widgets $dashboardWidgetsEvent->getWidgets();
  116.         return $this->render(
  117.             'dashboard/index.html.twig',
  118.             [
  119.                 'widgets' => $widgets,
  120.                 'users' => $userRepo->findAllActive(),
  121.                 'usersFilter' => $usersFilter,
  122.                 'dateRange' => $dateRange,
  123.                 'userNote' => $user->getNote(),
  124.                 'contexts' => $contextRepo->findByCurrentUser(),
  125.                 'contextId' => $contextId,
  126.             ]
  127.         );
  128.     }
  129.     /**
  130.      * @param BluueLogo $bluueLogo
  131.      * @param string $name
  132.      * @param string|null $contextId
  133.      * @return Response
  134.      * @Route("/display_bluue_logo/{name}/{contextId}", name="app_display_bluue_logo")
  135.      */
  136.     public function displayBluueLogo(BluueLogo $bluueLogostring $name, ?string $contextId null): Response
  137.     {
  138.         $bluueLogo->searchFile($namefalsetruefalse$contextId);
  139.         die;
  140.     }
  141.     /**
  142.      * @param string $collapsed
  143.      * @param RequestStack $requestStack
  144.      * @return JsonResponse
  145.      * @Route("/change_menu_collapsed/{collapsed}", name="change_menu_collapsed")
  146.      */
  147.     public function changeMenuCollapsed(
  148.         string $collapsed,
  149.         RequestStack $requestStack
  150.     ): JsonResponse {
  151.         $requestStack->getSession()->set('_app_menu_collapsed'$collapsed);
  152.         return new JsonResponse(['result' => true]);
  153.     }
  154. }