src/Controller/Admin/DashboardController.php line 45

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Admin;
  3. use EasyCorp\Bundle\EasyAdminBundle\Config\Dashboard;
  4. use EasyCorp\Bundle\EasyAdminBundle\Config\MenuItem;
  5. use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractDashboardController;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
  9. use App\Entity\Cars;
  10. use App\Entity\CarOwner;
  11. use App\Entity\Repairs;
  12. use App\Entity\Quotes;
  13. use App\Entity\Settings;
  14. use App\Entity\User;
  15. use App\Entity\Events;
  16. use App\Entity\AttachmentTags;
  17. use App\Entity\Group;
  18. use App\Entity\InventoryProduct;
  19. use EasyCorp\Bundle\EasyAdminBundle\Config\UserMenu;
  20. use Symfony\Component\Security\Core\User\UserInterface;
  21. use App\Controller\Admin\UserCrudController;
  22. use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
  23. use App\Service\Settings as SettingsService;
  24. use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;
  25. use EasyCorp\Bundle\EasyAdminBundle\Attribute\AdminDashboard;
  26. use Symfony\Contracts\Translation\TranslatorInterface;
  27. use Symfony\Component\Translation\TranslatableMessage;
  28. #[AdminDashboard(routePath'/admin/{_locale}'routeName'admin')]
  29. class DashboardController extends AbstractDashboardController
  30. {
  31.     private $settings;
  32.     private $params;
  33.     private $translator;
  34.     public function __construct(ContainerBagInterface $paramsSettingsService $settingsTranslatorInterface $translator)
  35.     {
  36.         $this->settings $settings;
  37.         $this->params $params;
  38.         $this->translator $translator;
  39.     }
  40.     public function index(): Response
  41.     {
  42.        if ($this->getUser() == null) {
  43.             return $this->redirect('login');
  44.         }
  45.         return $this->render('page/dashboard.html.twig');
  46.     }
  47.     /**
  48.      * @Route("/{_locale}/show-events", name="show-events")
  49.      */
  50.     public function showEvents(): Response
  51.     {
  52.         $em $this->getDoctrine()->getManager();
  53.         $qb $em->createQueryBuilder();
  54.         $events $qb->select("DATE_FORMAT(e.due, '%Y-%m-%d') as start, CONCAT_WS(' ', c.plateNumber, e.title) as title, e.id, 'event' as type")
  55.             ->from(Events::class, 'e')
  56.             ->leftJoin(Cars::class, 'c''WITH''c.id = e.car')
  57.             // ->where('p.id= :id')
  58.             // ->setParameter('id', 2)
  59.             ->getQuery()
  60.             ->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
  61.         $content json_encode($events);
  62.         $response = new Response();
  63.         $response->headers->set('Content-Type''application/json');
  64.         $response->setContent($content);
  65.         $response->setStatusCode(empty($content) ? Response::HTTP_NO_CONTENT Response::HTTP_OK);
  66.         //return parent::index();
  67.         return $response;
  68.     }
  69.     /**
  70.      * @Route("/{_locale}/show-technical-dates", name="show-technical-dates")
  71.      */
  72.     public function showTechnicalDates(): Response
  73.     {
  74.         $em $this->getDoctrine()->getManager();
  75.         $qb $em->createQueryBuilder();
  76.         $events $qb->select("DATE_FORMAT(c.technicalDate, '%Y-%m-%d') as start, CONCAT_WS(' ', c.plateNumber, '".$this->translator->trans('Vehicle inspection expiration')."') as title, c.id, 'car' as type")
  77.             ->from(Cars::class, 'c')
  78.             ->getQuery()
  79.             ->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
  80.         $content json_encode($events);
  81.         $response = new Response();
  82.         $response->headers->set('Content-Type''application/json');
  83.         $response->setContent($content);
  84.         $response->setStatusCode(empty($content) ? Response::HTTP_NO_CONTENT Response::HTTP_OK);
  85.         // return parent::index();
  86.         return $response;
  87.     }
  88.      /**
  89.      * @Route("/{_locale}/show-insurance-dates", name="show-insurance-dates")
  90.      */
  91.     public function showInsuranceDates(): Response
  92.     {
  93.         $em $this->getDoctrine()->getManager();
  94.         $qb $em->createQueryBuilder();
  95.         $events $qb->select("DATE_FORMAT(c.insurance_duedate, '%Y-%m-%d') as start, CONCAT_WS(' ', c.plateNumber, '".$this->translator->trans('Vehicle insurance expiration')."') as title, c.id, 'car' as type")
  96.             ->from(Cars::class, 'c')
  97.             ->getQuery()
  98.             ->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
  99.         $content json_encode($events);
  100.         $response = new Response();
  101.         $response->headers->set('Content-Type''application/json');
  102.         $response->setContent($content);
  103.         $response->setStatusCode(empty($content) ? Response::HTTP_NO_CONTENT Response::HTTP_OK);
  104.         // return parent::index();
  105.         return $response;
  106.     }
  107.     public function configureDashboard(): Dashboard
  108.     {
  109.         return Dashboard::new()
  110.             ->setTitle($this->settings->get('siteTitle'))
  111.             ->setFaviconPath('favicon.png')
  112.             ->renderContentMaximized()
  113.             ->setTranslationDomain('admin')
  114.             ->setLocales([
  115.                 'en' => 'English',
  116.                 'hu' => 'Magyar',
  117.             ])
  118.             // ->renderSidebarMinimized()
  119.         ;
  120.     }
  121.     public function configureMenuItems(): iterable
  122.     {
  123.         if ($this->getUser() == null) {
  124.             return $this->redirect('login');
  125.         }
  126.         yield MenuItem::linkToDashboard(new TranslatableMessage('Dashboard'), 'fa fa-home');
  127.         yield MenuItem::section(new TranslatableMessage('Data'));
  128.         yield MenuItem::linkToCrud(new TranslatableMessage('Cars'), 'fas fa-car'Cars::class);
  129.         yield MenuItem::linkToCrud(new TranslatableMessage('Customers'), 'fas fa-users'CarOwner::class);
  130.         yield MenuItem::section(new TranslatableMessage('Events'));
  131.         yield MenuItem::linkToCrud(new TranslatableMessage('Repairs'), 'fas fa-tools'Repairs::class);
  132.         yield MenuItem::linkToCrud(new TranslatableMessage('Quotations'), 'fas fa-file-alt'Quotes::class);
  133.         yield MenuItem::linkToCrud(new TranslatableMessage('Events'), 'fas fa-clock'Events::class);
  134.         yield MenuItem::section(new TranslatableMessage('Inventory'));
  135.         yield MenuItem::linkToCrud(new TranslatableMessage('Materials'), 'fas fa-warehouse'InventoryProduct::class);
  136.         yield MenuItem::section(new TranslatableMessage('Profile'));
  137.         yield MenuItem::linkToCrud(new TranslatableMessage('Profile'), 'fas fa-user'User::class)->setController(UserCrudController::class)->setAction(Action::EDIT)->setEntityId($this->getUser()->getId());
  138.         yield MenuItem::section(new TranslatableMessage('System'))->setPermission('ROLE_ADMIN');
  139.         yield MenuItem::linkToCrud(new TranslatableMessage('Attachment tags'), 'fas fa-tag'AttachmentTags::class)->setPermission('ROLE_ADMIN');
  140.         yield MenuItem::linkToCrud(new TranslatableMessage('Groups'), 'fas fa-layer-group'Group::class)->setQueryParameter('ownerId'$this->getUser()->getId())->setPermission('ROLE_ADMIN');
  141.         yield MenuItem::linkToCrud(new TranslatableMessage('Users'), 'fas fa-address-book'User::class)->setPermission(User::ROLE_ADMIN);
  142.         if ($this->getUser()->hasRoles(User::ROLE_ADMIN)) {
  143.             yield MenuItem::linkToCrud(new TranslatableMessage('Settings'), 'fas fa-cog'Settings::class)->setController(SettingsCrudController::class)->setAction(Action::EDIT)->setEntityId(1);
  144.         } else {
  145.             yield MenuItem::linkToCrud(new TranslatableMessage('Settings'), 'fas fa-cog'Settings::class)->setController(SettingsCrudController::class)->setAction(Action::EDIT)->setEntityId(1)->setPermission(User::ROLE_SETTINGS);
  146.         }
  147.         yield MenuItem::section(new TranslatableMessage('Documents'));
  148.         if ($this->getUser()->hasRoles(User::ROLE_ADMIN)) {
  149.             yield MenuItem::linkToCrud(new TranslatableMessage('GDPR document'), 'fas fa-file-alt'Settings::class)->setController(SettingsCrudController::class)->setAction('printGDPR');
  150.         } else {
  151.             yield MenuItem::linkToCrud(new TranslatableMessage('GDPR document'), 'fas fa-file-alt'Settings::class)->setController(SettingsCrudController::class)->setAction('printGDPR')->setPermission(User::ROLE_PRINT);
  152.         }
  153.         yield MenuItem::linkToCrud(new TranslatableMessage('User manual'), 'fas fa-book'Settings::class)->setController(SettingsCrudController::class)->setAction('showUserManual');
  154.     }
  155.     public function configureUserMenu(UserInterface $user): UserMenu
  156.     {
  157.         // $adminUrlGenerator = $this->get(AdminUrlGenerator::class);
  158.         // $url = $adminUrlGenerator
  159.         //     ->setController(UserCrudController::class)
  160.         //     ->setAction(Action::EDIT)
  161.         //     ->set('entityId', $user->getId())
  162.         //     ->generateUrl();
  163.         return parent::configureUserMenu($user)
  164.             ->setName($user->getDisplayName() ? $user->getDisplayName() : $user->getUsername())
  165.             ->displayUserName(true)
  166.             ->displayUserAvatar(true)
  167.             ->setMenuItems([
  168.                 MenuItem::linkToCrud('Profile''fas fa-id-card'User::class)->setController(UserCrudController::class)->setAction(Action::EDIT)->setEntityId($this->getUser()->getId()),
  169.                 MenuItem::linkToLogout('Logout''fas fa-sign-out'),
  170.             ]);
  171.     }
  172.     public function configureCrud(): Crud
  173.     {
  174.         return Crud::new()
  175.             // the argument must be either one of these strings: 'short', 'medium', 'long', 'full', 'none'
  176.             // (the strings are also available as \EasyCorp\Bundle\EasyAdminBundle\Field\DateTimeField::FORMAT_* constants)
  177.             // or a valid ICU Datetime Pattern (see http://userguide.icu-project.org/formatparse/datetime)
  178.             ->setDateFormat('Y-MM-dd')
  179.             ->setTimeFormat('short')
  180.             // first argument = datetime pattern or date format; second optional argument = time format
  181.             // ->setDateTimeFormat('medium', 'medium')
  182.             ->setDateTimeFormat('Y-MM-dd H:mm:ss')
  183.             ->setDateIntervalFormat('%%y év %%m hónap %%d nap')
  184.             ->setTimezone('Europe/Budapest')
  185.             // used to format numbers before rendering them on templates
  186.             // ->setNumberFormat('%.3d')
  187.             ->setPageTitle('detail''%entity_as_string%')
  188.             ->showEntityActionsInlined()
  189.             ->setThousandsSeparator(" ")
  190.         ;
  191.     }
  192. }