1, // content MenuItemCrudController::class => 4, MenuItemFooterCrudController::class => 5, CategoryObjectCrudController::class => 6, // +1 // usage UserCrudController::class => 8, PlaceCrudController::class => 9, // Group (+1) ObjectCrudController::class => 11, ]; public function __construct( private readonly TranslatorInterface $translator, private readonly GroupRepository $groupRepository, private readonly AdminUrlGenerator $adminUrlGenerator, private readonly AuthorizationChecker $authorizationChecker, private readonly UserRepository $userRepository, private readonly ServiceRequestRepository $requestRepository ) { } /** * @see https://symfony.com/bundles/EasyAdminBundle/current/dashboards.html#/translation */ public function configureDashboard(): Dashboard { return Dashboard::new() ->setTitle($this->translator->trans('dashboard.title', [], self::DOMAIN)) ->setTranslationDomain('admin') ->generateRelativeUrls() ->setLocales([ 'en' => 'πŸ‡¬πŸ‡§ Anglais', 'fr' => 'πŸ‡«πŸ‡· FranΓ§ais', ]) ; } /** * @throws NonUniqueResultException * @throws NoResultException */ #[Route('/admin', name: 'admin')] public function index(): Response { if (!$this->authorizationChecker->isAdmin()) { $groupUrl = $this->adminUrlGenerator ->setController(GroupCrudController::class) ->generateUrl(); return $this->redirect($groupUrl); } return $this->render('admin/dashboard.html.twig', [ 'group_count' => $this->groupRepository->count([]), 'user_count' => $this->userRepository->getUserCountByType(UserType::USER), 'place_count' => $this->userRepository->getUserCountByType(UserType::PLACE), 'month_users_count' => $this->userRepository->getNewUsersOfMonthByType(UserType::USER), 'month_places_count' => $this->userRepository->getNewUsersOfMonthByType(UserType::PLACE), 'month_requests_count' => $this->requestRepository->getNewServiceRequestsOfMonth(), ]); } public function configureMenuItems(): iterable { /** @var User $user */ $user = $this->getUser(); // β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€” yield MenuItem::linkToDashboard('menu.dashboard', 'fa fa-home')->setPermission(User::ROLE_ADMIN); $url = $this->adminUrlGenerator ->unsetAll() ->setController(AdministratorCrudController::class) ->set('crudAction', Crud::PAGE_INDEX) ->set('menuIndex', self::MENU_INDEX[AdministratorCrudController::class]); yield MenuItem::linkToUrl('menu.administrators', 'fas fa-user-plus', $url->generateUrl())->setPermission(User::ROLE_ADMIN); yield MenuItem::linkToRoute('menu.parameters', 'fas fa-cog', ParametersController::ROUTE_NAME)->setPermission(User::ROLE_ADMIN)->setPermission(User::ROLE_ADMIN); // β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€” yield MenuItem::section('menu.content'); $menuConfigUrl = $this->adminUrlGenerator ->unsetAll() ->setController(MenuItemCrudController::class) ->set('crudAction', Crud::PAGE_INDEX) ->set('menuIndex', self::MENU_INDEX[MenuItemCrudController::class]) ->generateUrl(); $footerConfigUrl = $this->adminUrlGenerator ->unsetAll() ->setController(MenuItemFooterCrudController::class) ->set('crudAction', Crud::PAGE_INDEX) ->set('menuIndex', self::MENU_INDEX[MenuItemFooterCrudController::class]) ->generateUrl(); $categoryObjectUrl = $this->adminUrlGenerator ->unsetAll() ->setController(CategoryObjectCrudController::class) ->set('crudAction', Crud::PAGE_INDEX) ->set('menuIndex', self::MENU_INDEX[CategoryObjectCrudController::class]) ->set('submenuIndex', 0) ->generateUrl(); $categoryServiceUrl = $this->adminUrlGenerator ->unsetAll() ->setController(CategoryServiceCrudController::class) ->set('crudAction', Crud::PAGE_INDEX) ->set('menuIndex', self::MENU_INDEX[CategoryObjectCrudController::class]) ->set('submenuIndex', 1) ->generateUrl(); yield MenuItem::linkToUrl('menu.config_menu', 'fa-solid fa-bars', $menuConfigUrl)->setPermission(User::ROLE_ADMIN); yield MenuItem::linkToUrl('menu.config_footer', 'fas fa-ellipsis-h', $footerConfigUrl)->setPermission(User::ROLE_ADMIN); yield MenuItem::linkToCrud('menu.pages', 'fas fa-hat-wizard', Page::class)->setPermission(User::ROLE_ADMIN); yield MenuItem::subMenu('menu.categories', 'fa-solid fa-folder')->setSubItems([ MenuItem::linkToUrl('menu.objects', 'fa-solid fa-box', $categoryObjectUrl)->setPermission(User::ROLE_ADMIN), MenuItem::linkToUrl('menu.services', 'fa-regular fa-handshake', $categoryServiceUrl)->setPermission(User::ROLE_ADMIN), ])->setPermission(User::ROLE_ADMIN); // β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€” yield MenuItem::section('menu.usage')->setPermission(User::ROLE_ADMIN); $url = $this->adminUrlGenerator ->unsetAll() ->setController(UserCrudController::class) ->set('crudAction', Crud::PAGE_INDEX) ->set('menuIndex', self::MENU_INDEX[UserCrudController::class]) ; yield MenuItem::linkToUrl('menu.users', 'fas fa-user', $url->generateUrl())->setPermission(User::ROLE_ADMIN); $url = $this->adminUrlGenerator ->unsetAll() ->setController(PlaceCrudController::class) ->set('crudAction', Crud::PAGE_INDEX) ->set('menuIndex', self::MENU_INDEX[PlaceCrudController::class]) ; yield MenuItem::linkToUrl('menu.places', 'fas fa-location-dot', $url->generateUrl())->setPermission(User::ROLE_ADMIN); yield MenuItem::subMenu('menu.groups', 'fas fa-users')->setSubItems([ MenuItem::linkToCrud('menu.groups', 'fas fa-users', Group::class)->setPermission(User::ROLE_GROUP_ADMIN), MenuItem::linkToCrud('menu.members', 'fas fa-user-friends', UserGroup::class)->setPermission(User::ROLE_GROUP_ADMIN), ])->setPermission(User::ROLE_GROUP_ADMIN); $objectUrl = $this->adminUrlGenerator ->unsetAll() ->setController(ObjectCrudController::class) ->set('crudAction', Crud::PAGE_INDEX) ->set('menuIndex', self::MENU_INDEX[ObjectCrudController::class]) ->set('submenuIndex', 0) ->generateUrl(); $serviceUrl = $this->adminUrlGenerator ->unsetAll() ->setController(ServiceCrudController::class) ->set('crudAction', Crud::PAGE_INDEX) ->set('menuIndex', self::MENU_INDEX[ObjectCrudController::class]) ->set('submenuIndex', 1) ->generateUrl(); yield MenuItem::subMenu('menu.articles', 'fa-solid fa-box')->setSubItems([ MenuItem::linkToUrl('menu.objects', 'fa-solid fa-box', $objectUrl)->setPermission(User::ROLE_ADMIN), MenuItem::linkToUrl('menu.services', 'fa-regular fa-handshake', $serviceUrl)->setPermission(User::ROLE_ADMIN), ])->setPermission(User::ROLE_ADMIN); yield MenuItem::linkToCrud('menu.loans', 'fas fa-link', ServiceRequest::class)->setPermission(User::ROLE_ADMIN); // β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€” if ($user->isDevAccount()) { yield MenuItem::section('menu.devtools')->setPermission(User::ROLE_ADMIN); yield MenuItem::linkToRoute('menu.dev_tools', 'fas fa-wrench', DevToolsController::ROUTE_NAME)->setPermission(User::ROLE_ADMIN); } // β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€” yield MenuItem::section('menu.public'); yield MenuItem::linkToUrl('menu.home', 'fa fa-home', '/')->setLinkTarget('_blank'); yield MenuItem::linkToUrl('menu.user', 'fa fa-user', $this->generateUrl(MyAccountAction::ROUTE))->setLinkTarget('_blank'); } }