aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/phpbb/textreparser
diff options
context:
space:
mode:
authorJoshyPHP <s9e.dev@gmail.com>2015-05-01 08:47:01 +0200
committerJoshyPHP <s9e.dev@gmail.com>2015-05-30 17:26:00 +0200
commit986af43f37342953bff548630aa33904c21234f4 (patch)
tree07cb503a0ef5dce28b1344c749397bd3a28f66f1 /phpBB/phpbb/textreparser
parente11ae7e9cd5573658b763b1ef72cb889f547f2dd (diff)
downloadforums-986af43f37342953bff548630aa33904c21234f4.tar
forums-986af43f37342953bff548630aa33904c21234f4.tar.gz
forums-986af43f37342953bff548630aa33904c21234f4.tar.bz2
forums-986af43f37342953bff548630aa33904c21234f4.tar.xz
forums-986af43f37342953bff548630aa33904c21234f4.zip
[ticket/13803] Added plugins
PHPBB3-13803
Diffstat (limited to 'phpBB/phpbb/textreparser')
-rw-r--r--phpBB/phpbb/textreparser/base.php15
-rw-r--r--phpBB/phpbb/textreparser/forum_description.php63
-rw-r--r--phpBB/phpbb/textreparser/forum_rules.php63
-rw-r--r--phpBB/phpbb/textreparser/group_description.php63
-rw-r--r--phpBB/phpbb/textreparser/plugins/admin_contact_info.php69
-rw-r--r--phpBB/phpbb/textreparser/plugins/forum_description.php37
-rw-r--r--phpBB/phpbb/textreparser/plugins/forum_rules.php37
-rw-r--r--phpBB/phpbb/textreparser/plugins/group_description.php37
-rw-r--r--phpBB/phpbb/textreparser/plugins/pm_text.php40
-rw-r--r--phpBB/phpbb/textreparser/plugins/poll_option.php50
-rw-r--r--phpBB/phpbb/textreparser/plugins/poll_title.php50
-rw-r--r--phpBB/phpbb/textreparser/plugins/post_text.php40
-rw-r--r--phpBB/phpbb/textreparser/plugins/user_signature.php37
-rw-r--r--phpBB/phpbb/textreparser/pm_text.php56
-rw-r--r--phpBB/phpbb/textreparser/post_text.php56
-rw-r--r--phpBB/phpbb/textreparser/row_based_plugin.php128
16 files changed, 525 insertions, 316 deletions
diff --git a/phpBB/phpbb/textreparser/base.php b/phpBB/phpbb/textreparser/base.php
index 6aa20d0015..7d1e12c52d 100644
--- a/phpBB/phpbb/textreparser/base.php
+++ b/phpBB/phpbb/textreparser/base.php
@@ -16,21 +16,6 @@ namespace phpbb\textreparser;
abstract class base implements reparser_interface
{
/**
- * @var \phpbb\db\driver\driver_interface
- */
- protected $db;
-
- /**
- * Constructor
- *
- * @param \phpbb\db\driver\driver_interface $db Database connection
- */
- public function __construct(\phpbb\db\driver\driver_interface $db)
- {
- $this->db = $db;
- }
-
- /**
* {@inheritdoc}
*/
abstract public function get_max_id();
diff --git a/phpBB/phpbb/textreparser/forum_description.php b/phpBB/phpbb/textreparser/forum_description.php
deleted file mode 100644
index 493f8d6c94..0000000000
--- a/phpBB/phpbb/textreparser/forum_description.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-/**
-*
-* This file is part of the phpBB Forum Software package.
-*
-* @copyright (c) phpBB Limited <https://www.phpbb.com>
-* @license GNU General Public License, version 2 (GPL-2.0)
-*
-* For full copyright and license information, please see
-* the docs/CREDITS.txt file.
-*
-*/
-
-namespace phpbb\textreparser;
-
-class forum_description extends base
-{
- /**
- * {@inheritdoc}
- */
- public function get_max_id()
- {
- $sql = 'SELECT MAX(forum_id) AS max_id FROM ' . FORUMS_TABLE;
- $result = $this->db->sql_query($sql);
- $max_id = (int) $this->db->sql_fetchfield('max_id');
- $this->db->sql_freeresult($result);
-
- return $max_id;
- }
-
- /**
- * {@inheritdoc}
- */
- protected function get_records($min_id, $max_id)
- {
- $sql = 'SELECT forum_id AS id, forum_desc AS text, forum_desc_uid AS bbcode_uid
- FROM ' . FORUMS_TABLE . '
- WHERE forum_id BETWEEN ' . $min_id . ' AND ' . $max_id;
- $result = $this->db->sql_query($sql);
- while ($row = $this->db->sql_fetchrow($result))
- {
- // Those fields are not saved to the database, we need to guess their original value
- $row['enable_bbcode'] = !empty($row['bbcode_uid']);
- $row['enable_smilies'] = (strpos($row['text'], '<!-- s') !== false);
- $row['enable_magic_url'] = (strpos($row['text'], '<!-- m -->') !== false);
- }
- $records = $this->db->sql_fetchrowset($result);
- $this->db->sql_freeresult($result);
-
- return $records;
- }
-
- /**
- * {@inheritdoc}
- */
- protected function save_record(array $record)
- {
- $sql = 'UPDATE ' . FORUMS_TABLE . "
- SET forum_desc = '" . $this->db->sql_escape($record['text']) . "'
- WHERE forum_id = " . $record['id'];
- $this->db->sql_query($sql);
- }
-}
diff --git a/phpBB/phpbb/textreparser/forum_rules.php b/phpBB/phpbb/textreparser/forum_rules.php
deleted file mode 100644
index 5a3cc7b405..0000000000
--- a/phpBB/phpbb/textreparser/forum_rules.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-/**
-*
-* This file is part of the phpBB Forum Software package.
-*
-* @copyright (c) phpBB Limited <https://www.phpbb.com>
-* @license GNU General Public License, version 2 (GPL-2.0)
-*
-* For full copyright and license information, please see
-* the docs/CREDITS.txt file.
-*
-*/
-
-namespace phpbb\textreparser;
-
-class forum_rules extends base
-{
- /**
- * {@inheritdoc}
- */
- public function get_max_id()
- {
- $sql = 'SELECT MAX(forum_id) AS max_id FROM ' . FORUMS_TABLE;
- $result = $this->db->sql_query($sql);
- $max_id = (int) $this->db->sql_fetchfield('max_id');
- $this->db->sql_freeresult($result);
-
- return $max_id;
- }
-
- /**
- * {@inheritdoc}
- */
- protected function get_records($min_id, $max_id)
- {
- $sql = 'SELECT forum_id AS id, forum_rules AS text, forum_rules_uid AS bbcode_uid
- FROM ' . FORUMS_TABLE . '
- WHERE forum_id BETWEEN ' . $min_id . ' AND ' . $max_id;
- $result = $this->db->sql_query($sql);
- while ($row = $this->db->sql_fetchrow($result))
- {
- // Those fields are not saved to the database, we need to guess their original value
- $row['enable_bbcode'] = !empty($row['bbcode_uid']);
- $row['enable_smilies'] = (strpos($row['text'], '<!-- s') !== false);
- $row['enable_magic_url'] = (strpos($row['text'], '<!-- m -->') !== false);
- }
- $records = $this->db->sql_fetchrowset($result);
- $this->db->sql_freeresult($result);
-
- return $records;
- }
-
- /**
- * {@inheritdoc}
- */
- protected function save_record(array $record)
- {
- $sql = 'UPDATE ' . FORUMS_TABLE . "
- SET forum_rules = '" . $this->db->sql_escape($record['text']) . "'
- WHERE forum_id = " . $record['id'];
- $this->db->sql_query($sql);
- }
-}
diff --git a/phpBB/phpbb/textreparser/group_description.php b/phpBB/phpbb/textreparser/group_description.php
deleted file mode 100644
index 61354c832b..0000000000
--- a/phpBB/phpbb/textreparser/group_description.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-/**
-*
-* This file is part of the phpBB Forum Software package.
-*
-* @copyright (c) phpBB Limited <https://www.phpbb.com>
-* @license GNU General Public License, version 2 (GPL-2.0)
-*
-* For full copyright and license information, please see
-* the docs/CREDITS.txt file.
-*
-*/
-
-namespace phpbb\textreparser;
-
-class group_description extends base
-{
- /**
- * {@inheritdoc}
- */
- public function get_max_id()
- {
- $sql = 'SELECT MAX(group_id) AS max_id FROM ' . GROUPS_TABLE;
- $result = $this->db->sql_query($sql);
- $max_id = (int) $this->db->sql_fetchfield('max_id');
- $this->db->sql_freeresult($result);
-
- return $max_id;
- }
-
- /**
- * {@inheritdoc}
- */
- protected function get_records($min_id, $max_id)
- {
- $sql = 'SELECT group_id AS id, group_desc AS text, group_desc_uid AS bbcode_uid
- FROM ' . GROUPS_TABLE . '
- WHERE group_id BETWEEN ' . $min_id . ' AND ' . $max_id;
- $result = $this->db->sql_query($sql);
- while ($row = $this->db->sql_fetchrow($result))
- {
- // Those fields are not saved to the database, we need to guess their original value
- $row['enable_bbcode'] = !empty($row['bbcode_uid']);
- $row['enable_smilies'] = (strpos($row['text'], '<!-- s') !== false);
- $row['enable_magic_url'] = (strpos($row['text'], '<!-- m -->') !== false);
- }
- $records = $this->db->sql_fetchrowset($result);
- $this->db->sql_freeresult($result);
-
- return $records;
- }
-
- /**
- * {@inheritdoc}
- */
- protected function save_record(array $record)
- {
- $sql = 'UPDATE ' . GROUPS_TABLE . "
- SET group_desc = '" . $this->db->sql_escape($record['text']) . "'
- WHERE group_id = " . $record['id'];
- $this->db->sql_query($sql);
- }
-}
diff --git a/phpBB/phpbb/textreparser/plugins/admin_contact_info.php b/phpBB/phpbb/textreparser/plugins/admin_contact_info.php
new file mode 100644
index 0000000000..e432ddea81
--- /dev/null
+++ b/phpBB/phpbb/textreparser/plugins/admin_contact_info.php
@@ -0,0 +1,69 @@
+<?php
+/**
+*
+* This file is part of the phpBB Forum Software package.
+*
+* @copyright (c) phpBB Limited <https://www.phpbb.com>
+* @license GNU General Public License, version 2 (GPL-2.0)
+*
+* For full copyright and license information, please see
+* the docs/CREDITS.txt file.
+*
+*/
+
+namespace phpbb\textreparser\plugins;
+
+class admin_contact_info extends \phpbb\textreparser\base
+{
+ /**
+ * @var \phpbb\config\db_text
+ */
+ protected $config_text;
+
+ /**
+ * Constructor
+ *
+ * @param \phpbb\config\db_text $config_text
+ */
+ public function __construct(\phpbb\config\db_text $config_text)
+ {
+ $this->config_text = $config_text;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function get_max_id()
+ {
+ return 1;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function get_records($min_id, $max_id)
+ {
+ $values = $this->config_text->get_array(array(
+ 'contact_admin_info',
+ 'contact_admin_info_uid',
+ 'contact_admin_info_flags',
+ ));
+
+ return array(array(
+ 'id' => 1,
+ 'text' => $values['contact_admin_info'],
+ 'bbcode_uid' => $values['contact_admin_info_uid'],
+ 'enable_bbcode' => $values['contact_admin_info_flags'] & OPTION_FLAG_BBCODE,
+ 'enable_magic_url' => $values['contact_admin_info_flags'] & OPTION_FLAG_LINKS,
+ 'enable_smilies' => $values['contact_admin_info_flags'] & OPTION_FLAG_SMILIES,
+ ));
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function save_record(array $record)
+ {
+ $this->config_text->set('admin_contact_info', $record['text']);
+ }
+}
diff --git a/phpBB/phpbb/textreparser/plugins/forum_description.php b/phpBB/phpbb/textreparser/plugins/forum_description.php
new file mode 100644
index 0000000000..d6e95c9638
--- /dev/null
+++ b/phpBB/phpbb/textreparser/plugins/forum_description.php
@@ -0,0 +1,37 @@
+<?php
+/**
+*
+* This file is part of the phpBB Forum Software package.
+*
+* @copyright (c) phpBB Limited <https://www.phpbb.com>
+* @license GNU General Public License, version 2 (GPL-2.0)
+*
+* For full copyright and license information, please see
+* the docs/CREDITS.txt file.
+*
+*/
+
+namespace phpbb\textreparser\plugins;
+
+class forum_description extends \phpbb\textreparser\row_based_plugin
+{
+ /**
+ * {@inheritdoc}
+ */
+ protected function get_columns()
+ {
+ return array(
+ 'id' => 'forum_id',
+ 'text' => 'forum_desc',
+ 'bbcode_uid' => 'forum_desc_uid',
+ );
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function get_table_name()
+ {
+ return FORUMS_TABLE;
+ }
+}
diff --git a/phpBB/phpbb/textreparser/plugins/forum_rules.php b/phpBB/phpbb/textreparser/plugins/forum_rules.php
new file mode 100644
index 0000000000..36bb595cb9
--- /dev/null
+++ b/phpBB/phpbb/textreparser/plugins/forum_rules.php
@@ -0,0 +1,37 @@
+<?php
+/**
+*
+* This file is part of the phpBB Forum Software package.
+*
+* @copyright (c) phpBB Limited <https://www.phpbb.com>
+* @license GNU General Public License, version 2 (GPL-2.0)
+*
+* For full copyright and license information, please see
+* the docs/CREDITS.txt file.
+*
+*/
+
+namespace phpbb\textreparser\plugins;
+
+class forum_rules extends \phpbb\textreparser\row_based_plugin
+{
+ /**
+ * {@inheritdoc}
+ */
+ protected function get_columns()
+ {
+ return array(
+ 'id' => 'forum_id',
+ 'text' => 'forum_rules',
+ 'bbcode_uid' => 'forum_rules_uid',
+ );
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function get_table_name()
+ {
+ return FORUMS_TABLE;
+ }
+}
diff --git a/phpBB/phpbb/textreparser/plugins/group_description.php b/phpBB/phpbb/textreparser/plugins/group_description.php
new file mode 100644
index 0000000000..c83079827c
--- /dev/null
+++ b/phpBB/phpbb/textreparser/plugins/group_description.php
@@ -0,0 +1,37 @@
+<?php
+/**
+*
+* This file is part of the phpBB Forum Software package.
+*
+* @copyright (c) phpBB Limited <https://www.phpbb.com>
+* @license GNU General Public License, version 2 (GPL-2.0)
+*
+* For full copyright and license information, please see
+* the docs/CREDITS.txt file.
+*
+*/
+
+namespace phpbb\textreparser\plugins;
+
+class group_description extends \phpbb\textreparser\row_based_plugin
+{
+ /**
+ * {@inheritdoc}
+ */
+ protected function get_columns()
+ {
+ return array(
+ 'id' => 'group_id',
+ 'text' => 'group_desc',
+ 'bbcode_uid' => 'group_desc_uid',
+ );
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function get_table_name()
+ {
+ return GROUPS_TABLE;
+ }
+}
diff --git a/phpBB/phpbb/textreparser/plugins/pm_text.php b/phpBB/phpbb/textreparser/plugins/pm_text.php
new file mode 100644
index 0000000000..f4d87525df
--- /dev/null
+++ b/phpBB/phpbb/textreparser/plugins/pm_text.php
@@ -0,0 +1,40 @@
+<?php
+/**
+*
+* This file is part of the phpBB Forum Software package.
+*
+* @copyright (c) phpBB Limited <https://www.phpbb.com>
+* @license GNU General Public License, version 2 (GPL-2.0)
+*
+* For full copyright and license information, please see
+* the docs/CREDITS.txt file.
+*
+*/
+
+namespace phpbb\textreparser\plugins;
+
+class pm_text extends \phpbb\textreparser\row_based_plugin
+{
+ /**
+ * {@inheritdoc}
+ */
+ protected function get_columns()
+ {
+ return array(
+ 'id' => 'msg_id',
+ 'enable_bbcode' => 'enable_bbcode',
+ 'enable_smilies' => 'enable_smilies',
+ 'enable_magic_url' => 'enable_magic_url',
+ 'text' => 'message_text',
+ 'bbcode_uid' => 'bbcode_uid',
+ );
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function get_table_name()
+ {
+ return PRIVMSGS_TABLE;
+ }
+}
diff --git a/phpBB/phpbb/textreparser/plugins/poll_option.php b/phpBB/phpbb/textreparser/plugins/poll_option.php
new file mode 100644
index 0000000000..f074f1866d
--- /dev/null
+++ b/phpBB/phpbb/textreparser/plugins/poll_option.php
@@ -0,0 +1,50 @@
+<?php
+/**
+*
+* This file is part of the phpBB Forum Software package.
+*
+* @copyright (c) phpBB Limited <https://www.phpbb.com>
+* @license GNU General Public License, version 2 (GPL-2.0)
+*
+* For full copyright and license information, please see
+* the docs/CREDITS.txt file.
+*
+*/
+
+namespace phpbb\textreparser\plugins;
+
+class poll_option extends \phpbb\textreparser\row_based_plugin
+{
+ /**
+ * {@inheritdoc}
+ */
+ protected function get_columns()
+ {
+ return array(
+ 'id' => 'poll_option_id',
+ 'text' => 'poll_option_text',
+ );
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function get_records_query($min_id, $max_id)
+ {
+ $sql = 'SELECT o.poll_option_id AS id, o.poll_option_text AS text, p.bbcode_uid
+ FROM ' . POLL_OPTIONS_TABLE . ' o, ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE . ' p
+ WHERE o.poll_option_id BETWEEN ' . $min_id . ' AND ' . $max_id .'
+ AND t.topic_id = o.topic_id
+ AND p.post_id = t.topic_first_post_id';
+
+ return $sql;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function get_table_name()
+ {
+ return POLL_OPTIONS_TABLE;
+ }
+}
diff --git a/phpBB/phpbb/textreparser/plugins/poll_title.php b/phpBB/phpbb/textreparser/plugins/poll_title.php
new file mode 100644
index 0000000000..e794780eba
--- /dev/null
+++ b/phpBB/phpbb/textreparser/plugins/poll_title.php
@@ -0,0 +1,50 @@
+<?php
+/**
+*
+* This file is part of the phpBB Forum Software package.
+*
+* @copyright (c) phpBB Limited <https://www.phpbb.com>
+* @license GNU General Public License, version 2 (GPL-2.0)
+*
+* For full copyright and license information, please see
+* the docs/CREDITS.txt file.
+*
+*/
+
+namespace phpbb\textreparser\plugins;
+
+class poll_title extends \phpbb\textreparser\row_based_plugin
+{
+ /**
+ * {@inheritdoc}
+ */
+ protected function get_columns()
+ {
+ return array(
+ 'id' => 'topic_id',
+ 'text' => 'poll_title',
+ );
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function get_records_query($min_id, $max_id)
+ {
+ $sql = 'SELECT t.topic_id AS id, t.poll_title AS text, p.bbcode_uid
+ FROM ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE . ' p
+ WHERE t.topic_id BETWEEN ' . $min_id . ' AND ' . $max_id .'
+ AND t.poll_max_options > 0
+ AND p.post_id = t.topic_first_post_id';
+
+ return $sql;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function get_table_name()
+ {
+ return TOPICS_TABLE;
+ }
+}
diff --git a/phpBB/phpbb/textreparser/plugins/post_text.php b/phpBB/phpbb/textreparser/plugins/post_text.php
new file mode 100644
index 0000000000..2b16518b03
--- /dev/null
+++ b/phpBB/phpbb/textreparser/plugins/post_text.php
@@ -0,0 +1,40 @@
+<?php
+/**
+*
+* This file is part of the phpBB Forum Software package.
+*
+* @copyright (c) phpBB Limited <https://www.phpbb.com>
+* @license GNU General Public License, version 2 (GPL-2.0)
+*
+* For full copyright and license information, please see
+* the docs/CREDITS.txt file.
+*
+*/
+
+namespace phpbb\textreparser\plugins;
+
+class post_text extends \phpbb\textreparser\row_based_plugin
+{
+ /**
+ * {@inheritdoc}
+ */
+ protected function get_columns()
+ {
+ return array(
+ 'id' => 'post_id',
+ 'enable_bbcode' => 'enable_bbcode',
+ 'enable_smilies' => 'enable_smilies',
+ 'enable_magic_url' => 'enable_magic_url',
+ 'text' => 'post_text',
+ 'bbcode_uid' => 'bbcode_uid',
+ );
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function get_table_name()
+ {
+ return POSTS_TABLE;
+ }
+}
diff --git a/phpBB/phpbb/textreparser/plugins/user_signature.php b/phpBB/phpbb/textreparser/plugins/user_signature.php
new file mode 100644
index 0000000000..2beaaf98e5
--- /dev/null
+++ b/phpBB/phpbb/textreparser/plugins/user_signature.php
@@ -0,0 +1,37 @@
+<?php
+/**
+*
+* This file is part of the phpBB Forum Software package.
+*
+* @copyright (c) phpBB Limited <https://www.phpbb.com>
+* @license GNU General Public License, version 2 (GPL-2.0)
+*
+* For full copyright and license information, please see
+* the docs/CREDITS.txt file.
+*
+*/
+
+namespace phpbb\textreparser\plugins;
+
+class user_signature extends \phpbb\textreparser\row_based_plugin
+{
+ /**
+ * {@inheritdoc}
+ */
+ protected function get_columns()
+ {
+ return array(
+ 'id' => 'user_id',
+ 'text' => 'user_sig',
+ 'bbcode_uid' => 'user_sig_bbcode_uid',
+ );
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function get_table_name()
+ {
+ return USERS_TABLE;
+ }
+}
diff --git a/phpBB/phpbb/textreparser/pm_text.php b/phpBB/phpbb/textreparser/pm_text.php
deleted file mode 100644
index b02cb0083f..0000000000
--- a/phpBB/phpbb/textreparser/pm_text.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-/**
-*
-* This file is part of the phpBB Forum Software package.
-*
-* @copyright (c) phpBB Limited <https://www.phpbb.com>
-* @license GNU General Public License, version 2 (GPL-2.0)
-*
-* For full copyright and license information, please see
-* the docs/CREDITS.txt file.
-*
-*/
-
-namespace phpbb\textreparser;
-
-class pm_text extends base
-{
- /**
- * {@inheritdoc}
- */
- public function get_max_id()
- {
- $sql = 'SELECT MAX(msg_id) AS max_id FROM ' . PRIVMSGS_TABLE;
- $result = $this->db->sql_query($sql);
- $max_id = (int) $this->db->sql_fetchfield('max_id');
- $this->db->sql_freeresult($result);
-
- return $max_id;
- }
-
- /**
- * {@inheritdoc}
- */
- protected function get_records($min_id, $max_id)
- {
- $sql = 'SELECT msg_id AS id, enable_bbcode, enable_smilies, enable_magic_url, message_text AS text, bbcode_uid
- FROM ' . PRIVMSGS_TABLE . '
- WHERE msg_id BETWEEN ' . $min_id . ' AND ' . $max_id;
- $result = $this->db->sql_query($sql);
- $records = $this->db->sql_fetchrowset($result);
- $this->db->sql_freeresult($result);
-
- return $records;
- }
-
- /**
- * {@inheritdoc}
- */
- protected function save_record(array $record)
- {
- $sql = 'UPDATE ' . PRIVMSGS_TABLE . "
- SET message_text = '" . $this->db->sql_escape($record['text']) . "'
- WHERE msg_id = " . $record['id'];
- $this->db->sql_query($sql);
- }
-}
diff --git a/phpBB/phpbb/textreparser/post_text.php b/phpBB/phpbb/textreparser/post_text.php
deleted file mode 100644
index 288bb0966b..0000000000
--- a/phpBB/phpbb/textreparser/post_text.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-/**
-*
-* This file is part of the phpBB Forum Software package.
-*
-* @copyright (c) phpBB Limited <https://www.phpbb.com>
-* @license GNU General Public License, version 2 (GPL-2.0)
-*
-* For full copyright and license information, please see
-* the docs/CREDITS.txt file.
-*
-*/
-
-namespace phpbb\textreparser;
-
-class post_text extends base
-{
- /**
- * {@inheritdoc}
- */
- public function get_max_id()
- {
- $sql = 'SELECT MAX(post_id) AS max_id FROM ' . POSTS_TABLE;
- $result = $this->db->sql_query($sql);
- $max_id = (int) $this->db->sql_fetchfield('max_id');
- $this->db->sql_freeresult($result);
-
- return $max_id;
- }
-
- /**
- * {@inheritdoc}
- */
- protected function get_records($min_id, $max_id)
- {
- $sql = 'SELECT post_id AS id, enable_bbcode, enable_smilies, enable_magic_url, post_text AS text, bbcode_uid
- FROM ' . POSTS_TABLE . '
- WHERE post_id BETWEEN ' . $min_id . ' AND ' . $max_id;
- $result = $this->db->sql_query($sql);
- $records = $this->db->sql_fetchrowset($result);
- $this->db->sql_freeresult($result);
-
- return $records;
- }
-
- /**
- * {@inheritdoc}
- */
- protected function save_record(array $record)
- {
- $sql = 'UPDATE ' . POSTS_TABLE . "
- SET post_text = '" . $this->db->sql_escape($record['text']) . "'
- WHERE post_id = " . $record['id'];
- $this->db->sql_query($sql);
- }
-}
diff --git a/phpBB/phpbb/textreparser/row_based_plugin.php b/phpBB/phpbb/textreparser/row_based_plugin.php
new file mode 100644
index 0000000000..2317c79e4f
--- /dev/null
+++ b/phpBB/phpbb/textreparser/row_based_plugin.php
@@ -0,0 +1,128 @@
+<?php
+/**
+*
+* This file is part of the phpBB Forum Software package.
+*
+* @copyright (c) phpBB Limited <https://www.phpbb.com>
+* @license GNU General Public License, version 2 (GPL-2.0)
+*
+* For full copyright and license information, please see
+* the docs/CREDITS.txt file.
+*
+*/
+
+namespace phpbb\textreparser;
+
+abstract class row_based_plugin extends base
+{
+ /**
+ * @var \phpbb\db\driver\driver_interface
+ */
+ protected $db;
+
+ /**
+ * Constructor
+ *
+ * @param \phpbb\db\driver\driver_interface $db Database connection
+ */
+ public function __construct(\phpbb\db\driver\driver_interface $db)
+ {
+ $this->db = $db;
+ }
+
+ /**
+ * Return the name of the column that correspond to each field
+ *
+ * @return array
+ */
+ abstract protected function get_columns();
+
+ /**
+ * Return the name of the table used by this plugin
+ *
+ * @return string
+ */
+ abstract protected function get_table_name();
+
+ /**
+ * {@inheritdoc}
+ */
+ public function get_max_id()
+ {
+ $columns = $this->get_columns();
+
+ $sql = 'SELECT MAX(' . $columns['id'] . ' AS max_id FROM ' . $this->get_table_name();
+ $result = $this->db->sql_query($sql);
+ $max_id = (int) $this->db->sql_fetchfield('max_id');
+ $this->db->sql_freeresult($result);
+
+ return $max_id;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function get_records($min_id, $max_id)
+ {
+ $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'], '<!-- s') !== false),
+ 'enable_magic_url' => (strpos($row['text'], '<!-- m -->') !== false)
+ );
+ }
+ $records[] = $row;
+ }
+ $this->db->sql_freeresult($result);
+
+ return $records;
+ }
+
+ /**
+ * Generate the query that retrieves all records for given range
+ *
+ * @param integer $min_id Lower bound
+ * @param integer $max_id Upper bound
+ * @return string SQL query
+ */
+ protected function get_records_query($min_id, $max_id)
+ {
+ $columns = $this->get_columns();
+ $fields = array();
+ foreach ($columns as $field_name => $column_name)
+ {
+ if ($column_name === $field_name)
+ {
+ $fields[] = $column_name;
+ }
+ else
+ {
+ $fields[] = $column_name . ' AS ' . $field_name;
+ }
+ }
+
+ $sql = 'SELECT ' . implode(', ', $fields) . '
+ FROM ' . $this->get_table_name() . '
+ WHERE ' . $columns['id'] . ' BETWEEN ' . $min_id . ' AND ' . $max_id;
+
+ return $sql;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function save_record(array $record)
+ {
+ $columns = $this->get_columns();
+
+ $sql = 'UPDATE ' . $this->get_table_name() . '
+ SET ' . $columns['text'] . " = '" . $this->db->sql_escape($record['text']) . "'
+ WHERE " . $columns['id'] . ' = ' . $record['id'];
+ $this->db->sql_query($sql);
+ }
+}