diff --git a/phpBB/phpbb/textreparser/base.php b/phpBB/phpbb/textreparser/base.php
index 7d1e12c52d..f65745f6ab 100644
--- a/phpBB/phpbb/textreparser/base.php
+++ b/phpBB/phpbb/textreparser/base.php
@@ -63,8 +63,8 @@ abstract class base implements reparser_interface
$bitfield,
$flags,
$unparsed['enable_bbcode'],
- $unparsed['enable_smilies'],
- $unparsed['enable_magic_url']
+ $unparsed['enable_magic_url'],
+ $unparsed['enable_smilies']
);
// Save the new text if it has changed
diff --git a/phpBB/phpbb/textreparser/plugins/user_signature.php b/phpBB/phpbb/textreparser/plugins/user_signature.php
index 2beaaf98e5..7a66f39ab6 100644
--- a/phpBB/phpbb/textreparser/plugins/user_signature.php
+++ b/phpBB/phpbb/textreparser/plugins/user_signature.php
@@ -15,15 +15,48 @@ namespace phpbb\textreparser\plugins;
class user_signature extends \phpbb\textreparser\row_based_plugin
{
+ /**
+ * @var array Bit numbers used for user options
+ * @see \phpbb\user
+ */
+ protected $keyoptions;
+
+ /**
+ * Constructor
+ *
+ * Retrieves and saves the bit numbers used for user options
+ */
+ public function __construct()
+ {
+ $class_vars = get_class_vars('phpbb\\user');
+ $this->keyoptions = $class_vars['keyoptions'];
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function add_missing_fields(array $row)
+ {
+ $options = $row['user_options'];
+ $row += array(
+ 'enable_bbcode' => phpbb_optionget($this->keyoptions['sig_bbcode'], $options),
+ 'enable_smilies' => phpbb_optionget($this->keyoptions['sig_smilies'], $options),
+ 'enable_magic_url' => phpbb_optionget($this->keyoptions['sig_links'], $options),
+ );
+
+ return $row;
+ }
+
/**
* {@inheritdoc}
*/
protected function get_columns()
{
return array(
- 'id' => 'user_id',
- 'text' => 'user_sig',
- 'bbcode_uid' => 'user_sig_bbcode_uid',
+ 'id' => 'user_id',
+ 'text' => 'user_sig',
+ 'bbcode_uid' => 'user_sig_bbcode_uid',
+ 'user_options' => 'user_options',
);
}
diff --git a/phpBB/phpbb/textreparser/row_based_plugin.php b/phpBB/phpbb/textreparser/row_based_plugin.php
index 2317c79e4f..b946d6532b 100644
--- a/phpBB/phpbb/textreparser/row_based_plugin.php
+++ b/phpBB/phpbb/textreparser/row_based_plugin.php
@@ -44,6 +44,29 @@ abstract class row_based_plugin extends base
*/
abstract protected function get_table_name();
+ /**
+ * Add fields to given row, if applicable
+ *
+ * The enable_* fields are not always saved to the database. Sometimes we need to guess their
+ * original value based on the text content or possibly other fields
+ *
+ * @param array $row Original row
+ * @return array Complete row
+ */
+ protected function add_missing_fields(array $row)
+ {
+ if (!isset($row['enable_bbcode'], $row['enable_smilies'], $row['enable_magic_url']))
+ {
+ $row += array(
+ 'enable_bbcode' => !empty($row['bbcode_uid']),
+ 'enable_smilies' => (strpos($row['text'], '') !== false),
+ );
+ }
+
+ return $row;
+ }
+
/**
* {@inheritdoc}
*/
@@ -67,16 +90,7 @@ abstract class row_based_plugin extends base
$result = $this->db->sql_query($this->get_records_query($min_id, $max_id));
while ($row = $this->db->sql_fetchrow($result))
{
- if (!isset($row['enable_bbcode'], $row['enable_smilies'], $row['enable_magic_url']))
- {
- // Those fields are not saved to the database, we need to guess their original value
- $row += array(
- 'enable_bbcode' => !empty($row['bbcode_uid']),
- 'enable_smilies' => (strpos($row['text'], '') !== false)
- );
- }
- $records[] = $row;
+ $records[] = $this->add_missing_fields($row);
}
$this->db->sql_freeresult($result);
diff --git a/tests/text_reparser/fixtures/posts.xml b/tests/text_reparser/fixtures/posts.xml
index 6485293361..3cfbfd2e95 100644
--- a/tests/text_reparser/fixtures/posts.xml
+++ b/tests/text_reparser/fixtures/posts.xml
@@ -12,7 +12,47 @@
1
1
1
- Plain text
+ This post should be [b]ignored[/b]
+ abcd1234
+
+
+ 2
+ 0
+ 0
+ 0
+ [b]Not bold[/b] :) http://example.org
+ abcd1234
+
+
+ 3
+ 1
+ 0
+ 0
+ [b:abcd1234]Bold[/b:abcd1234] :) http://example.org
+ abcd1234
+
+
+ 4
+ 0
+ 1
+ 0
+
http://example.org]]>
+ abcd1234
+
+
+ 5
+ 0
+ 0
+ 1
+ http://example.org]]>
+ abcd1234
+
+
+ 1000
+ 1
+ 1
+ 1
+ This post should be [b]ignored[/b]
abcd1234
diff --git a/tests/text_reparser/post_text_test.php b/tests/text_reparser/post_text_test.php
index 9d9d689db9..19e9c37ecc 100644
--- a/tests/text_reparser/post_text_test.php
+++ b/tests/text_reparser/post_text_test.php
@@ -40,9 +40,15 @@ class phpbb_textreparser_post_text_test extends phpbb_database_test_case
$db = $this->new_dbal();
$reparser = new \phpbb\textreparser\plugins\post_text($db);
$reparser->reparse_range($min_id, $max_id);
+
+ $post_ids = array();
+ foreach ($expected as $row)
+ {
+ $post_ids[] = $row['post_id'];
+ }
$sql = 'SELECT post_id, post_text
- FROM ' . POSTS_TABLE . "
- WHERE post_id BETWEEN $min_id AND $max_id";
+ FROM ' . POSTS_TABLE . '
+ WHERE ' . $db->sql_in_set('post_id', $post_ids);
$result = $db->sql_query($sql);
$rows = $db->sql_fetchrowset($result);
$db->sql_freeresult($result);
@@ -53,13 +59,33 @@ class phpbb_textreparser_post_text_test extends phpbb_database_test_case
{
return array(
array(
- 1,
- 1,
+ 2,
+ 5,
array(
array(
'post_id' => 1,
- 'post_text' => 'Plain text'
- )
+ 'post_text' => 'This post should be [b]ignored[/b]',
+ ),
+ array(
+ 'post_id' => 2,
+ 'post_text' => '[b]Not bold[/b] :) http://example.org',
+ ),
+ array(
+ 'post_id' => 3,
+ 'post_text' => '[b]Bold[/b] :) http://example.org',
+ ),
+ array(
+ 'post_id' => 4,
+ 'post_text' => '[b]Not bold[/b] :) http://example.org',
+ ),
+ array(
+ 'post_id' => 5,
+ 'post_text' => '[b]Not bold[/b] :) http://example.org',
+ ),
+ array(
+ 'post_id' => 1000,
+ 'post_text' => 'This post should be [b]ignored[/b]',
+ ),
)
),
);