diff --git a/phpBB/language/en/cli.php b/phpBB/language/en/cli.php index b1cbe80f4d..84fb92a30e 100644 --- a/phpBB/language/en/cli.php +++ b/phpBB/language/en/cli.php @@ -75,6 +75,7 @@ $lang = array_merge($lang, array( 'CLI_DESCRIPTION_REPARSER_REPARSE' => 'Reparses stored text with the current text_formatter services.', 'CLI_DESCRIPTION_REPARSER_REPARSE_ARG_1' => 'Type of text to reparse. Leave blank to reparse everything.', 'CLI_DESCRIPTION_REPARSER_REPARSE_OPT_DRY_RUN' => 'Do not save any changes; just print what would happen', + 'CLI_DESCRIPTION_REPARSER_REPARSE_OPT_FORCE_BBCODE' => 'Enforce reparsing BBCode in posts unconditionally', 'CLI_DESCRIPTION_REPARSER_REPARSE_OPT_RANGE_MIN' => 'Lowest record ID to process', 'CLI_DESCRIPTION_REPARSER_REPARSE_OPT_RANGE_MAX' => 'Highest record ID to process', 'CLI_DESCRIPTION_REPARSER_REPARSE_OPT_RANGE_SIZE' => 'Approximate number of records to process at a time', diff --git a/phpBB/phpbb/console/command/reparser/reparse.php b/phpBB/phpbb/console/command/reparser/reparse.php index f285977ea2..06511f63b9 100644 --- a/phpBB/phpbb/console/command/reparser/reparse.php +++ b/phpBB/phpbb/console/command/reparser/reparse.php @@ -92,6 +92,12 @@ class reparse extends \phpbb\console\command\command InputOption::VALUE_NONE, $this->user->lang('CLI_DESCRIPTION_REPARSER_REPARSE_OPT_DRY_RUN') ) + ->addOption( + 'force-bbcode-reparsing', + null, + InputOption::VALUE_NONE, + $this->user->lang('CLI_DESCRIPTION_REPARSER_REPARSE_OPT_FORCE_BBCODE') + ) ->addOption( 'resume', null, @@ -222,13 +228,15 @@ class reparse extends \phpbb\console\command\command // Start from $max and decrement $current by $size until we reach $min $current = $max; + + $force_bbcode_reparsing = (bool) $this->get_option('force-bbcode-reparsing'); while ($current >= $min) { $start = max($min, $current + 1 - $size); $end = max($min, $current); $progress->setMessage($this->user->lang('CLI_REPARSER_REPARSE_REPARSING', $reparser->get_name(), $start, $end)); - $reparser->reparse_range($start, $end); + $reparser->reparse_range($start, $end, $force_bbcode_reparsing); $current = $start - 1; $progress->setProgress($max + 1 - $start); diff --git a/phpBB/phpbb/textreparser/base.php b/phpBB/phpbb/textreparser/base.php index 82a59a075d..ebff0bba74 100644 --- a/phpBB/phpbb/textreparser/base.php +++ b/phpBB/phpbb/textreparser/base.php @@ -216,11 +216,11 @@ abstract class base implements reparser_interface /** * {@inheritdoc} */ - public function reparse_range($min_id, $max_id) + public function reparse_range($min_id, $max_id, bool $force_bbcode_reparsing = false) { foreach ($this->get_records_by_range($min_id, $max_id) as $record) { - $this->reparse_record($record); + $this->reparse_record($record, $force_bbcode_reparsing); } } @@ -228,16 +228,17 @@ abstract class base implements reparser_interface * Reparse given record * * @param array $record Associative array containing the record's data + * @param bool $force_bbcode_reparsing Flag indicating if BBCode should be reparsed unconditionally */ - protected function reparse_record(array $record) + protected function reparse_record(array $record, bool $force_bbcode_reparsing = false) { // Guess magic URL state based on actual record content before adding fields $record['enable_magic_url'] = $this->guess_magic_url($record); $record = $this->add_missing_fields($record); - $flags = ($record['enable_bbcode']) ? OPTION_FLAG_BBCODE : 0; - $flags |= ($record['enable_smilies']) ? OPTION_FLAG_SMILIES : 0; - $flags |= ($record['enable_magic_url']) ? OPTION_FLAG_LINKS : 0; + $flags = ($record['enable_bbcode'] || $force_bbcode_reparsing) ? OPTION_FLAG_BBCODE : 0; + $flags |= ($record['enable_smilies'] || $force_bbcode_reparsing) ? OPTION_FLAG_SMILIES : 0; + $flags |= ($record['enable_magic_url'] || $force_bbcode_reparsing) ? OPTION_FLAG_LINKS : 0; $unparsed = array_merge( $record, generate_text_for_edit($record['text'], $record['bbcode_uid'], $flags) @@ -252,13 +253,13 @@ abstract class base implements reparser_interface $unparsed['bbcode_uid'], $bitfield, $flags, - $unparsed['enable_bbcode'], - $unparsed['enable_magic_url'], - $unparsed['enable_smilies'], - $unparsed['enable_img_bbcode'], + $unparsed['enable_bbcode'] || $force_bbcode_reparsing, + $unparsed['enable_magic_url'] || $force_bbcode_reparsing, + $unparsed['enable_smilies'] || $force_bbcode_reparsing, + $unparsed['enable_img_bbcode'] || $force_bbcode_reparsing, $unparsed['enable_flash_bbcode'], - $unparsed['enable_quote_bbcode'], - $unparsed['enable_url_bbcode'], + $unparsed['enable_quote_bbcode'] || $force_bbcode_reparsing, + $unparsed['enable_url_bbcode'] || $force_bbcode_reparsing, 'text_reparser.' . $this->get_name() ); diff --git a/phpBB/phpbb/textreparser/reparser_interface.php b/phpBB/phpbb/textreparser/reparser_interface.php index 912de10058..99e1c26778 100644 --- a/phpBB/phpbb/textreparser/reparser_interface.php +++ b/phpBB/phpbb/textreparser/reparser_interface.php @@ -41,6 +41,7 @@ interface reparser_interface * * @param integer $min_id Lower bound * @param integer $max_id Upper bound + * @param bool $force_bbcode_reparsing Flag indicating if BBCode should be reparsed unconditionally */ - public function reparse_range($min_id, $max_id); + public function reparse_range($min_id, $max_id, bool $force_bbcode_reparsing = false); }