src/Controller/Admin/DashboardController.php line 86

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Admin;
  3. use App\Entity\ContactConfig;
  4. use App\Entity\Contributor;
  5. use App\Entity\ContributorConfig;
  6. use App\Entity\MentionLegal;
  7. use App\Entity\PageNotFound;
  8. use App\Entity\Preference;
  9. use App\Repository\BlogPostRepository;
  10. use App\Repository\ContactConfigRepository;
  11. use App\Repository\ContactRepository;
  12. use App\Repository\MaintenanceRepository;
  13. use App\Entity\BlogPost;
  14. use App\Entity\BlogPostCategory;
  15. use App\Entity\Contact;
  16. use App\Entity\CookiesPolicy;
  17. use App\Entity\Criteria1;
  18. use App\Entity\Criteria2;
  19. use App\Entity\Criteria3;
  20. use App\Entity\FreePage;
  21. use App\Entity\Media;
  22. use App\Entity\Newsletter;
  23. use App\Entity\Policy;
  24. use App\Entity\Radio;
  25. use App\Entity\Roles;
  26. use App\Entity\Room;
  27. use App\Entity\SiteConfig;
  28. use App\Entity\SiteCustomization;
  29. use App\Entity\SocialNetwork;
  30. use App\Entity\TermsOfUse;
  31. use App\Entity\User;
  32. use App\Entity\Maintenance;
  33. use App\Repository\CookiesPolicyRepository;
  34. use App\Repository\Criteria1Repository;
  35. use App\Repository\Criteria2Repository;
  36. use App\Repository\Criteria3Repository;
  37. use App\Repository\MentionLegalRepository;
  38. use App\Repository\PageNotFoundRepository;
  39. use App\Repository\PolicyRepository;
  40. use App\Repository\RolesRepository;
  41. use App\Repository\TermsOfUseRepository;
  42. use App\Repository\UserRepository;
  43. use App\Service\SiteConfig as ServiceSiteConfig;
  44. use App\Service\SiteCustomization as SiteCustomizationService;
  45. use App\Service\SocialNetwork as SocialNetworkService;
  46. use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
  47. use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
  48. use EasyCorp\Bundle\EasyAdminBundle\Config\Assets;
  49. use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
  50. use EasyCorp\Bundle\EasyAdminBundle\Config\Dashboard;
  51. use EasyCorp\Bundle\EasyAdminBundle\Config\MenuItem;
  52. use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractDashboardController;
  53. use Symfony\Component\HttpFoundation\Cookie;
  54. use Symfony\Component\HttpFoundation\Request;
  55. use Symfony\Component\HttpFoundation\Response;
  56. use Symfony\Component\Routing\Annotation\Route;
  57. class DashboardController extends AbstractDashboardController
  58. {
  59.     public function __construct(
  60.         private ServiceSiteConfig        $config,
  61.         private PolicyRepository $policyRepository,
  62.         private CookiesPolicyRepository $cookiesPolicyRepository,
  63.         private TermsOfUseRepository $termsOfUseRepository,
  64.         private MentionLegalRepository $mentionLegalRepository,
  65.         private SocialNetworkService     $socialNetwork,
  66.         private SiteCustomizationService $siteCustomization,
  67.         private MaintenanceRepository    $maintenanceRepository,
  68.         private PageNotFoundRepository  $pageNotFoundRepository,
  69.         private BlogPostRepository $blogPostRepo,
  70.         private UserRepository $userRepo,
  71.         private ContactRepository $contactRepo,
  72.         private RolesRepository $rolesRepo,
  73.         private ContactConfigRepository $contactConfigRepo,
  74.         private Criteria1Repository $criteria1Repository,
  75.         private Criteria2Repository $criteria2Repository,
  76.         private Criteria3Repository $criteria3Repository,
  77.     ) {}
  78.     /**
  79.      * @Route("/admin", name="admin")
  80.      */
  81.     public function index(): Response
  82.     {
  83.         $request $this->get('request_stack')->getMainRequest();
  84.         $response = new Response();
  85.         $cookies $request->cookies;
  86.         if ($cookies->has('bienvenue')) {
  87.         } else {
  88.             $this->addFlash('success''Bonjour, bienvenue');
  89.             $value 'ok';
  90.             $cookie = new Cookie('bienvenue'$value, (time() + 3600 24 7), '/');
  91.             $response = new Response();
  92.             $response->headers->setCookie($cookie);
  93.             $response->send();
  94.         }
  95.         $contactDay $this->contactRepo->getTotalContactsByDay();
  96.         $contactWeek $this->contactRepo->getTotalContactsByWeek();
  97.         $contactMonth $this->contactRepo->getTotalContactsByMonth();
  98.         $userTotal $this->userRepo->getTotalUsers();
  99.         $userDay $this->userRepo->getTotalUsersByDay();
  100.         $userWeek $this->userRepo->getTotalUsersByWeek();
  101.         $userMonth $this->userRepo->getTotalUsersByMonth();
  102.         $blogPostTotal $this->blogPostRepo->getTotalBlogPost();
  103.         $roleTotal $this->rolesRepo->getTotalRoles();
  104.         return $this->render('admin/dashboard.html.twig', [
  105.             'userTotal' => $userTotal,
  106.             'userDay' => $userDay,
  107.             'userWeek' => $userWeek,
  108.             'userMonth' => $userMonth,
  109.             'contactDay' => $contactDay,
  110.             'contactWeek' => $contactWeek,
  111.             'contactMonth' => $contactMonth,
  112.             'blogPostTotal' => $blogPostTotal,
  113.             'roleTotal' => $roleTotal,
  114.         ]);
  115.     }
  116.     /**
  117.      * @return Assets
  118.      */
  119.     public function configureAssets(): Assets
  120.     {
  121.         return Assets::new()
  122.             ->addCssFile('assets/admin/js/vanilla-icon-picker/themes/default.min.css')
  123.             ->addCssFile('assets/admin/css/app.css')
  124.             ->addCssFile('assets/admin/css/stateDashboard.css')
  125.             ->addJsFile('assets/admin/tinymce/js/tinymce/tinymce.min.js')
  126.             ->addJsFile('https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js')
  127.             ->addJsFile('assets/admin/js/vanilla-icon-picker/icon-picker.min.js')
  128.             ->addJsFile('assets/admin/js/app.js')
  129.             ->addJsFile('assets/admin/js/stateDashboard.js')
  130.             ->addJsFile('assets/admin/js/rubrique-link.js');
  131.     }
  132.     /**
  133.      * @return Actions
  134.      */
  135.     public function configureActions(): Actions
  136.     {
  137.         return parent::configureActions()
  138.             ->add(Crud::PAGE_INDEXAction::DETAIL);
  139.     }
  140.     /**
  141.      * @return Crud
  142.      */
  143.     public function configureCrud(): Crud
  144.     {
  145.         return Crud::new()
  146.             ->setDefaultSort(['id' => 'DESC'])
  147.             ->overrideTemplates([
  148.                 'crud/index' => 'admin/crud/index.html.twig',
  149.                 'crud/edit' => 'admin/crud/edit.html.twig',
  150.             ]);
  151.     }
  152.     /**
  153.      * @return Dashboard
  154.      */
  155.     public function configureDashboard(): Dashboard
  156.     {
  157.         return Dashboard::new()
  158.             ->setTitle(sprintf('<img class="logo" src="%s" alt="Logo">'$this->config->getLogoUrl() ?? '/assets/images/logo.svg'))
  159.             ->setFaviconPath($this->config->getFaviconUrl() ?? '/favicon.ico')
  160.             ->generateRelativeUrls();
  161.     }
  162.     /**
  163.      * @return iterable
  164.      */
  165.     public function configureMenuItems(): iterable
  166.     {
  167.         // List of menu items to be shown on the top menu
  168.         yield MenuItem::section('bo.menu.main')
  169.             ->setCssClass('sidebar-menu-item d-list-item d-md-none');
  170.         if (
  171.             in_array(User::ROLE_ADMIN$this->getUser()->getRoles()) ||
  172.             in_array(User::ROLE_DIRECTEUR$this->getUser()->getRoles()) ||
  173.             in_array(User::ROLE_CHEF_REDACTEUR$this->getUser()->getRoles()) ||
  174.             in_array(User::ROLE_ADJOINT_REDACTEUR$this->getUser()->getRoles())
  175.         ) {
  176.             yield MenuItem::linkToDashboard('bo.dashboard.title''fa fa-tachometer');
  177.             yield MenuItem::linkToCrud('bo.pages.title-plural''fas fa-copy'FreePage::class);
  178.             yield MenuItem::linkToCrud('bo.blog-post-category.title-plural''fas fa-list-alt'BlogPostCategory::class);
  179.             yield MenuItem::linkToCrud('bo.preference.title-plural''fas fa-cogs'Preference::class);
  180.             yield MenuItem::linkToCrud('bo.blog-post.tab-title''fas fa-newspaper'BlogPost::class);
  181.             yield MenuItem::linkToCrud('Contributions''fas fa-newspaper'Contributor::class);
  182.             yield MenuItem::linkToCrud('bo.medias.tab-title''fas fa-images'Media::class);
  183.             yield MenuItem::linkToCrud('bo.radio.title-plural''fas fa-stop-circle'Radio::class);
  184.             yield  MenuItem::linkToCrud('Audience''fas fa-newspaper'Room::class)
  185.                 ->setController(AudienceTestCrudController::class);
  186.             yield MenuItem::linkToCrud('bo.users.title-plural''fa fa-users'User::class);
  187.             yield MenuItem::linkToCrud('bo.contact.title-plural''fas fa-envelope'Contact::class);
  188.         } else if (in_array('ROLE_CHEF_RUBRIQUE'$this->getUser()->getRoles())) {
  189.             yield MenuItem::linkToCrud('bo.blog-post-category.title-plural''fas fa-list-alt'BlogPostCategory::class);
  190.             yield MenuItem::linkToCrud('bo.blog-post.tab-title''fas fa-newspaper'BlogPost::class);
  191.             yield MenuItem::linkToCrud('bo.medias.tab-title''fas fa-images'Media::class);
  192.         } else if (in_array('ROLE_REDACTEUR'$this->getUser()->getRoles())) {
  193.             yield MenuItem::linkToCrud('bo.blog-post.tab-title''fas fa-newspaper'BlogPost::class);
  194.         }
  195.         // List of menu items to be shown on the sidebar menu
  196.         // Add 'sidebar-menu-item' class to the menu item to show it only on the sidebar
  197.         if (in_array('ROLE_ADMIN'$this->getUser()->getRoles())) {
  198.             yield MenuItem::section()
  199.                 ->setCssClass('sidebar-menu-item d-list-item d-md-none');
  200.             yield MenuItem::linkToCrud('Newsletter''fas fa-newspaper'Newsletter::class)
  201.                 ->setCssClass('sidebar-menu-item');
  202.             yield MenuItem::linkToCrud('Réseaux sociaux''fa fa-network-wired'SocialNetwork::class)
  203.                 ->setAction(Action::EDIT)
  204.                 ->setEntityId($this->socialNetwork->getEntityId())
  205.                 ->setCssClass('sidebar-menu-item');
  206.             yield MenuItem::linkToCrud('Rôles''fa fa-users'Roles::class)
  207.                 ->setCssClass('sidebar-menu-item');
  208.             $criteriaMenu MenuItem::subMenu('Critères''fas fa-paint-brush');
  209.             $criteriaSubMenus[] =  MenuItem::linkToCrud('Critère n°1''fas fa-cogs'Criteria1::class)
  210.                 ->setAction(Action::EDIT)
  211.                 ->setEntityId($this->criteria1Repository->findOneBy([])?->getId())
  212.                 ->setCssClass('sidebar-menu-item');
  213.             $criteriaSubMenus[] =  MenuItem::linkToCrud('Critère n°2''fas fa-cogs'Criteria2::class)
  214.                 ->setAction(Action::EDIT)
  215.                 ->setEntityId($this->criteria2Repository->findOneBy([])?->getId())
  216.                 ->setCssClass('sidebar-menu-item');
  217.             $criteriaSubMenus[] =  MenuItem::linkToCrud('Critère n°3''fas fa-cogs'Criteria3::class)
  218.                 ->setAction(Action::EDIT)
  219.                 ->setEntityId($this->criteria3Repository->findOneBy([])?->getId())
  220.                 ->setCssClass('sidebar-menu-item');
  221.             yield $criteriaMenu->setSubItems($criteriaSubMenus)
  222.                 ->setCssClass('sidebar-menu-item');
  223.             yield MenuItem::linkToCrud('Formulaire contribution''fas fa-cogs'ContributorConfig::class)
  224.                 ->setAction(Action::EDIT)
  225.                 ->setEntityId($this->config->getContributorConfigEntityId())
  226.                 ->setCssClass('sidebar-menu-item');
  227.             yield MenuItem::section()
  228.                 ->setCssClass('sidebar-menu-item');
  229.             yield MenuItem::linkToCrud('Accès''fas fa-cogs'Maintenance::class)
  230.                 ->setCssClass('sidebar-menu-item')
  231.                 ->setAction(Action::EDIT)
  232.                 ->setEntityId($this->maintenanceRepository->findOneBy([])?->getId());
  233.             yield MenuItem::linkToCrud('bo.siteconfig.title''fas fa-cogs'SiteConfig::class)
  234.                 ->setAction(Action::EDIT)
  235.                 ->setEntityId($this->config->getEntityId())
  236.                 ->setCssClass('sidebar-menu-item');
  237.             // Juridique
  238.             $legalMenu MenuItem::subMenu('Juridique''fas fa-paint-brush');
  239.             $legalMenuSubs[] = MenuItem::linkToCrud('bo.policy.title''fa fa-file-alt'Policy::class)
  240.                 ->setAction(Action::EDIT)
  241.                 ->setEntityId($this->policyRepository->findOneBy([])?->getId())
  242.                 ->setCssClass('sidebar-menu-item');
  243.             $legalMenuSubs[] = MenuItem::linkToCrud('bo.cookies-policy.title''fa fa-file-alt'CookiesPolicy::class)
  244.                 ->setAction(Action::EDIT)
  245.                 ->setEntityId($this->cookiesPolicyRepository->findOneBy([])?->getId())
  246.                 ->setCssClass('sidebar-menu-item');
  247.             $legalMenuSubs[] = MenuItem::linkToCrud('bo.terms-of-use.title''fa fa-file-alt'TermsOfUse::class)
  248.                 ->setAction(Action::EDIT)
  249.                 ->setEntityId($this->termsOfUseRepository->findOneBy([])?->getId())
  250.                 ->setCssClass('sidebar-menu-item');
  251.             $legalMenuSubs[] = MenuItem::linkToCrud('Mention legal''fa fa-file-alt'MentionLegal::class)
  252.                 ->setAction(Action::EDIT)
  253.                 ->setEntityId($this->mentionLegalRepository->findOneBy([])?->getId())
  254.                 ->setCssClass('sidebar-menu-item');
  255.             yield $legalMenu->setSubItems($legalMenuSubs)
  256.                 ->setCssClass('sidebar-menu-item');
  257.             yield MenuItem::linkToCrud('Message contact''fas fa-cogs'ContactConfig::class)
  258.                 ->setAction(Action::EDIT)
  259.                 ->setEntityId($this->contactConfigRepo->findOneBy([])?->getId())
  260.                 ->setCssClass('sidebar-menu-item');
  261.             $customizationMenu MenuItem::subMenu('bo.site-customization.title''fas fa-paint-brush');
  262.             $customizationSubs[] =  MenuItem::linkToCrud('Page 404''fas fa-cogs'PageNotFound::class)
  263.                 ->setAction(Action::EDIT)
  264.                 ->setEntityId($this->pageNotFoundRepository->findOneBy([])?->getId())
  265.                 ->setCssClass('sidebar-menu-item');
  266.             $customizationSubs[] = MenuItem::linkToCrud('bo.site-customization.general-color''fas fa-paint-brush'SiteCustomization::class)
  267.                 ->setAction(Action::EDIT)
  268.                 ->setEntityId($this->siteCustomization->getEntityId());
  269.             yield $customizationMenu->setSubItems($customizationSubs)
  270.                 ->setCssClass('sidebar-menu-item');
  271.         }
  272.     }
  273. }