aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoshyPHP <s9e.dev@gmail.com>2015-02-19 06:05:39 +0100
committerJoshyPHP <s9e.dev@gmail.com>2015-04-02 19:16:01 +0200
commitf721b85a7835c18459b310e4db74cc0f654b05ec (patch)
treeed8f9334a79e5fe24ebe3ca96bf3fb30b18bd446
parent6578e1c6ec7172016fbfa375dd2fce5cb20f3ce1 (diff)
downloadforums-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.lock8
-rw-r--r--phpBB/phpbb/textformatter/s9e/factory.php38
-rw-r--r--phpBB/phpbb/textformatter/s9e/renderer.php21
-rw-r--r--tests/text_formatter/s9e/parser_test.php8
-rw-r--r--tests/text_formatter/s9e/renderer_test.php12
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)
{