diff options
author | JoshyPHP <s9e.dev@gmail.com> | 2015-02-19 06:05:39 +0100 |
---|---|---|
committer | JoshyPHP <s9e.dev@gmail.com> | 2015-04-02 19:16:01 +0200 |
commit | f721b85a7835c18459b310e4db74cc0f654b05ec (patch) | |
tree | ed8f9334a79e5fe24ebe3ca96bf3fb30b18bd446 | |
parent | 6578e1c6ec7172016fbfa375dd2fce5cb20f3ce1 (diff) | |
download | forums-f721b85a7835c18459b310e4db74cc0f654b05ec.tar forums-f721b85a7835c18459b310e4db74cc0f654b05ec.tar.gz forums-f721b85a7835c18459b310e4db74cc0f654b05ec.tar.bz2 forums-f721b85a7835c18459b310e4db74cc0f654b05ec.tar.xz forums-f721b85a7835c18459b310e4db74cc0f654b05ec.zip |
[ticket/11768] Replaced the Censor plugin
...with something that is run at rendering time.
PHPBB3-11768
-rw-r--r-- | phpBB/composer.lock | 8 | ||||
-rw-r--r-- | phpBB/phpbb/textformatter/s9e/factory.php | 38 | ||||
-rw-r--r-- | phpBB/phpbb/textformatter/s9e/renderer.php | 21 | ||||
-rw-r--r-- | tests/text_formatter/s9e/parser_test.php | 8 | ||||
-rw-r--r-- | tests/text_formatter/s9e/renderer_test.php | 12 |
5 files changed, 50 insertions, 37 deletions
diff --git a/phpBB/composer.lock b/phpBB/composer.lock index f006de8b8b..73b41a9e60 100644 --- a/phpBB/composer.lock +++ b/phpBB/composer.lock @@ -169,12 +169,12 @@ "source": { "type": "git", "url": "https://github.com/s9e/TextFormatter.git", - "reference": "6d0fad50f73f386a45ec6fefdc8d039df93637ab" + "reference": "0a6bfe116bf348acf209e0d50bd3b3fad86d219e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/s9e/TextFormatter/zipball/6d0fad50f73f386a45ec6fefdc8d039df93637ab", - "reference": "6d0fad50f73f386a45ec6fefdc8d039df93637ab", + "url": "https://api.github.com/repos/s9e/TextFormatter/zipball/0a6bfe116bf348acf209e0d50bd3b3fad86d219e", + "reference": "0a6bfe116bf348acf209e0d50bd3b3fad86d219e", "shasum": "" }, "require": { @@ -219,7 +219,7 @@ "parser", "shortcodes" ], - "time": "2015-02-16 09:55:05" + "time": "2015-02-19 04:58:59" }, { "name": "symfony/config", diff --git a/phpBB/phpbb/textformatter/s9e/factory.php b/phpBB/phpbb/textformatter/s9e/factory.php index 47da3e3eb7..557645b0d6 100644 --- a/phpBB/phpbb/textformatter/s9e/factory.php +++ b/phpBB/phpbb/textformatter/s9e/factory.php @@ -264,25 +264,15 @@ class factory implements \phpbb\textformatter\cache } // Load the censored words - foreach ($this->dal->get_words() as $row) + $censor = $this->dal->get_words(); + if (!empty($censor)) { - $configurator->Censor->add($row['word'], $row['replacement']); - } - - if (isset($configurator->Censor)) - { - // Replace the template with a template that applies only when $S_VIEWCENSORS is set - $tag = $configurator->Censor->getTag(); - $tag->template = - '<xsl:choose> - <xsl:when test="not($S_VIEWCENSORS)"> - <xsl:value-of select="."/> - </xsl:when> - <xsl:when test="@with"> - <xsl:value-of select="@with"/> - </xsl:when> - <xsl:otherwise>****</xsl:otherwise> - </xsl:choose>'; + // Use a namespaced tag to avoid collisions + $configurator->plugins->load('Censor', array('tagName' => 'censor:tag')); + foreach ($censor as $row) + { + $configurator->Censor->add($row['word'], $row['replacement']); + } } // Load the magic links plugins. We do that after BBCodes so that they use the same tags @@ -307,6 +297,14 @@ class factory implements \phpbb\textformatter\cache { $configurator = $this->get_configurator(); + // Get the censor helper and remove the Censor plugin if applicable + if (isset($configurator->Censor)) + { + $censor = $configurator->Censor->getHelper(); + unset($configurator->Censor); + unset($configurator->tags['censor:tag']); + } + // Create $parser and $renderer extract($configurator->finalize()); @@ -320,6 +318,10 @@ class factory implements \phpbb\textformatter\cache 'class' => get_class($renderer), 'renderer' => serialize($renderer) ); + if (isset($censor)) + { + $renderer_data['censor'] = $censor; + } $this->cache->put($this->cache_key_renderer, $renderer_data); return array('parser' => $parser, 'renderer' => $renderer); diff --git a/phpBB/phpbb/textformatter/s9e/renderer.php b/phpBB/phpbb/textformatter/s9e/renderer.php index 943056e6ca..3ec5f38029 100644 --- a/phpBB/phpbb/textformatter/s9e/renderer.php +++ b/phpBB/phpbb/textformatter/s9e/renderer.php @@ -20,6 +20,11 @@ namespace phpbb\textformatter\s9e; class renderer extends \phpbb\textformatter\renderer { /** + * @var s9e\TextFormatter\Plugins\Censor\Helper + */ + protected $censor; + + /** * @var s9e\TextFormatter\Renderer */ protected $renderer; @@ -56,7 +61,6 @@ class renderer extends \phpbb\textformatter\renderer public function __construct(\phpbb\cache\driver\driver_interface $cache, $cache_dir, $key, factory $factory) { $renderer_data = $cache->get($key); - if ($renderer_data) { $class = $renderer_data['class']; @@ -76,6 +80,11 @@ class renderer extends \phpbb\textformatter\renderer { $renderer = unserialize($renderer_data['renderer']); } + + if (isset($renderer_data['censor'])) + { + $censor = $renderer_data['censor']; + } } if (!isset($renderer)) @@ -83,6 +92,11 @@ class renderer extends \phpbb\textformatter\renderer extract($factory->regenerate()); } + if (isset($censor)) + { + $this->censor = $censor; + } + $this->renderer = $renderer; } @@ -146,6 +160,11 @@ class renderer extends \phpbb\textformatter\renderer { $html = $this->renderer->render($text); + if (isset($this->censor) && $this->viewcensors) + { + $html = $this->censor->censorHtml($html, true); + } + /** * @see bbcode::bbcode_second_pass_code() */ diff --git a/tests/text_formatter/s9e/parser_test.php b/tests/text_formatter/s9e/parser_test.php index f422e5425a..09af6c22ad 100644 --- a/tests/text_formatter/s9e/parser_test.php +++ b/tests/text_formatter/s9e/parser_test.php @@ -139,10 +139,6 @@ class phpbb_textformatter_s9e_parser_test extends phpbb_test_case 'disablePlugin', 'BBCodes' ), array( - 'disable_censor', null, - 'disablePlugin', 'Censor' - ), - array( 'disable_magic_url', null, 'disablePlugin', array('Autoemail', 'Autolink') ), @@ -159,10 +155,6 @@ class phpbb_textformatter_s9e_parser_test extends phpbb_test_case 'enablePlugin', 'BBCodes' ), array( - 'enable_censor', null, - 'enablePlugin', 'Censor' - ), - array( 'enable_magic_url', null, 'enablePlugin', array('Autoemail', 'Autolink') ), diff --git a/tests/text_formatter/s9e/renderer_test.php b/tests/text_formatter/s9e/renderer_test.php index 464bcf8eed..fbf17c8f68 100644 --- a/tests/text_formatter/s9e/renderer_test.php +++ b/tests/text_formatter/s9e/renderer_test.php @@ -93,12 +93,12 @@ class phpbb_textformatter_s9e_renderer_test extends phpbb_test_case { return array( array( - '<r><CENSOR with="banana">apple</CENSOR></r>', + '<t>apple</t>', 'banana', array('set_viewcensors' => true) ), array( - '<r><CENSOR with="banana">apple</CENSOR></r>', + '<t>apple</t>', 'apple', array('set_viewcensors' => false) ), @@ -146,11 +146,11 @@ class phpbb_textformatter_s9e_renderer_test extends phpbb_test_case { return array( array( - '<r><CENSOR with="banana">apple</CENSOR></r>', + '<t>apple</t>', 'banana' ), array( - '<r><CENSOR with="banana">apple</CENSOR></r>', + '<t>apple</t>', 'banana', function ($phpbb_container) { @@ -161,7 +161,7 @@ class phpbb_textformatter_s9e_renderer_test extends phpbb_test_case } ), array( - '<r><CENSOR with="banana">apple</CENSOR></r>', + '<t>apple</t>', 'banana', function ($phpbb_container) { @@ -175,7 +175,7 @@ class phpbb_textformatter_s9e_renderer_test extends phpbb_test_case } ), array( - '<r><CENSOR with="banana">apple</CENSOR></r>', + '<t>apple</t>', 'apple', function ($phpbb_container, $test) { |