From b4748a5d1ee31084da7e78f8ffaf5b036f2e5314 Mon Sep 17 00:00:00 2001 From: Matt Friedman Date: Sun, 18 Dec 2016 01:28:51 -0800 Subject: [PATCH 1/2] [ticket/14925] Set reparser names in service definitions PHPBB3-14925 --- .../container/services_text_reparser.yml | 18 +++++++++++++ .../console/command/reparser/list_all.php | 4 +-- .../console/command/reparser/reparse.php | 16 +++++------ .../cron/task/text_reparser/reparser.php | 2 +- phpBB/phpbb/textreparser/base.php | 27 ++++++++++++++++++- phpBB/phpbb/textreparser/manager.php | 20 ++++++++++++++ .../phpbb/textreparser/reparser_interface.php | 14 ++++++++++ 7 files changed, 87 insertions(+), 14 deletions(-) diff --git a/phpBB/config/default/container/services_text_reparser.yml b/phpBB/config/default/container/services_text_reparser.yml index 6b0353cf5b..4bc49f5765 100644 --- a/phpBB/config/default/container/services_text_reparser.yml +++ b/phpBB/config/default/container/services_text_reparser.yml @@ -24,6 +24,8 @@ services: class: phpbb\textreparser\plugins\contact_admin_info arguments: - '@config_text' + calls: + - [set_name, [contact_admin_info]] tags: - { name: text_reparser.plugin } @@ -32,6 +34,8 @@ services: arguments: - '@dbal.conn' - '%tables.forums%' + calls: + - [set_name, [forum_description]] tags: - { name: text_reparser.plugin } @@ -40,6 +44,8 @@ services: arguments: - '@dbal.conn' - '%tables.forums%' + calls: + - [set_name, [forum_rules]] tags: - { name: text_reparser.plugin } @@ -48,6 +54,8 @@ services: arguments: - '@dbal.conn' - '%tables.groups%' + calls: + - [set_name, [group_description]] tags: - { name: text_reparser.plugin } @@ -56,6 +64,8 @@ services: arguments: - '@dbal.conn' - '%tables.privmsgs%' + calls: + - [set_name, [pm_text]] tags: - { name: text_reparser.plugin } @@ -63,6 +73,8 @@ services: class: phpbb\textreparser\plugins\poll_option arguments: - '@dbal.conn' + calls: + - [set_name, [poll_option]] tags: - { name: text_reparser.plugin } @@ -71,6 +83,8 @@ services: arguments: - '@dbal.conn' - '%tables.topics%' + calls: + - [set_name, [poll_title]] tags: - { name: text_reparser.plugin } @@ -79,6 +93,8 @@ services: arguments: - '@dbal.conn' - '%tables.posts%' + calls: + - [set_name, [post_text]] tags: - { name: text_reparser.plugin } @@ -87,5 +103,7 @@ services: arguments: - '@dbal.conn' - '%tables.users%' + calls: + - [set_name, [user_signature]] tags: - { name: text_reparser.plugin } diff --git a/phpBB/phpbb/console/command/reparser/list_all.php b/phpBB/phpbb/console/command/reparser/list_all.php index 028468649d..a79578abf0 100644 --- a/phpBB/phpbb/console/command/reparser/list_all.php +++ b/phpBB/phpbb/console/command/reparser/list_all.php @@ -34,10 +34,10 @@ class list_all extends \phpbb\console\command\command { parent::__construct($user); $this->reparser_names = array(); - foreach ($reparsers as $name => $reparser) + foreach ($reparsers as $reparser) { // Store the names without the "text_reparser." prefix - $this->reparser_names[] = preg_replace('(^text_reparser\\.)', '', $name); + $this->reparser_names[] = $reparser->get_name(); } } diff --git a/phpBB/phpbb/console/command/reparser/reparse.php b/phpBB/phpbb/console/command/reparser/reparse.php index cebeee0919..f285977ea2 100644 --- a/phpBB/phpbb/console/command/reparser/reparse.php +++ b/phpBB/phpbb/console/command/reparser/reparse.php @@ -140,13 +140,9 @@ class reparse extends \phpbb\console\command\command } $name = $input->getArgument('reparser-name'); - if (isset($name)) + if ($name) { - // Allow "post_text" to be an alias for "text_reparser.post_text" - if (!isset($this->reparsers[$name])) - { - $name = 'text_reparser.' . $name; - } + $name = $this->reparser_manager->find_reparser($name); $this->reparse($name); } else @@ -187,7 +183,7 @@ class reparse extends \phpbb\console\command\command /** * Reparse all text handled by given reparser within given range * - * @param string $name Reparser name + * @param string $name Reparser service name */ protected function reparse($name) { @@ -218,10 +214,10 @@ class reparse extends \phpbb\console\command\command return; } - $this->io->section($this->user->lang('CLI_REPARSER_REPARSE_REPARSING', preg_replace('(^text_reparser\\.)', '', $name), $min, $max)); + $this->io->section($this->user->lang('CLI_REPARSER_REPARSE_REPARSING', $reparser->get_name(), $min, $max)); $progress = $this->create_progress_bar($max, $this->io, $this->output, true); - $progress->setMessage($this->user->lang('CLI_REPARSER_REPARSE_REPARSING_START', preg_replace('(^text_reparser\\.)', '', $name))); + $progress->setMessage($this->user->lang('CLI_REPARSER_REPARSE_REPARSING_START', $reparser->get_name())); $progress->start(); // Start from $max and decrement $current by $size until we reach $min @@ -231,7 +227,7 @@ class reparse extends \phpbb\console\command\command $start = max($min, $current + 1 - $size); $end = max($min, $current); - $progress->setMessage($this->user->lang('CLI_REPARSER_REPARSE_REPARSING', preg_replace('(^text_reparser\\.)', '', $name), $start, $end)); + $progress->setMessage($this->user->lang('CLI_REPARSER_REPARSE_REPARSING', $reparser->get_name(), $start, $end)); $reparser->reparse_range($start, $end); $current = $start - 1; diff --git a/phpBB/phpbb/cron/task/text_reparser/reparser.php b/phpBB/phpbb/cron/task/text_reparser/reparser.php index 7099128efd..69392f5ac9 100644 --- a/phpBB/phpbb/cron/task/text_reparser/reparser.php +++ b/phpBB/phpbb/cron/task/text_reparser/reparser.php @@ -81,7 +81,7 @@ class reparser extends \phpbb\cron\task\base */ public function set_reparser($reparser) { - $this->reparser_name = (!isset($this->reparsers[$reparser]) ? 'text_reparser.' : '') . $reparser; + $this->reparser_name = !isset($this->reparsers[$reparser]) ? $this->reparser_manager->find_reparser($reparser) : $reparser; if ($this->resume_data === null) { diff --git a/phpBB/phpbb/textreparser/base.php b/phpBB/phpbb/textreparser/base.php index afa5ccacad..ef97bc90d5 100644 --- a/phpBB/phpbb/textreparser/base.php +++ b/phpBB/phpbb/textreparser/base.php @@ -15,6 +15,11 @@ namespace phpbb\textreparser; abstract class base implements reparser_interface { + /** + * @var string The reparser name + */ + protected $name; + /** * @var bool Whether to save changes to the database */ @@ -89,6 +94,26 @@ abstract class base implements reparser_interface return $record; } + /** + * Returns the name of the reparser + * + * @return string Name of reparser + */ + public function get_name() + { + return $this->name; + } + + /** + * Sets the name of the reparser + * + * @param string $name The reparser name + */ + public function set_name($name) + { + $this->name = $name; + } + /** * Disable saving changes to the database */ @@ -231,7 +256,7 @@ abstract class base implements reparser_interface $unparsed['enable_flash_bbcode'], $unparsed['enable_quote_bbcode'], $unparsed['enable_url_bbcode'], - 'reparse' + $this->get_name() ); // Save the new text if it has changed and it's not a dry run diff --git a/phpBB/phpbb/textreparser/manager.php b/phpBB/phpbb/textreparser/manager.php index fddd867923..7ca65d708d 100644 --- a/phpBB/phpbb/textreparser/manager.php +++ b/phpBB/phpbb/textreparser/manager.php @@ -125,4 +125,24 @@ class manager $this->schedule($reparser, $interval); } } + + /** + * Finds a reparser by name. + * + * If there is no reparser with the specified name, null is returned. + * + * @param string $name Name of the reparser to look up. + * @return string A reparser service name, or null. + */ + public function find_reparser($name) + { + foreach ($this->reparsers as $service => $reparser) + { + if ($reparser->get_name() == $name) + { + return $service; + } + } + return null; + } } diff --git a/phpBB/phpbb/textreparser/reparser_interface.php b/phpBB/phpbb/textreparser/reparser_interface.php index 9ea1732870..912de10058 100644 --- a/phpBB/phpbb/textreparser/reparser_interface.php +++ b/phpBB/phpbb/textreparser/reparser_interface.php @@ -22,6 +22,20 @@ interface reparser_interface */ public function get_max_id(); + /** + * Returns the name of the reparser + * + * @return string Name of reparser + */ + public function get_name(); + + /** + * Sets the name of the reparser + * + * @param string $name The reparser name + */ + public function set_name($name); + /** * Reparse all records in given range * From 76e9f4dd2d45e8f128e59e1378dfd6778eec9d48 Mon Sep 17 00:00:00 2001 From: Matt Friedman Date: Sun, 18 Dec 2016 09:12:26 -0800 Subject: [PATCH 2/2] [ticket/14925] Prefix modes from reparser with text_reparser PHPBB3-14925 --- phpBB/phpbb/textreparser/base.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpBB/phpbb/textreparser/base.php b/phpBB/phpbb/textreparser/base.php index ef97bc90d5..27d7bc1f27 100644 --- a/phpBB/phpbb/textreparser/base.php +++ b/phpBB/phpbb/textreparser/base.php @@ -256,7 +256,7 @@ abstract class base implements reparser_interface $unparsed['enable_flash_bbcode'], $unparsed['enable_quote_bbcode'], $unparsed['enable_url_bbcode'], - $this->get_name() + 'text_reparser.' . $this->get_name() ); // Save the new text if it has changed and it's not a dry run