src/Controller/Front/BlogController.php line 84

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.         $pagination $paginator->paginate(
  64.             $blogPosts,
  65.             $request->query->getInt('page'1)
  66.         );
  67.         return $this->render('front_v4/mca/blog/list.html.twig', [
  68.             'pillarPages' => $blogPostRepository->findRandomPillarPages(3),
  69.             'randomPageByCategory' => $randomPageCategory,
  70.             'featuredCategory' => $featuredCategory,
  71.             'featuredLastedPostByCategory' => $lastedByCategory,
  72.             'pagination' => $pagination,
  73.             'form' => $form->createView(),
  74.         ]);
  75.     }
  76.     /**
  77.      * @Route("/blog/{slug}", name="blog_post_show")
  78.      * @param Request $request
  79.      * @param EntityManagerInterface $entityManager
  80.      * @param BlogPost $blogPost
  81.      * @param BlogPostRepository $blogPostRepository
  82.      * @return Response
  83.      */
  84.     public function showPostAction(
  85.         Request $request,
  86.         EntityManagerInterface $entityManager,
  87.         BlogPost $blogPost,
  88.         BlogPostRepository $blogPostRepository
  89.     ): ?Response
  90.     {
  91.         $prospect = new Prospect();
  92.         $this->prefiledProspectWithGetParam($request$prospect);
  93.         $prospectForm $this->createForm(ProspectType::class, $prospect);
  94.         $prospectForm->handleRequest($request);
  95.         if ($prospectForm->isSubmitted() && $prospectForm->isValid()) {
  96.             $this->get("security.csrf.token_manager")->refreshToken("prospect_token");
  97.             // already TYPE_CHECKUP on landing page
  98.             $prospect->setRequest(Prospect::TYPE_CHECKUP);
  99.             // create a prospect or redirect to a specific page if duplicate has been found
  100.             $redirection $this->createProspectOrRedirect($prospect);
  101.             // apply redirection if one is returned
  102.             if (!is_null($redirection)) {
  103.                 return $redirection;
  104.             }
  105.             $entityManager->flush();
  106.             unset($prospectForm);
  107.             return $this->redirectToSuccessPage($prospect$request->getPathInfo());
  108.         }
  109.         return $this->render('front_v4/mca/blog/single.html.twig', [
  110.             'formProspect' => $prospectForm->createView(),
  111.             'blogPost' => $blogPost,
  112.             'relatedCategoryPosts' => $blogPostRepository->findByBlogCategory($blogPost->getBlogCategory(), ['createdAt' => 'ASC'], 3),
  113.             'pilarPosts' => $blogPostRepository->findRandomPillarPages(3$blogPost->isIsPillarPage() ? $blogPost->getId() : null)
  114.         ]);
  115.     }
  116.     /**
  117.      * @Route("/blog/auteur/{id}", name="blog_author_show", requirements={"page"="\d+"})
  118.      */
  119.     public function showAuthorAction(Request $requestBlogAuthor $authorPaginatorInterface $paginator): Response
  120.     {
  121.         $pagination $paginator->paginate(
  122.             $author->getBlogPosts(),
  123.             $request->query->getInt('page'1)
  124.         );
  125.         return $this->render('front_v4/mca/author/single.html.twig', [
  126.             'author' => $author,
  127.             'pagination' => $pagination
  128.         ]);
  129.     }
  130. }