<?php
namespace App\Controller\Admin;
use App\Entity\ActualitePage;
use App\Entity\Application;
use App\Entity\ApplicationParagraph;
use App\Entity\Category;
use App\Entity\Contact;
use App\Entity\Document;
use App\Entity\DocumentCategory;
use App\Entity\DocumentPage;
use App\Entity\FabricationPage;
use App\Entity\FabricationParagraph;
use App\Entity\History;
use App\Entity\JobOffer;
use App\Entity\JobOfferParagraph;
use App\Entity\LandingSlider;
use App\Entity\Member;
use App\Entity\Newsletter;
use App\Entity\Page;
use App\Entity\Paragraph;
use App\Entity\Partner;
use App\Entity\Post;
use App\Entity\PostCategory;
use App\Entity\PostMedia;
use App\Entity\PostTranslation;
use App\Entity\PresentationPage;
use App\Entity\PresentationParagraph;
use App\Entity\Product;
use App\Entity\ProductMedia;
use App\Entity\ProductTable;
use App\Entity\ProductTableColumn;
use App\Entity\Project;
use App\Entity\SubCategory;
use App\Entity\SubSubCategory;
use App\Entity\SubSubSubCategory;
use App\Entity\Test;
use App\Entity\Testimonial;
use App\Entity\TestOk;
use App\Form\ParagraphType;
use Doctrine\Persistence\ManagerRegistry;
use EasyCorp\Bundle\EasyAdminBundle\Config\Dashboard;
use EasyCorp\Bundle\EasyAdminBundle\Config\MenuItem;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractDashboardController;
use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class DashboardController extends AbstractDashboardController
{
private $adminUrlGenerator;
public function __construct(AdminUrlGenerator $adminUrlGenerator)
{
$this->adminUrlGenerator = $adminUrlGenerator;
}
/**
* @Route("/admin", name="admin")
*/
public function dashboard(ManagerRegistry $managerRegistry): Response
{
$repoContact = $managerRegistry->getRepository(Contact::class);
$sixMonthAgo = new \DateTime();
$sixMonthAgo->modify("-6 months");
$data["between"]["notStrict"]["a.createdAt"]["min"] = $sixMonthAgo;
$data["count"] = 1;
$nbContactLastSixMonths = $repoContact->search($data);
$nbContactsTotal = $repoContact->search(["count" => 1]);
return $this->render('admin/dashboard.html.twig', [
"contacts" => $repoContact->findBy([], ["createdAt" => "desc"], 5),
"nbContactLastSixMonths" => $nbContactLastSixMonths,
"nbContactsTotal" => $nbContactsTotal,
]
);
}
public function configureDashboard(): Dashboard
{
$siteTitle = $this->getParameter('siteTitle');
return Dashboard::new()
->setTitle($siteTitle)
->setFaviconPath('assets/img/favicon.ico');
}
public function configureMenuItems(): iterable
{
return [
yield MenuItem::linkToDashboard('Tableau de bord', 'fa fa-home'),
yield MenuItem::section('Général'),
yield MenuItem::linkToCrud('Messages', 'fa fa-envelope', Contact::class),
yield MenuItem::linkToCrud('Module SEO', 'fa fa-bar-chart', Page::class),
yield MenuItem::section('Contenus'),
yield MenuItem::linkToCrud("Slider - Accueil", 'fa fa-camera', LandingSlider::class),
yield MenuItem::section('Qui sommes-nous'),
yield MenuItem::linkToCrud("Bannière", 'fa fa-home', PresentationPage::class),
yield MenuItem::linkToCrud("Paragraphes", 'fa fa-handshake', PresentationParagraph::class),
yield MenuItem::section('Applications'),
yield MenuItem::linkToCrud('Applications', 'fa fa-newspaper-o', Application::class),
yield MenuItem::linkToCrud("Paragraphes", 'fa fa-list', ApplicationParagraph::class),
yield MenuItem::section('Actualités'),
yield MenuItem::linkToCrud('Bannière', 'fa fa-home', ActualitePage::class),
yield MenuItem::linkToCrud('Actualités', 'fa fa-newspaper-o', Post::class),
yield MenuItem::linkToCrud("Catégories", 'fa fa-list', PostCategory::class),
yield MenuItem::linkToCrud("Medias", 'fa fa-camera', PostMedia::class),
yield MenuItem::section('Documents'),
yield MenuItem::linkToCrud("Bannière", 'fa fa-home', DocumentPage::class),
yield MenuItem::linkToCrud("Documents", 'fa fa-newspaper-o', Document::class),
yield MenuItem::linkToCrud("Catégories", 'fa fa-list', DocumentCategory::class),
yield MenuItem::section('Fabrication sur-mesure'),
yield MenuItem::linkToCrud("Bannière", 'fa fa-home', FabricationPage::class),
yield MenuItem::linkToCrud("Paragraphes", 'fa fa-list', FabricationParagraph::class),
yield MenuItem::section('Produits'),
yield MenuItem::linkToCrud("Catégories", 'fa fa-list', Category::class),
yield MenuItem::linkToCrud("Sous-catégories", 'fa fa-list-ol', SubCategory::class),
yield MenuItem::linkToCrud("Sous-sous-catégories", 'fa fa-list-ol', SubSubCategory::class),
yield MenuItem::linkToCrud("Sous-sous-sous-catégories", 'fa fa-list-ol', SubSubSubCategory::class),
yield MenuItem::linkToCrud("Produits", 'fa fa-suitcase', Product::class),
// yield MenuItem::linkToCrud("Photos", 'fa fa-camera', ProductMedia::class),
// yield MenuItem::linkToCrud("Caractéristiques techniques", 'fa fa-handshake', ProductTable::class),
// yield MenuItem::linkToCrud("Colonnes - Tableau", 'fa fa-building', ProductTableColumn::class),
];
}
/**
* @Route("/admin/paragraph-position", name="admin_paragraph_position")
*/
public function paragraphPosition(ManagerRegistry $managerRegistry, Request $request)
{
$position = $request->request->get('position', null);
$id = $request->request->get('id', null);
$repoParagraph = $managerRegistry->getRepository(Paragraph::class);
$paragraph = $repoParagraph->find($id);
if ($paragraph) {
$paragraph->setPosition($position);
$em = $managerRegistry->getManager();
$em->flush();
}
$response = new Response(json_encode(array('status' => 'success')));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
/**
* @Route("/supprimer-un-paragraphe/{id}", name="admin_delete_paragraph")
*/
public function deleteParagraph(ManagerRegistry $managerRegistry, Request $request, Paragraph $paragraph)
{
$post = $paragraph->getPost();
$em = $managerRegistry->getManager();
$em->remove($paragraph);
$em->flush();
$this->addFlash("success", "Paragraphe supprimé.");
return $this->redirectToRoute('admin_edit_post', ['slug' => $post->getSlug()]);
}
/**
* @Route("/admin/edition-d-un-article/{slug}/{paragraphId}", name="admin_edit_post")
*/
public function editPost(Request $request, ManagerRegistry $managerRegistry, string $slug, $paragraphId = null)
{
$repoPostTranslation = $managerRegistry->getRepository(PostTranslation::class);
$postTranslation = $repoPostTranslation->findOneBy(["slug" => $slug]);
if ($postTranslation and $post = $postTranslation->getTranslatable()) {
$repoParagraph = $managerRegistry->getRepository(Paragraph::class);
$paragraph = ($paragraphId and $repoParagraph->findOneBy(["post" => $post, "id" => $paragraphId])) ? $repoParagraph->findOneBy(["post" => $post, "id" => $paragraphId]) : new Paragraph();
$paragraph->setPost($post);
$paragraphForm = $this->createForm(ParagraphType::class, $paragraph);
$paragraphForm->handleRequest($request);
if ($paragraphForm->isSubmitted() && $paragraphForm->isValid()) {
$em = $managerRegistry->getManager();
$em->persist($paragraph);
$em->flush();
$this->addFlash("success", "Paragraphe enregistré.");
return $this->redirectToRoute('admin_edit_post', ["slug" => $post->getSlug()]);
}
$paragraphs = $repoParagraph->findBy(["post" => $post], ["position" => "asc"]);
return $this->render('admin/editPost.html.twig', [
'paragraphForm' => $paragraphForm->createView(),
'post' => $post,
"paragraphs" => $paragraphs
]);
} else {
$this->addFlash("danger", "admin.post_not_found");
return $this->redirectToRoute('admin');
}
}
}