vendor/kunstmaan/article-bundle/Twig/ArticleTwigExtension.php line 169

Open in your IDE?
  1. <?php
  2. namespace Kunstmaan\ArticleBundle\Twig;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  6. use Symfony\Component\Routing\RouterInterface;
  7. use Twig\Extension\AbstractExtension;
  8. use Twig\TwigFunction;
  9. /**
  10.  * Extension for article bundle.
  11.  *
  12.  * @final since 5.4
  13.  */
  14. class ArticleTwigExtension extends AbstractExtension
  15. {
  16.     /**
  17.      * @var EntityManagerInterface
  18.      */
  19.     private $em;
  20.     /**
  21.      * @var RouterInterface
  22.      */
  23.     private $router;
  24.     /**
  25.      * ArticleTwigExtension constructor.
  26.      *
  27.      * @param EntityManagerInterface $em
  28.      * @param RouterInterface        $router
  29.      */
  30.     public function __construct(EntityManagerInterface $emRouterInterface $router)
  31.     {
  32.         $this->em $em;
  33.         $this->router $router;
  34.         if (\func_num_args() > 2) {
  35.             @trigger_error(sprintf('Passing the "request_stack" service as the third argument in "%s" is deprecated in KunstmaanArticleBundle 5.1 and will be removed in KunstmaanArticleBundle 6.0. Remove the "request_stack" argument from your service definition.'__METHOD__), E_USER_DEPRECATED);
  36.         }
  37.     }
  38.     /**
  39.      * Returns a list of functions to add to the existing list.
  40.      *
  41.      * @return array An array of functions
  42.      */
  43.     public function getFunctions()
  44.     {
  45.         return array(
  46.             new TwigFunction(
  47.                 'get_article_tag_path', array($this'getArticleTagRouterPath')
  48.             ),
  49.             new TwigFunction(
  50.                 'get_article_category_path', array($this'getArticleCategoryRouterPath')
  51.             ),
  52.             new TwigFunction(
  53.                 'get_article_categories', array($this'getCategories')
  54.             ),
  55.             new TwigFunction(
  56.                 'get_article_tags', array($this'getTags')
  57.             ),
  58.         );
  59.     }
  60.     /**
  61.      * Get tags array for view.
  62.      *
  63.      * @param Request $request
  64.      * @param string  $className
  65.      *
  66.      * @return array
  67.      */
  68.     public function getTags(Request $request$className)
  69.     {
  70.         $context = array();
  71.         $tagRepository $this->em->getRepository($className);
  72.         $context['tags'] = $tagRepository->findBy(array(), array('name' => 'ASC'));
  73.         $searchTag $request->get('tag') ? explode(','$request->get('tag')) : null;
  74.         if ($searchTag) {
  75.             $context['activeTag'] = true;
  76.             $context['activeTags'] = $searchTag;
  77.         }
  78.         return $context;
  79.     }
  80.     /**
  81.      * Get categories array for view.
  82.      *
  83.      * @param Request $request
  84.      * @param string  $className
  85.      *
  86.      * @return array
  87.      */
  88.     public function getCategories(Request $request$className)
  89.     {
  90.         $context = array();
  91.         $categoryRepository $this->em->getRepository($className);
  92.         $context['categories'] = $categoryRepository->findBy(array(), array('name' => 'ASC'));
  93.         $searchCategory $request->get('category') ? explode(','$request->get('category')) : null;
  94.         if ($searchCategory) {
  95.             $context['activeCategory'] = true;
  96.             $context['activeCategories'] = $searchCategory;
  97.         }
  98.         return $context;
  99.     }
  100.     /**
  101.      * @param string $slug
  102.      * @param string $tag
  103.      * @param string $locale
  104.      * @param array  $parameters
  105.      * @param int    $referenceType
  106.      *
  107.      * @return string
  108.      */
  109.     public function getArticleTagRouterPath($slug$tag$locale$parameters = [], $referenceType UrlGeneratorInterface::ABSOLUTE_PATH)
  110.     {
  111.         $routeName sprintf('_slug_tag_%s'$locale);
  112.         return $this->getArticleRouterPath($routeName'tag'$slug$tag$locale$parameters$referenceType);
  113.     }
  114.     /**
  115.      * @param string $slug
  116.      * @param string $category
  117.      * @param string $locale
  118.      * @param array  $parameters
  119.      * @param int    $referenceType
  120.      *
  121.      * @return string
  122.      */
  123.     public function getArticleCategoryRouterPath($slug$category$locale$parameters = [], $referenceType UrlGeneratorInterface::ABSOLUTE_PATH)
  124.     {
  125.         $routeName sprintf('_slug_category_%s'$locale);
  126.         return $this->getArticleRouterPath($routeName'category'$slug$category$locale$parameters$referenceType);
  127.     }
  128.     /**
  129.      * @return string
  130.      */
  131.     public function getName()
  132.     {
  133.         return 'article_twig_extension';
  134.     }
  135.     /**
  136.      * @param string $routeName
  137.      * @param string $type
  138.      * @param string $slug
  139.      * @param string $tagOrCategory
  140.      * @param string $locale
  141.      * @param array  $parameters
  142.      * @param int    $referenceType
  143.      *
  144.      * @return string
  145.      */
  146.     protected function getArticleRouterPath($routeName$type$slug$tagOrCategory$locale$parameters = [], $referenceType UrlGeneratorInterface::ABSOLUTE_PATH)
  147.     {
  148.         if (!$this->articleRouteExists($type$locale)) {
  149.             $routeName '_slug';
  150.         }
  151.         if (!isset($parameters[$type])) {
  152.             $parameters[$type] = $tagOrCategory;
  153.         }
  154.         if (!isset($parameters['url'])) {
  155.             $parameters['url'] = $slug;
  156.         }
  157.         if (!isset($parameters['_locale'])) {
  158.             $parameters['_locale'] = $locale;
  159.         }
  160.         return $this->router->generate($routeName$parameters$referenceType);
  161.     }
  162.     /**
  163.      * @param string $type
  164.      * @param string $locale
  165.      *
  166.      * @return bool
  167.      */
  168.     protected function articleRouteExists($type$locale)
  169.     {
  170.         $routeName sprintf('_slug_%s_%s'$type$locale);
  171.         try {
  172.             return !\is_null($this->router->getRouteCollection()->get($routeName));
  173.         } catch (\Exception $e) {
  174.             return false;
  175.         }
  176.     }
  177. }