]> Raphaël G. Git Repositories - packbundle/blobdiff - Extension/PackExtension.php
Add todo
[packbundle] / Extension / PackExtension.php
index 91a7a897907ee9ae529fbf3fe32b7199eb707a5b..ac0071a94a1ea6b9ea0afdc2bcbd450dcefe230f 100644 (file)
@@ -1,12 +1,28 @@
-<?php
-// src/Rapsys/PackBundle/Twig/PackExtension.php
-namespace Rapsys\PackBundle\Twig;
+<?php declare(strict_types=1);
+
+/*
+ * This file is part of the Rapsys PackBundle package.
+ *
+ * (c) Raphaël Gertz <symfony@rapsys.eu>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Rapsys\PackBundle\Extension;
 
-use Symfony\Component\HttpKernel\Config\FileLocator;
-use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\Asset\PackageInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\HttpKernel\Config\FileLocator;
 use Twig\Extension\AbstractExtension;
 
+use Rapsys\PackBundle\Parser\TokenParser;
+use Rapsys\PackBundle\RapsysPackBundle;
+use Rapsys\PackBundle\Util\SluggerUtil;
+
+/**
+ * {@inheritdoc}
+ */
 class PackExtension extends AbstractExtension {
        //The config
        private $config;
@@ -17,21 +33,38 @@ class PackExtension extends AbstractExtension {
        //The filter
        private $filters;
 
+       //The intl util
+       protected $intl;
+
        //The file locator
        protected $locator;
 
        //The assets package
        protected $package;
 
-       public function __construct(FileLocator $locator, ContainerInterface $container, PackageInterface $package) {
+       //The slugger util
+       protected $slugger;
+
+       /**
+        * @link https://twig.symfony.com/doc/2.x/advanced.html
+        *
+        * {@inheritdoc}
+        */
+       public function __construct(ContainerInterface $container, IntlUtil $intl, FileLocator $locator, PackageInterface $package, SluggerUtil $slugger) {
+               //Set intl util
+               $this->intl = $intl;
+
                //Set file locator
                $this->locator = $locator;
 
                //Set assets packages
                $this->package = $package;
 
+               //Set slugger util
+               $this->slugger = $slugger;
+
                //Retrieve bundle config
-               if ($parameters = $container->getParameter($this->getAlias())) {
+               if ($parameters = $container->getParameter(self::getAlias())) {
                        //Set config, output and filters arrays
                        foreach(['config', 'output', 'filters'] as $k) {
                                $this->$k = $parameters[$k];
@@ -39,18 +72,42 @@ class PackExtension extends AbstractExtension {
                }
        }
 
-       public function getTokenParsers() {
+       /**
+        * Returns a list of filters to add to the existing list.
+        *
+        * @return \Twig\TwigFilter[]
+        */
+       public function getTokenParsers(): array {
+               return [
+                       new TokenParser($this->locator, $this->package, $this->config, 'stylesheet', $this->output['css'], $this->filters['css']),
+                       new TokenParser($this->locator, $this->package, $this->config, 'javascript', $this->output['js'], $this->filters['js']),
+                       new TokenParser($this->locator, $this->package, $this->config, 'image', $this->output['img'], $this->filters['img'])
+               ];
+       }
+
+       /**
+        * Returns a list of filters to add to the existing list.
+        *
+        * @return \Twig\TwigFilter[]
+        */
+       public function getFilters(): array {
                return [
-                       new PackTokenParser($this->locator, $this->package, $this->config, 'stylesheet', $this->output['css'], $this->filters['css']),
-                       new PackTokenParser($this->locator, $this->package, $this->config, 'javascript', $this->output['js'], $this->filters['js']),
-                       new PackTokenParser($this->locator, $this->package, $this->config, 'image', $this->output['img'], $this->filters['img'])
+                       new \Twig\TwigFilter('lcfirst', 'lcfirst'),
+                       new \Twig\TwigFilter('ucfirst', 'ucfirst'),
+                       new \Twig\TwigFilter('hash', [$this->slugger, 'hash']),
+                       new \Twig\TwigFilter('unshort', [$this->slugger, 'unshort']),
+                       new \Twig\TwigFilter('short', [$this->slugger, 'short']),
+                       new \Twig\TwigFilter('slug', [$this->slugger, 'slug']),
+                       new \Twig\TwigFilter('intldate', [$this->intl, 'date'], ['needs_environment' => true]),
+                       new \Twig\TwigFilter('intlnumber', [$this->intl, 'number']),
+                       new \Twig\TwigFilter('intlcurrency', [$this->intl, 'currency'])
                ];
        }
 
        /**
         * {@inheritdoc}
         */
-       public function getAlias() {
-               return 'rapsys_pack';
+       public function getAlias(): string {
+               return RapsysPackBundle::getAlias();
        }
 }