src/Controller/BlogController.php line 127

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Blog;
  4. use App\Entity\DeliveryCountry;
  5. use App\Entity\DeliveryMethod;
  6. use App\Exception\CartException;
  7. use App\Form\Handler\CartHandler;
  8. use App\Form\Type\CartType;
  9. use App\Helper\VeltisControllerTrait;
  10. use App\Repository\BlogRepository;
  11. use App\Repository\DeliveryCountryRepository;
  12. use App\Repository\DeliveryMethodRepository;
  13. use App\Repository\LanguageRepository;
  14. use App\Repository\ProductRepository;
  15. use App\Services\CartService;
  16. use App\Twig\AppExtension;
  17. use Doctrine\Common\Collections\ArrayCollection;
  18. use FOS\RestBundle\Controller\FOSRestController;
  19. use Knp\Component\Pager\PaginatorInterface;
  20. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  21. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  22. use FOS\RestBundle\Controller\Annotations as Rest;
  23. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  24. use Symfony\Component\BrowserKit\Response;
  25. use Symfony\Component\HttpFoundation\JsonResponse;
  26. use Symfony\Component\HttpFoundation\RedirectResponse;
  27. use Symfony\Component\HttpFoundation\Request;
  28. use FOS\RestBundle\View\View;
  29. use Symfony\Component\HttpKernel\Exception\NotAcceptableHttpException;
  30. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  31. class BlogController  extends AbstractController
  32. {
  33.     use VeltisControllerTrait;
  34.     private function prepareTags($pagination) {
  35.         $tags = [];
  36.         /** @var $blog Blog */
  37.         foreach ($pagination as $blog) {
  38.             $blogTags explode(","$blog->getTags());
  39.             foreach ($blogTags as $tag) {
  40.                 if (!in_array($tag$tags)) {
  41.                     $tags[] = trim($tag);
  42.                 }
  43.             }
  44.         }
  45.         return $tags;
  46.     }
  47.     /**
  48.      * @Route("/blog/tags/{name}", name="blogs_by_tags")
  49.      */
  50.     public function byTagsAction(Request $requestBlogRepository $blogRepositoryPaginatorInterface $paginator)
  51.     {
  52.         $entries $blogRepository->getBlogByTags($request->getLocale(), $request->attributes->get('name'));
  53.         $pagination $paginator->paginate($entries$request->query->getInt('page'1)/*page number*/15, ['wrap-queries'=>true]);
  54.         return $this->render('frontend/blog/blog.html.twig', [
  55.             'entries' => $pagination,
  56.             'tags' => $this->prepareTags($pagination),
  57.         ]);
  58.     }
  59.     /**
  60.      * @Route("/blog", name="blog")
  61.      */
  62.     public function indexAction(Request $requestBlogRepository $blogRepositoryPaginatorInterface $paginator)
  63.     {
  64.         $entries $blogRepository->getBlogByLanguage($request->getLocale());
  65.         $pagination $paginator->paginate($entries$request->query->getInt('page'1)/*page number*/15, ['wrap-queries'=>true]);
  66.         return $this->render('frontend/blog/blog.html.twig', [
  67.             'tags' => $this->prepareTags($pagination),
  68.             'entries' => $pagination,
  69.         ]);
  70.     }
  71.     /**
  72.      * @Route("/blog/{id}/{slug}", name="blog_entry")
  73.      */
  74.     public function entryAction(Request $requestBlogRepository $blogRepositoryProductRepository $productRepository)
  75.     {
  76.         /** @var $blog Blog */
  77.         $blog $blogRepository->getRepository()->findOneBy(['id'=>$request->attributes->get('id'), 'deletedBy'=>null]);
  78.         if (!$blog) {
  79.             throw new NotFoundHttpException();
  80.         }
  81.         $entries $blogRepository->getBlogByLanguage($request->getLocale())->getQuery()->getResult();
  82.         $previous $blogRepository->getPrevious($request->getLocale(), $request->attributes->get('id'))->getQuery()->getResult();
  83.         $previousEntry false;
  84.         if (count($previous)) {
  85.             $previousEntry $previous[0];
  86.         }
  87.         $next $blogRepository->getNext($request->getLocale(), $request->attributes->get('id'))->getQuery()->getResult();
  88.         $nextEntry false;
  89.         if (count($next)) {
  90.             $nextEntry $next[0];
  91.         }
  92.         $language $blog->getLanguage();
  93.         $locale $request->getLocale();
  94.         if ($language->getLocale() != $locale) {
  95.             throw new NotFoundHttpException();
  96.         }
  97.         if ($request->attributes->get('slug') !== $blog->getSlug()) {
  98.             return $this->redirect($this->generateUrl('blog_entry', ['id'=>$blog->getId(), 'slug'=>$blog->getSlug()]), 301);
  99.         }
  100.         $products $productRepository->getForBlogEntry($blog, ['locale'=>$blog->getLanguage()->getLocale()])->getQuery()->getResult();
  101.         return $this->render('frontend/blog/entry.html.twig', [
  102.             'blog' => $blog,
  103.             'nextEntry' => $nextEntry,
  104.             'products' => $products,
  105.             'language' => $blog->getLanguage(),
  106.             'previousEntry' => $previousEntry,
  107.             'entries' => $entries,
  108.         ]);
  109.     }
  110.     /**
  111.      * @Route("/blog/{id}/{slug}/c", name="blog_entry_old_url")
  112.      */
  113.     public function entryOldUrlAction(Request $requestBlogRepository $blogRepository)
  114.     {
  115.         return new RedirectResponse($this->generateUrl('blog_entry', ['id'=>$request->attributes->get('id'), 'slug'=>$request->attributes->get('slug')]), 301);
  116.     }
  117. }