src/Controller/DashboardController.php line 38

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