src/Controller/Admin/DashboardController.php line 67

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Admin;
  3. use App\Entity\Catalog;
  4. use App\Entity\Category;
  5. use App\Entity\Contact;
  6. use App\Entity\History;
  7. use App\Entity\JobOffer;
  8. use App\Entity\JobOfferParagraph;
  9. use App\Entity\LandingContact;
  10. use App\Entity\LandingPage;
  11. use App\Entity\LandingSlider;
  12. use App\Entity\Member;
  13. use App\Entity\Newsletter;
  14. use App\Entity\Page;
  15. use App\Entity\Paragraph;
  16. use App\Entity\Partner;
  17. use App\Entity\PhaseEvolution;
  18. use App\Entity\Post;
  19. use App\Entity\PostCategory;
  20. use App\Entity\PostMedia;
  21. use App\Entity\PostTranslation;
  22. use App\Entity\Presentation;
  23. use App\Entity\PresentationParagraph;
  24. use App\Entity\PresentationValue;
  25. use App\Entity\Product;
  26. use App\Entity\ProductAddon;
  27. use App\Entity\ProductBrochure;
  28. use App\Entity\ProductKeyFeature;
  29. use App\Entity\ProductMedia;
  30. use App\Entity\ProductParagraph;
  31. use App\Entity\Project;
  32. use App\Entity\Publication;
  33. use App\Entity\PublicationCategory;
  34. use App\Entity\Setting;
  35. use App\Entity\SubCategory;
  36. use App\Entity\Support;
  37. use App\Entity\Test;
  38. use App\Entity\Testimonial;
  39. use App\Entity\TestOk;
  40. use App\Entity\User;
  41. use App\Form\ParagraphType;
  42. use App\Service\RoleLocaleService;
  43. use Doctrine\Persistence\ManagerRegistry;
  44. use EasyCorp\Bundle\EasyAdminBundle\Config\Dashboard;
  45. use EasyCorp\Bundle\EasyAdminBundle\Config\MenuItem;
  46. use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractDashboardController;
  47. use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator;
  48. use Symfony\Component\HttpFoundation\Request;
  49. use Symfony\Component\HttpFoundation\Response;
  50. use Symfony\Component\Routing\Annotation\Route;
  51. class DashboardController extends AbstractDashboardController
  52. {
  53.     private $adminUrlGenerator;
  54.     public function __construct(AdminUrlGenerator $adminUrlGenerator)
  55.     {
  56.         $this->adminUrlGenerator = $adminUrlGenerator;
  57.     }
  58.     /**
  59.      * @Route("/admin", name="admin")
  60.      */
  61.     public function dashboard(ManagerRegistry $managerRegistry): Response
  62.     {
  63.         $repoContact = $managerRegistry->getRepository(Contact::class);
  64.         $sixMonthAgo = new \DateTime();
  65.         $sixMonthAgo->modify("-6 months");
  66.         $data["between"]["notStrict"]["a.createdAt"]["min"] = $sixMonthAgo;
  67.         $data["count"] = 1;
  68.         $nbContactLastSixMonths = $repoContact->search($data);
  69.         $nbContactsTotal = $repoContact->search(["count" => 1]);
  70.         return $this->render('admin/dashboard.html.twig', [
  71.                 "contacts" => $repoContact->findBy([], ["createdAt" => "desc"], 5),
  72.                 "nbContactLastSixMonths" => $nbContactLastSixMonths,
  73.                 "nbContactsTotal" => $nbContactsTotal,
  74.             ]
  75.         );
  76.     }
  77.     public function configureDashboard(): Dashboard
  78.     {
  79.         $siteTitle = $this->getParameter('siteTitle');
  80.         return Dashboard::new()
  81.             ->setTitle($siteTitle)
  82.             ->setFaviconPath('assets/img/favicon.ico');
  83.     }
  84.     public function configureMenuItems(): iterable
  85.     {
  86.         return [
  87.             yield MenuItem::linkToDashboard('Tableau de bord', 'fa fa-home'),
  88.             yield MenuItem::section('Général'),
  89.             yield MenuItem::linkToCrud('Messages', 'fa fa-envelope', Contact::class),
  90.             yield MenuItem::linkToCrud('Module SEO', 'fa fa-bar-chart', Page::class),
  91.             yield MenuItem::linkToCrud('Inscriptions à la newsletter', 'fa fa-users', Newsletter::class),
  92.             yield MenuItem::linkToCrud('Catalogues', 'fa fa-file', Catalog::class),
  93.             yield MenuItem::linkToCrud('Téléchargements de catalogue', 'fa fa-download', LandingContact::class),
  94.             yield MenuItem::linkToCrud('Paramètres', 'fa fa-gear', Setting::class),
  95.             yield MenuItem::linkToCrud('Support', 'fa fa-bullseye', Support::class),
  96.             yield MenuItem::section('Contenus'),
  97.             yield MenuItem::linkToCrud('Partenaires', 'fa fa-handshake', Partner::class),
  98.             yield MenuItem::linkToCrud('Collaborateurs', 'fa fa-user', Member::class),
  99.             yield MenuItem::linkToCrud("Présentation", 'fa fa-bullseye', Presentation::class),
  100.             yield MenuItem::linkToCrud("Présentation - Paragraphes", 'fa fa-bullseye', PresentationParagraph::class),
  101.             yield MenuItem::linkToCrud("Présentation - Valeurs", 'fa fa-handshake', PresentationValue::class),
  102.             yield MenuItem::linkToCrud("Landing Pages", 'fa fa-list', LandingPage::class),
  103.             yield MenuItem::section('Actualités'),
  104.             yield MenuItem::linkToCrud('Actualités', 'fa fa-newspaper-o', Post::class),
  105.             yield MenuItem::linkToCrud("Catégories", 'fa fa-list', PostCategory::class),
  106.             yield MenuItem::linkToCrud("Medias", 'fa fa-camera', PostMedia::class),
  107.             yield MenuItem::section('Produits'),
  108.             yield MenuItem::linkToCrud("Espèces", 'fa fa-star', Category::class),
  109.             yield MenuItem::linkToCrud("Applications", 'fa fa-list-ol', SubCategory::class),
  110.             yield MenuItem::linkToCrud("Produits", 'fa fa-bullseye', Product::class),
  111.             yield MenuItem::linkToCrud("Phases d'évolution", 'fa fa-handshake', PhaseEvolution::class),
  112.             yield MenuItem::linkToCrud("Paragraphes", 'fa fa-list', ProductParagraph::class),
  113.             yield MenuItem::linkToCrud("Fonctionnalités clé", 'fa fa-list-ol', ProductKeyFeature::class),
  114.             yield MenuItem::linkToCrud("Add-ons", 'fa fa-bar-chart', ProductAddon::class),
  115.             yield MenuItem::linkToCrud("Brochures", 'fa fa-suitcase', ProductBrochure::class),
  116.             yield MenuItem::linkToCrud("Medias", 'fa fa-building', ProductMedia::class),
  117.             yield MenuItem::section('Publications'),
  118.             yield MenuItem::linkToCrud("Publications", 'fa fa-bullseye', Publication::class),
  119.             yield MenuItem::linkToCrud("Domaines d'expérimentations", 'fa fa-handshake', PublicationCategory::class),
  120.             $this->isGranted('ROLE_ADMIN') ? yield MenuItem::section('Utilisateurs') : null,
  121.             $this->isGranted('ROLE_ADMIN') ? yield MenuItem::linkToCrud("Utilisateurs", 'fa fa-user', User::class) : null,
  122.         ];
  123.     }
  124.     /**
  125.      * @Route("/admin/paragraph-position", name="admin_paragraph_position")
  126.      */
  127.     public function paragraphPosition(ManagerRegistry $managerRegistry, Request $request)
  128.     {
  129.         $position = $request->request->get('position', null);
  130.         $id = $request->request->get('id', null);
  131.         $repoParagraph = $managerRegistry->getRepository(Paragraph::class);
  132.         $paragraph = $repoParagraph->find($id);
  133.         if ($paragraph) {
  134.             $paragraph->setPosition($position);
  135.             $em = $managerRegistry->getManager();
  136.             $em->flush();
  137.         }
  138.         $response = new Response(json_encode(array('status' => 'success')));
  139.         $response->headers->set('Content-Type', 'application/json');
  140.         return $response;
  141.     }
  142.     /**
  143.      * @Route("/supprimer-un-paragraphe/{id}", name="admin_delete_paragraph")
  144.      */
  145.     public function deleteParagraph(ManagerRegistry $managerRegistry, Request $request, Paragraph $paragraph)
  146.     {
  147.         $post = $paragraph->getPost();
  148.         $em = $managerRegistry->getManager();
  149.         $em->remove($paragraph);
  150.         $em->flush();
  151.         $this->addFlash("success", "Paragraphe supprimé.");
  152.         return $this->redirectToRoute('admin_edit_post', ['slug' => $post->getSlug()]);
  153.     }
  154.     /**
  155.      * @Route("/admin/edition-d-un-article/{slug}/{paragraphId}", name="admin_edit_post")
  156.      */
  157.     public function editPost(RoleLocaleService $rls, Request $request, ManagerRegistry $managerRegistry, string $slug, $paragraphId = null)
  158.     {
  159.         $repoPostTranslation = $managerRegistry->getRepository(PostTranslation::class);
  160.         $postTranslation = $repoPostTranslation->findOneBy(["slug" => $slug]);
  161.         if ($postTranslation and $post = $postTranslation->getTranslatable()) {
  162.             $repoParagraph = $managerRegistry->getRepository(Paragraph::class);
  163.             $paragraph = ($paragraphId and $repoParagraph->findOneBy(["post" => $post, "id" => $paragraphId])) ? $repoParagraph->findOneBy(["post" => $post, "id" => $paragraphId]) : new Paragraph();
  164.             $paragraph->setPost($post);
  165.             $paragraphForm = $this->createForm(ParagraphType::class, $paragraph, array('locales' => $rls->getTranslationLocales(false)));
  166.             $paragraphForm->handleRequest($request);
  167.             if ($paragraphForm->isSubmitted() && $paragraphForm->isValid()) {
  168.                 if ($paragraph->getId()) {
  169.                     $paragraph->setUpdator($this->getUser());
  170.                     $paragraph->setUpdatedAt(new \DateTime());
  171.                 } else {
  172.                     $paragraph->setCreator($this->getUser());
  173.                     $paragraph->setCreatedAt(new \DateTime());
  174.                 }
  175.                 $em = $managerRegistry->getManager();
  176.                 $em->persist($paragraph);
  177.                 $em->flush();
  178.                 $this->addFlash("success", "Paragraphe enregistré.");
  179.                 return $this->redirectToRoute('admin_edit_post', ["slug" => $post->getSlug()]);
  180.             }
  181.             $paragraphs = $repoParagraph->findBy(["post" => $post], ["position" => "asc"]);
  182.             /** @var Paragraph $p */
  183. //            $p = $paragraphs[0];
  184. //            $p->setCurrentLocale();
  185.             return $this->render('admin/editPost.html.twig', [
  186.                 'paragraphForm' => $paragraphForm->createView(),
  187.                 'post' => $post,
  188.                 'editedParagraph' => $paragraph,
  189.                 "paragraphs" => $paragraphs
  190.             ]);
  191.         } else {
  192.             $this->addFlash("danger", "admin.post_not_found");
  193.             return $this->redirectToRoute('admin');
  194.         }
  195.     }
  196. }