From bb11546ae005add2bdf1865f764b46ee8fa234e6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rapha=C3=ABl=20Gertz?= Date: Sun, 25 Feb 2018 06:01:59 +0100 Subject: [PATCH] Add twig bb2html filter Fix possible deprecated assets.packages direct call with dependancy injection --- Twig/PackExtension.php | 71 +++++++++++++++++++++++++++++++++++++--- Twig/PackTokenParser.php | 7 ++-- 2 files changed, 72 insertions(+), 6 deletions(-) diff --git a/Twig/PackExtension.php b/Twig/PackExtension.php index 4baba52..5ce4ed6 100644 --- a/Twig/PackExtension.php +++ b/Twig/PackExtension.php @@ -4,13 +4,17 @@ 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 { - 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/'; @@ -46,9 +50,68 @@ class PackExtension extends \Twig_Extension { public function getTokenParsers() { return array( - new PackTokenParser($this->fileLocator, $this->containerInterface, $this->prefix, 'stylesheet', $this->coutput, $this->cfilter), - new PackTokenParser($this->fileLocator, $this->containerInterface, $this->prefix, 'javascript', $this->joutput, $this->jfilter), - new PackTokenParser($this->fileLocator, $this->containerInterface, $this->prefix, 'image', $this->ioutput, $this->ifilter), + 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')) + ) ); } } diff --git a/Twig/PackTokenParser.php b/Twig/PackTokenParser.php index 24a43e9..2644a1b 100644 --- a/Twig/PackTokenParser.php +++ b/Twig/PackTokenParser.php @@ -4,6 +4,7 @@ namespace Rapsys\PackBundle\Twig; use Symfony\Component\HttpKernel\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerInterface; +use Symfony\Component\Asset\Packages; class PackTokenParser extends \Twig_TokenParser { private $tag; @@ -12,15 +13,17 @@ class PackTokenParser extends \Twig_TokenParser { * Constructor. * * @param class $fileLocator The FileLocator instance + * @param class $containerInterface The Container Interface instance * @param class $assetsPackages The Assets Packages instance * @param string $prefix The prefix path * @param string $tag The tag name * @param string $output The default output string * @param array $filters The default filters array */ - public function __construct(FileLocator $fileLocator, ContainerInterface $containerInterface, $prefix, $tag, $output, $filters) { + public function __construct(FileLocator $fileLocator, ContainerInterface $containerInterface, Packages $assetsPackages, $prefix, $tag, $output, $filters) { $this->fileLocator = $fileLocator; $this->containerInterface = $containerInterface; + $this->assetsPackages = $assetsPackages; $this->prefix = $prefix; $this->tag = $tag; $this->output = $output; @@ -233,7 +236,7 @@ class PackTokenParser extends \Twig_TokenParser { } //Retrieve asset uri - if (($output = $this->containerInterface->get('assets.packages')->getUrl($output, 'rapsys_pack')) === false) { + if (($output = $this->assetsPackages->getUrl($output, 'rapsys_pack')) === false) { throw new \Twig_Error_Syntax(sprintf('Unable to get url for asset: %s with package %s', $output, 'rapsys_pack'), $token->getLine(), $stream->getSourceContext()); } -- 2.41.0