src/Controller/Front/BlogController.php line 101

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by PhpStorm.
  4.  * User: michael
  5.  * Date: 26/06/2019
  6.  * Time: 10:54
  7.  */
  8. namespace App\Controller\Front;
  9. use App\Controller\Front\LandingPage\AbstractProspectCreationController;
  10. use App\Entity\BlogAuthor;
  11. use App\Entity\BlogPost;
  12. use App\Entity\Prospect;
  13. use App\Form\FilterBlogPostType;
  14. use App\Form\Model\FilterBlogPostModel;
  15. use App\Form\ProspectType;
  16. use App\Repository\BlogCategoryRepository;
  17. use App\Repository\BlogPostRepository;
  18. use Doctrine\ORM\EntityManagerInterface;
  19. use Doctrine\ORM\NonUniqueResultException;
  20. use Exception;
  21. use Knp\Component\Pager\PaginatorInterface;
  22. use Symfony\Component\Form\FormFactoryInterface;
  23. use Symfony\Component\HttpFoundation\Request;
  24. use Symfony\Component\HttpFoundation\Response;
  25. use Symfony\Component\Routing\Annotation\Route;
  26. /**
  27.  * Class BlogController
  28.  * @package App\Controller
  29.  */
  30. class BlogController extends AbstractProspectCreationController
  31. {
  32.     /**
  33.      * @Route("/blog", name="blog_post_all")
  34.      * @param BlogPostRepository $blogPostRepository
  35.      * @param BlogCategoryRepository $blogCategoryRepository
  36.      * @param PaginatorInterface $paginator
  37.      * @param FormFactoryInterface $formFactory
  38.      * @param Request $request
  39.      * @return Response
  40.      * @throws NonUniqueResultException
  41.      */
  42.     public function showAllPostAction(BlogPostRepository $blogPostRepositoryBlogCategoryRepository $blogCategoryRepositoryPaginatorInterface $paginatorFormFactoryInterface $formFactoryRequest $request): Response
  43.     {
  44.         // filtre de recherche des articles
  45.         $filter = new FilterBlogPostModel();
  46.         $form $formFactory->create(FilterBlogPostType::class, $filter);
  47.         $form->handleRequest($request);
  48.         $blogPosts $blogPostRepository->getFilteredBlogPost($filter);
  49.         $lastedByCategory = [];
  50.         try {
  51.             $featuredCategory $blogCategoryRepository->findRandomCategory();
  52.         } catch (Exception $e) {
  53.             $featuredCategory $blogCategoryRepository->findBy(['id' => 1]);
  54.         }
  55.         if($featuredCategory) {
  56.             $lastedByCategory $blogPostRepository->findBy(['blogCategory' => $featuredCategory->getId()], ['createdAt' => 'DESC'], 3);
  57.         }
  58.         $categories $blogPostRepository->findCategoriesWithNoPillarArticles();
  59.         $randomPageCategory = [];
  60.         foreach ($categories as $category) {
  61.             $randomPageCategory[] = $blogPostRepository->findRandomNotPillarPageByCategory($category);
  62.         }
  63.         //check that page parameter is an integer
  64.         if (!is_numeric($request->query->get('page'1))) {
  65.             throw $this->createNotFoundException('The page parameter must be an integer');
  66.         }
  67.         $pagination $paginator->paginate(
  68.             $blogPosts,
  69.             $request->query->getInt('page'1)
  70.         );
  71.         return $this->render('front_v4/mca/blog/list.html.twig', [
  72.             'pillarPages' => $blogPostRepository->findRandomPillarPages(3),
  73.             'randomPageByCategory' => $randomPageCategory,
  74.             'featuredCategory' => $featuredCategory,
  75.             'featuredLastedPostByCategory' => $lastedByCategory,
  76.             'pagination' => $pagination,
  77.             'form' => $form->createView(),
  78.         ]);
  79.     }
  80.     /**
  81.      * @Route("/blog/{slug}", name="blog_post_show")
  82.      * @param Request $request
  83.      * @param EntityManagerInterface $entityManager
  84.      * @param BlogPost $blogPost
  85.      * @param BlogPostRepository $blogPostRepository
  86.      * @return Response
  87.      */
  88.     public function showPostAction(
  89.         Request $request,
  90.         EntityManagerInterface $entityManager,
  91.         BlogPost $blogPost,
  92.         BlogPostRepository $blogPostRepository
  93.     ): ?Response
  94.     {
  95.         $prospect = new Prospect();
  96.         $this->prefiledProspectWithGetParam($request$prospect);
  97.         $prospectForm $this->createForm(ProspectType::class, $prospect);
  98.         $prospectForm->handleRequest($request);
  99.         if ($prospectForm->isSubmitted() && $prospectForm->isValid()) {
  100.             $this->get("security.csrf.token_manager")->refreshToken("prospect_token");
  101.             // already TYPE_CHECKUP on landing page
  102.             $prospect->setRequest(Prospect::TYPE_CHECKUP);
  103.             // create a prospect or redirect to a specific page if duplicate has been found
  104.             $redirection $this->createProspectOrRedirect($prospect);
  105.             // apply redirection if one is returned
  106.             if (!is_null($redirection)) {
  107.                 return $redirection;
  108.             }
  109.             $entityManager->flush();
  110.             unset($prospectForm);
  111.             return $this->redirectToSuccessPage($prospect$request->getPathInfo());
  112.         }
  113.         return $this->render('front_v4/mca/blog/single.html.twig', [
  114.             'formProspect' => $prospectForm->createView(),
  115.             'blogPost' => $blogPost,
  116.             'relatedCategoryPosts' => $blogPostRepository->findByBlogCategory($blogPost->getBlogCategory(), ['createdAt' => 'ASC'], 3),
  117.             'pilarPosts' => $blogPostRepository->findRandomPillarPages(3$blogPost->isIsPillarPage() ? $blogPost->getId() : null)
  118.         ]);
  119.     }
  120.     /**
  121.      * @Route("/blog/auteur/{id}", name="blog_author_show", requirements={"page"="\d+"})
  122.      */
  123.     public function showAuthorAction(Request $requestBlogAuthor $authorPaginatorInterface $paginator): Response
  124.     {
  125.         $pagination $paginator->paginate(
  126.             $author->getBlogPosts(),
  127.             $request->query->getInt('page'1)
  128.         );
  129.         return $this->render('front_v4/mca/author/single.html.twig', [
  130.             'author' => $author,
  131.             'pagination' => $pagination
  132.         ]);
  133.     }
  134. }