<?php
namespace App\Controller\Admin;
use App\Entity\Catalog;
use App\Entity\Category;
use App\Entity\Contact;
use App\Entity\History;
use App\Entity\JobOffer;
use App\Entity\JobOfferParagraph;
use App\Entity\LandingContact;
use App\Entity\LandingPage;
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\PhaseEvolution;
use App\Entity\Post;
use App\Entity\PostCategory;
use App\Entity\PostMedia;
use App\Entity\PostTranslation;
use App\Entity\Presentation;
use App\Entity\PresentationParagraph;
use App\Entity\PresentationValue;
use App\Entity\Product;
use App\Entity\ProductAddon;
use App\Entity\ProductBrochure;
use App\Entity\ProductKeyFeature;
use App\Entity\ProductMedia;
use App\Entity\ProductParagraph;
use App\Entity\Project;
use App\Entity\Publication;
use App\Entity\PublicationCategory;
use App\Entity\Setting;
use App\Entity\SubCategory;
use App\Entity\Support;
use App\Entity\Test;
use App\Entity\Testimonial;
use App\Entity\TestOk;
use App\Entity\User;
use App\Form\ParagraphType;
use App\Service\RoleLocaleService;
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::linkToCrud('Inscriptions à la newsletter', 'fa fa-users', Newsletter::class),
yield MenuItem::linkToCrud('Catalogues', 'fa fa-file', Catalog::class),
yield MenuItem::linkToCrud('Téléchargements de catalogue', 'fa fa-download', LandingContact::class),
yield MenuItem::linkToCrud('Paramètres', 'fa fa-gear', Setting::class),
yield MenuItem::linkToCrud('Support', 'fa fa-bullseye', Support::class),
yield MenuItem::section('Contenus'),
yield MenuItem::linkToCrud('Partenaires', 'fa fa-handshake', Partner::class),
yield MenuItem::linkToCrud('Collaborateurs', 'fa fa-user', Member::class),
yield MenuItem::linkToCrud("Présentation", 'fa fa-bullseye', Presentation::class),
yield MenuItem::linkToCrud("Présentation - Paragraphes", 'fa fa-bullseye', PresentationParagraph::class),
yield MenuItem::linkToCrud("Présentation - Valeurs", 'fa fa-handshake', PresentationValue::class),
yield MenuItem::linkToCrud("Landing Pages", 'fa fa-list', LandingPage::class),
yield MenuItem::section('Actualités'),
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('Produits'),
yield MenuItem::linkToCrud("Espèces", 'fa fa-star', Category::class),
yield MenuItem::linkToCrud("Applications", 'fa fa-list-ol', SubCategory::class),
yield MenuItem::linkToCrud("Produits", 'fa fa-bullseye', Product::class),
yield MenuItem::linkToCrud("Phases d'évolution", 'fa fa-handshake', PhaseEvolution::class),
yield MenuItem::linkToCrud("Paragraphes", 'fa fa-list', ProductParagraph::class),
yield MenuItem::linkToCrud("Fonctionnalités clé", 'fa fa-list-ol', ProductKeyFeature::class),
yield MenuItem::linkToCrud("Add-ons", 'fa fa-bar-chart', ProductAddon::class),
yield MenuItem::linkToCrud("Brochures", 'fa fa-suitcase', ProductBrochure::class),
yield MenuItem::linkToCrud("Medias", 'fa fa-building', ProductMedia::class),
yield MenuItem::section('Publications'),
yield MenuItem::linkToCrud("Publications", 'fa fa-bullseye', Publication::class),
yield MenuItem::linkToCrud("Domaines d'expérimentations", 'fa fa-handshake', PublicationCategory::class),
$this->isGranted('ROLE_ADMIN') ? yield MenuItem::section('Utilisateurs') : null,
$this->isGranted('ROLE_ADMIN') ? yield MenuItem::linkToCrud("Utilisateurs", 'fa fa-user', User::class) : null,
];
}
/**
* @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(RoleLocaleService $rls, 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, array('locales' => $rls->getTranslationLocales(false)));
$paragraphForm->handleRequest($request);
if ($paragraphForm->isSubmitted() && $paragraphForm->isValid()) {
if ($paragraph->getId()) {
$paragraph->setUpdator($this->getUser());
$paragraph->setUpdatedAt(new \DateTime());
} else {
$paragraph->setCreator($this->getUser());
$paragraph->setCreatedAt(new \DateTime());
}
$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"]);
/** @var Paragraph $p */
// $p = $paragraphs[0];
// $p->setCurrentLocale();
return $this->render('admin/editPost.html.twig', [
'paragraphForm' => $paragraphForm->createView(),
'post' => $post,
'editedParagraph' => $paragraph,
"paragraphs" => $paragraphs
]);
} else {
$this->addFlash("danger", "admin.post_not_found");
return $this->redirectToRoute('admin');
}
}
}