src/Controller/HomepageController.php line 45

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\News;
  4. use App\Entity\VisitorCount;
  5. use App\Repository\NewsRepository;
  6. use App\Repository\TutoRepository;
  7. use App\Repository\JurisprudenceRepository;
  8. use App\Repository\VisitorCountRepository;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Knp\Component\Pager\Paginator;
  11. use Knp\Component\Pager\PaginatorInterface;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. class HomepageController extends AbstractController
  17. {
  18.     private JurisprudenceRepository $jurisprudenceRepository;
  19.     private NewsRepository $newsRepository;
  20.     private TutoRepository $tutoRepository;
  21.     private VisitorCountRepository $visitorCountRepository;
  22.     private EntityManagerInterface $entityManager;
  23.     public function __construct(
  24.         JurisprudenceRepository $jurisprudenceRepository,
  25.         NewsRepository $newsRepository,
  26.         TutoRepository $tutoRepository,
  27.         VisitorCountRepository $visitorCountRepository,
  28.         EntityManagerInterface $entityManager
  29.     ) {
  30.         $this->jurisprudenceRepository $jurisprudenceRepository;
  31.         $this->newsRepository $newsRepository;
  32.         $this->tutoRepository $tutoRepository;
  33.         $this->visitorCountRepository $visitorCountRepository;
  34.         $this->entityManager $entityManager;
  35.     }
  36.     /**
  37.      * @Route("/", name="default")
  38.      */
  39.     public function default(): Response
  40.     {
  41.         return $this->redirectToRoute('homepage');
  42.     }
  43.     /**
  44.      * @Route("/accueil", name="homepage")
  45.      */
  46.     public function index(Request $requestPaginatorInterface $paginator): Response
  47.     {
  48.         // Stats total
  49.         $totalCount $this->visitorCountRepository->findOneBy(['type' => VisitorCount::TOTAL_VISITORS_TYPE]);
  50.         if ($totalCount) {
  51.             $totalCount->setCounter($totalCount->getCounter() + 1);
  52.         } else {
  53.             $totalCount = new VisitorCount();
  54.             $totalCount->setType(VisitorCount::TOTAL_VISITORS_TYPE);
  55.             $totalCount->setCounter(1);
  56.             $this->entityManager->persist($totalCount);
  57.         }
  58.         $this->entityManager->flush();
  59.         $data = [];
  60.         $category $request->query->get('categorie');
  61.         //Get news
  62.         if (null === $category || 'infos' === $category ) {
  63.             $news $this->newsRepository->findBy(['active' => true]);
  64.             /** @var News $new */
  65.             foreach ($news as $new) {
  66.                 $newsData = [
  67.                     'title' => $new->getTitle(),
  68.                     'content' => $this->cleanContent($new->getContent()),
  69.                     'type' => 'news',
  70.                     'id' => $new->getId()
  71.                 ];
  72.                 $data[$new->getCreatedAt()->getTimestamp()] = $newsData;
  73.             }
  74.         }
  75.         // Get tutos
  76.         if(null === $category || 'tutos' === $category) {
  77.             $tutos $this->tutoRepository->findBy(['active' => true]);
  78.             /** @var Tuto $tuto */
  79.             foreach ($tutos as $tuto) {
  80.                 $tutoData = [
  81.                     'title' => $tuto->getTitle(),
  82.                     'content' => $this->cleanContent($tuto->getContent()),
  83.                     'type' => 'tuto',
  84.                     'id' => $tuto->getId()
  85.                 ];
  86.                 $data[$tuto->getCreatedAt()->getTimestamp()] = $tutoData;
  87.             }
  88.         }
  89.         // Get jp
  90.         if(null === $category || 'jurisprudences' === $category) {
  91.             $jurisprudences $this->jurisprudenceRepository->findBy(['active' => true]);
  92.             /** @var Jurisprudence $jurisprudence */
  93.             foreach ($jurisprudences as $jurisprudence) {
  94.                 $jpData = [
  95.                     'title' => $jurisprudence->getName(),
  96.                     'content' => $this->cleanContent($jurisprudence->getContent()),
  97.                     'type' => 'jurisprudence',
  98.                     'id' => $jurisprudence->getId()
  99.                 ];
  100.                 $data[$jurisprudence->getCreatedAt()->getTimestamp()] = $jpData;
  101.             }
  102.         }
  103.         krsort($data);
  104.         $pagination $paginator->paginate($data$request->query->get('page'1), 6);
  105.         return $this->render('homepage/homepage_default.html.twig', [
  106.             'controller_name' => 'HomepageController',
  107.             'active_menu' => 'homepage',
  108.             'dataContent' => $pagination,
  109.             'categoryRequest' => $category,
  110.             //'search' => $search
  111.         ]);
  112.     }
  113.     /**
  114.      * @Route("/chercher-mot-cle", name="search_by_tag")
  115.      */
  116.     public function searchByTag(Request $request)
  117.     {
  118.         $data = [];
  119.         $tag $request->query->get('tag');
  120.         $category $request->query->get('categorie');
  121.         
  122.         if (null === $category || 'infos' === $category) {
  123.             // Get news
  124.             $news $this->newsRepository->findNewsByTag($tag);
  125.             /** @var News $new */
  126.             foreach ($news as $new) {
  127.                 $newsData = [
  128.                     'title' => $new->getTitle(),
  129.                     'content' => $this->cleanContent($new->getContent()),
  130.                     'type' => 'news',
  131.                     'id' => $new->getId()
  132.                 ];
  133.                 $data[$new->getCreatedAt()->getTimestamp()] = $newsData;
  134.             }
  135.         }
  136.         if (null === $category || 'tutos' === $category) {
  137.             // Get tutos
  138.             $tutos $this->tutoRepository->findTutosByTag($tag);
  139.             /** @var Tuto $tuto */
  140.             foreach ($tutos as $tuto) {
  141.                 $tutoData = [
  142.                     'title' => $tuto->getTitle(),
  143.                     'content' => $this->cleanContent($tuto->getContent()),
  144.                     'type' => 'tuto',
  145.                     'id' => $tuto->getId()
  146.                 ];
  147.                 $data[$tuto->getCreatedAt()->getTimestamp()] = $tutoData;
  148.             }
  149.         }
  150.         if (null === $category || 'jurisprudences' === $category) {
  151.             // Get jp
  152.             $jurisprudences $this->jurisprudenceRepository->findJurisprudencesByTag($tag);
  153.             /** @var Jurisprudence $jurisprudence */
  154.             foreach ($jurisprudences as $jurisprudence) {
  155.                 $jpData = [
  156.                     'title' => $jurisprudence->getName(),
  157.                     'content' => $this->cleanContent($jurisprudence->getContent()),
  158.                     'type' => 'jurisprudence',
  159.                     'id' => $jurisprudence->getId()
  160.                 ];
  161.                 $data[$jurisprudence->getCreatedAt()->getTimestamp()] = $jpData;
  162.             }
  163.         }
  164.         
  165.         ksort($data);
  166.         return $this->render('search/search_by_tag.html.twig', [
  167.             'controller_name' => 'HomepageController',
  168.             'active_menu' => 'homepage',
  169.             'dataContent' => $data,
  170.             'categoryRequest' => $category,
  171.             'tag' => $tag
  172.         ]);
  173.     }
  174.     private function cleanContent(string $content)
  175.     {
  176.         $contentClean strip_tags($content'<br/><br>');
  177.         $contentClean str_replace("&rsquo;""'"$contentClean);
  178.         $contentClean str_replace("&#39;""'"$contentClean);
  179.         return $contentClean;
  180.     }
  181. }