X-Git-Url: https://git.rapsys.eu/.gitweb.cgi/packbundle/blobdiff_plain/575d559e5aea5e099ba7784547b1aa359d28fb8c..5ee696001dcaf768969f0b9f0af1c703218678cc:/Twig/PackExtension.php?ds=sidebyside diff --git a/Twig/PackExtension.php b/Twig/PackExtension.php index 3b4aa07..ee84c47 100644 --- a/Twig/PackExtension.php +++ b/Twig/PackExtension.php @@ -4,34 +4,43 @@ namespace Rapsys\PackBundle\Twig; use Symfony\Component\HttpKernel\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerInterface; +use Symfony\Component\Asset\Packages; +use Twig\TwigFilter; class PackExtension extends \Twig_Extension { - #, $prefix = '@RapsysPackBundle/Resources/public/', $cpack = '/usr/local/bin/cpack', $jpack = '/usr/local/bin/jpack' - #$this->kernel = $kernel; - public function __construct(FileLocator $fileLocator, ContainerInterface $containerInterface) { + public function __construct(FileLocator $fileLocator, ContainerInterface $containerInterface, Packages $assetsPackages) { //Set file locator $this->fileLocator = $fileLocator; //Set container interface $this->containerInterface = $containerInterface; + //Set assets packages + $this->assetsPackages = $assetsPackages; //Set default prefix - $this->prefix = '@RapsysPackBundle/Resources/public/'; + //XXX: require symfony 3.3 + $this->prefix = $this->containerInterface->getParameter('kernel.project_dir').'/web/'; //Set default coutput $this->coutput = 'css/*.pack.css'; //Set default joutput $this->joutput = 'js/*.pack.js'; + //Set default ioutput + $this->ioutput = 'img/*.pack.jpg'; - //Set default cpack - $this->cpack = '/usr/local/bin/cpack'; - //Set default jpack - $this->jpack = '/usr/local/bin/jpack'; + //Set default cfilter + $this->cfilter = array('CPackFilter'); + //Set default jfilter + $this->jfilter = array('JPackFilter'); + //Set default ifilter + $this->ifilter = array('IPackFilter'); //Load configuration if ($containerInterface->hasParameter('rapsys_pack')) { - foreach($containerInterface->getParameter('rapsys_pack') as $k => $v) { - if (isset($this->$k)) { - $this->$k = $v; + if ($parameters = $containerInterface->getParameter('rapsys_pack')) { + foreach($parameters as $k => $v) { + if (isset($this->$k) && !empty($v)) { + $this->$k = $v; + } } } } @@ -42,9 +51,68 @@ class PackExtension extends \Twig_Extension { public function getTokenParsers() { return array( - new PackTokenParser($this->fileLocator, $this->containerInterface, $this->prefix, 'stylesheets', $this->coutput, $this->cpack), - new PackTokenParser($this->fileLocator, $this->containerInterface, $this->prefix, 'javascripts', $this->joutput, $this->jpack), - #new PackTokenParser($this->fileLocator, $this->containerInterface, $this->prefix, 'image', '*.pack.{tld}'), + new PackTokenParser($this->fileLocator, $this->containerInterface, $this->assetsPackages, $this->prefix, 'stylesheet', $this->coutput, $this->cfilter), + new PackTokenParser($this->fileLocator, $this->containerInterface, $this->assetsPackages, $this->prefix, 'javascript', $this->joutput, $this->jfilter), + new PackTokenParser($this->fileLocator, $this->containerInterface, $this->assetsPackages, $this->prefix, 'image', $this->ioutput, $this->ifilter) + ); + } + + public function getFilters() { + return array( + new TwigFilter( + 'bb2html', + function($text) { + $ctx = bbcode_create( + array( + '' => array('type' => BBCODE_TYPE_ROOT), + 'code' => array( + 'type' => BBCODE_TYPE_OPTARG, + 'open_tag' => '
',
+								'close_tag' => '
', + 'default_arg' => '{CONTENT}' + ), + 'ul' => array( + 'type' => BBCODE_TYPE_NOARG, + 'open_tag' => '', + 'childs' => 'li' + ), + 'li' => array( + 'type' => BBCODE_TYPE_NOARG, + 'open_tag' => '
  • ', + 'close_tag' => '
  • ', + 'parent' => 'ul', + 'childs' => 'url' + ), + 'url' => array( + 'type' => BBCODE_TYPE_OPTARG, + 'open_tag' => '', + 'close_tag' => '', + 'default_arg' => '{CONTENT}', + 'parent' => 'p,li' + ) + ) + ); + $text = nl2br(bbcode_parse($ctx, htmlspecialchars($text))); + if (preg_match_all('#\]*\>(.*?)\#s', $text, $matches) && !empty($matches[1])) { + foreach($matches[1] as $string) { + $text = str_replace($string, str_replace('
    ', '', $string), $text); + } + } + if (preg_match_all('#\]*\>(.*?)\#s', $text, $matches) && !empty($matches[1])) { + foreach($matches[1] as $string) { + $text = str_replace($string, str_replace('
    ', '', $string), $text); + } + } + $text = preg_replace( + array('#(
    (\r?\n?))*(
    (\r?\n?))*#', '#(
    (\r?\n?))*(
    (\r?\n?))*#', '#(
    (\r?\n?)){2,}#'), + array('

    \2\2

    ', '

    \2\2

    ', '

    \2

    '), + $text + ); + return $text; + }, + array('is_safe' => array('html')) + ) ); } }