src/Controller/Front/ActualiteController.php line 71

  1. <?php
  2. namespace App\Controller\Front;
  3. use App\Entity\CategorieActu;
  4. use App\Entity\Pole;
  5. use App\Repository\ActualiteRepository;
  6. use App\Repository\PositionBlocsActualiteRepository;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Ttskch\PaginatorBundle\Context;
  13. use Ttskch\PaginatorBundle\Doctrine\Counter;
  14. use Ttskch\PaginatorBundle\Doctrine\Slicer;
  15. use Ttskch\PaginatorBundle\Entity\Criteria;
  16. class ActualiteController extends AbstractController
  17. {
  18.     public function __construct(
  19.         private EntityManagerInterface $entityManager,
  20.         private ActualiteRepository $actualiteRepository
  21.     ) {
  22.     }
  23.     #[Route('/actualites'name'app_actualite_list')]
  24.     public function index(Request $requestActualiteRepository $actualiteRepositoryContext $context): Response
  25.     {
  26.         $poles $this->entityManager->getRepository(Pole::class)->findAll();
  27.         $categories $this->entityManager->getRepository(CategorieActu::class)->findAll();
  28.         $pole $request->get('pole');
  29.         $categorie $request->get('categorie');
  30.         $criteria = new Criteria();
  31.         $criteria->direction 'desc';
  32.         $criteria->sort 'publishedAt';
  33.         if (empty($pole) && empty($categorie)) {
  34.             $dateNow = new \DateTime('now');
  35.             $qb $actualiteRepository->createQueryBuilder('A')
  36.                 ->where('A.visible = true')
  37.                 ->andWhere('A.publishedAt < :dateNow')
  38.                 ->setParameter('dateNow'$dateNow)
  39.             ;
  40.             $context->initialize('id', new Slicer($qb), new Counter($qb), $criteria);
  41.         } else {
  42.             $qb $this->actualiteRepository->findBySearch($pole$categorie);
  43.             // $array = (array) $actualites;
  44.             $context->initialize('id', new Slicer($qb), new Counter($qb), $criteria);
  45.         }
  46.         $nbActus $context->count;
  47.         return $this->render('front/actualite/index.html.twig', [
  48.             'poles' => $poles,
  49.             'categories' => $categories,
  50.             'poleSearch' => $pole,
  51.             'categorieSearch' => $categorie,
  52.             'actualites' => $context->slice,
  53.             'nbActus' => $nbActus,
  54.         ]);
  55.     }
  56.     #[
  57.         Route('/actualite/{actualite<[0-9]\d*>}'name'app_actualite_detail'),
  58.         Route('/actualite/{slug}'name'app_actualite_detail_slug')
  59.     ]
  60.     public function detail(
  61.         ?int $actualite,
  62.         ?string $slug,
  63.         PositionBlocsActualiteRepository $positionBlocsActualiteRepository
  64.     ): Response {
  65.         if (!$slug) {
  66.             $actualite $this->actualiteRepository->find($actualite);
  67.         } else {
  68.             $actualite $this->actualiteRepository->findOneBy(['slug' => $slug]);
  69.         }
  70.         if (null === $actualite || (!$this->isGranted('ROLE_ADMIN') && false === $actualite->isVisible())) {
  71.             throw $this->createNotFoundException('Page not found');
  72.         }
  73.         if ($this->isGranted('ROLE_ADMIN') && false === $actualite->isVisible()) {
  74.             $this->addFlash('success''Cette page est visible car vous ĂȘte administrateur');
  75.         }
  76.         $actualites $this->actualiteRepository->findOther($actualite);
  77.         $tbBlocActu $positionBlocsActualiteRepository->findBy(
  78.             ['actualite' => $actualite],
  79.             ['position' => 'ASC']
  80.         );
  81.         return $this->render('front/actualite/detail.html.twig', [
  82.             'blocActu' => $tbBlocActu,
  83.             'actualite' => $actualite,
  84.             'actualites' => $actualites,
  85.         ]);
  86.     }
  87. }