Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
CRAP | |
0.00% |
0 / 60 |
| text_reparser | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
156 | |
0.00% |
0 / 60 |
| depends_on | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
| effectively_installed | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
| update_data | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 13 |
|||
| reparse | |
0.00% |
0 / 1 |
90 | |
0.00% |
0 / 43 |
|||
| <?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\db\migration\data\v320; | |
| use phpbb\textreparser\manager; | |
| use phpbb\textreparser\reparser_interface; | |
| class text_reparser extends \phpbb\db\migration\container_aware_migration | |
| { | |
| static public function depends_on() | |
| { | |
| return array( | |
| '\phpbb\db\migration\data\v310\contact_admin_form', | |
| '\phpbb\db\migration\data\v320\allowed_schemes_links', | |
| ); | |
| } | |
| public function effectively_installed() | |
| { | |
| return isset($this->config['reparse_lock']); | |
| } | |
| public function update_data() | |
| { | |
| return array( | |
| array('config.add', array('reparse_lock', 0, true)), | |
| array('config.add', array('text_reparser.pm_text_cron_interval', 10)), | |
| array('config.add', array('text_reparser.pm_text_last_cron', 0)), | |
| array('config.add', array('text_reparser.poll_option_cron_interval', 10)), | |
| array('config.add', array('text_reparser.poll_option_last_cron', 0)), | |
| array('config.add', array('text_reparser.poll_title_cron_interval', 10)), | |
| array('config.add', array('text_reparser.poll_title_last_cron', 0)), | |
| array('config.add', array('text_reparser.post_text_cron_interval', 10)), | |
| array('config.add', array('text_reparser.post_text_last_cron', 0)), | |
| array('config.add', array('text_reparser.user_signature_cron_interval', 10)), | |
| array('config.add', array('text_reparser.user_signature_last_cron', 0)), | |
| array('custom', array(array($this, 'reparse'))), | |
| ); | |
| } | |
| public function reparse($resume_data) | |
| { | |
| /** @var manager $reparser_manager */ | |
| $reparser_manager = $this->container->get('text_reparser.manager'); | |
| if (!is_array($resume_data)) | |
| { | |
| /** @var reparser_interface[] $reparsers */ | |
| $reparsers = $this->container->get('text_reparser_collection'); | |
| // Initialize all reparsers | |
| foreach ($reparsers as $name => $reparser) | |
| { | |
| $reparser_manager->update_resume_data($name, 1, $reparser->get_max_id(), 100); | |
| } | |
| } | |
| // Sometimes a cron job is too much | |
| $limit = 100; | |
| $fast_reparsers = array( | |
| 'text_reparser.contact_admin_info', | |
| 'text_reparser.forum_description', | |
| 'text_reparser.forum_rules', | |
| 'text_reparser.group_description', | |
| ); | |
| if (!is_array($resume_data)) | |
| { | |
| $resume_data = array( | |
| 'reparser' => 0, | |
| 'current' => $this->container->get($fast_reparsers[0])->get_max_id(), | |
| ); | |
| } | |
| $fast_reparsers_size = count($fast_reparsers); | |
| $processed_records = 0; | |
| while ($processed_records < $limit && $resume_data['reparser'] < $fast_reparsers_size) | |
| { | |
| $reparser = $this->container->get($fast_reparsers[$resume_data['reparser']]); | |
| // New reparser | |
| if ($resume_data['current'] === 0) | |
| { | |
| $resume_data['current'] = $reparser->get_max_id(); | |
| } | |
| $start = max(1, $resume_data['current'] + 1 - ($limit - $processed_records)); | |
| $end = max(1, $resume_data['current']); | |
| $reparser->reparse_range($start, $end); | |
| $processed_records += $end - $start + 1; | |
| $resume_data['current'] = $start - 1; | |
| if ($start === 1) | |
| { | |
| // Prevent CLI command from running these reparsers again | |
| $reparser_manager->update_resume_data($fast_reparsers[$resume_data['reparser']], 1, 0, $limit); | |
| $resume_data['reparser']++; | |
| } | |
| } | |
| if ($resume_data['reparser'] === $fast_reparsers_size) | |
| { | |
| return true; | |
| } | |
| return $resume_data; | |
| } | |
| } |