diff --git a/phpBB/config/default/container/services_cron.yml b/phpBB/config/default/container/services_cron.yml index 1b69877e01..70affbbaf4 100644 --- a/phpBB/config/default/container/services_cron.yml +++ b/phpBB/config/default/container/services_cron.yml @@ -2,7 +2,7 @@ services: cron.manager: class: phpbb\cron\manager arguments: - - '@cron.task_collection' + - '@service_container' - '@routing.helper' - '%core.root_path%' - '%core.php_ext%' diff --git a/phpBB/phpbb/cron/manager.php b/phpBB/phpbb/cron/manager.php index f073721cc5..11334fdec9 100644 --- a/phpBB/phpbb/cron/manager.php +++ b/phpBB/phpbb/cron/manager.php @@ -15,6 +15,7 @@ namespace phpbb\cron; use phpbb\cron\task\wrapper; use phpbb\routing\helper; +use Symfony\Component\DependencyInjection\ContainerInterface; /** * Cron manager class. @@ -23,6 +24,11 @@ use phpbb\routing\helper; */ class manager { + /** + * @var ContainerInterface + */ + protected $phpbb_container; + /** * @var helper */ @@ -34,7 +40,14 @@ class manager * * @var array */ - protected $tasks = array(); + protected $tasks = []; + + /** + * Flag indicating if $this->tasks contains tasks registered in the container + * + * @var bool + */ + protected $is_initialised_from_container = false; /** * @var string @@ -49,18 +62,17 @@ class manager /** * Constructor. Loads all available tasks. * - * @param array|\Traversable $tasks Provides an iterable set of task names + * @param ContainerInterface $phpbb_container Container * @param helper $routing_helper Routing helper * @param string $phpbb_root_path Relative path to phpBB root * @param string $php_ext PHP file extension */ - public function __construct($tasks, helper $routing_helper, $phpbb_root_path, $php_ext) + public function __construct(ContainerInterface $phpbb_container, helper $routing_helper, $phpbb_root_path, $php_ext) { + $this->phpbb_container = $phpbb_container; $this->routing_helper = $routing_helper; $this->phpbb_root_path = $phpbb_root_path; $this->php_ext = $php_ext; - - $this->load_tasks($tasks); } /** @@ -79,6 +91,24 @@ class manager } } + /** + * Loads registered tasks from the container, wraps them + * and puts them into $this->tasks. + * + * @return null + */ + public function load_tasks_from_container() + { + if (!$this->is_initialised_from_container) + { + $this->is_initialised_from_container = true; + + $tasks = $this->phpbb_container->get('cron.task_collection'); + + $this->load_tasks($tasks); + } + } + /** * Finds a task that is ready to run. * @@ -90,6 +120,8 @@ class manager */ public function find_one_ready_task() { + $this->load_tasks_from_container(); + shuffle($this->tasks); foreach ($this->tasks as $task) { @@ -108,7 +140,9 @@ class manager */ public function find_all_ready_tasks() { - $tasks = array(); + $this->load_tasks_from_container(); + + $tasks = []; foreach ($this->tasks as $task) { if ($task->is_ready()) @@ -131,6 +165,8 @@ class manager */ public function find_task($name) { + $this->load_tasks_from_container(); + foreach ($this->tasks as $task) { if ($task->get_name() == $name) @@ -148,6 +184,8 @@ class manager */ public function get_tasks() { + $this->load_tasks_from_container(); + return $this->tasks; } diff --git a/tests/console/cron/cron_list_test.php b/tests/console/cron/cron_list_test.php index fb6fe3c502..aaa3e260e6 100644 --- a/tests/console/cron/cron_list_test.php +++ b/tests/console/cron/cron_list_test.php @@ -98,7 +98,11 @@ class phpbb_console_command_cron_list_test extends phpbb_test_case $pathEx ); - $this->cron_manager = new \phpbb\cron\manager($tasks, $routing_helper, $phpbb_root_path, $pathEx); + $mock_container = new phpbb_mock_container_builder(); + $mock_container->set('cron.task_collection', []); + + $this->cron_manager = new \phpbb\cron\manager($mock_container, $routing_helper, $phpbb_root_path, $pathEx); + $this->cron_manager->load_tasks($tasks); } public function get_command_tester() diff --git a/tests/console/cron/run_test.php b/tests/console/cron/run_test.php index 013e841442..cdad4c13e6 100644 --- a/tests/console/cron/run_test.php +++ b/tests/console/cron/run_test.php @@ -74,7 +74,11 @@ class phpbb_console_command_cron_run_test extends phpbb_database_test_case $phpEx ); - $this->cron_manager = new \phpbb\cron\manager($tasks, $routing_helper, $phpbb_root_path, $phpEx); + $mock_container = new phpbb_mock_container_builder(); + $mock_container->set('cron.task_collection', []); + + $this->cron_manager = new \phpbb\cron\manager($mock_container, $routing_helper, $phpbb_root_path, $phpEx); + $this->cron_manager->load_tasks($tasks); $this->assertSame('0', $config['cron_lock']); } @@ -149,7 +153,12 @@ class phpbb_console_command_cron_run_test extends phpbb_database_test_case $phpEx ); - $this->cron_manager = new \phpbb\cron\manager($tasks, $routing_helper, $phpbb_root_path, $phpEx); + $mock_container = new phpbb_mock_container_builder(); + $mock_container->set('cron.task_collection', []); + + $this->cron_manager = new \phpbb\cron\manager($mock_container, $routing_helper, $phpbb_root_path, $phpEx); + $this->cron_manager->load_tasks($tasks); + $command_tester = $this->get_command_tester(); $exit_status = $command_tester->execute(array('command' => $this->command_name)); @@ -191,7 +200,12 @@ class phpbb_console_command_cron_run_test extends phpbb_database_test_case $phpEx ); - $this->cron_manager = new \phpbb\cron\manager($tasks, $routing_helper, $phpbb_root_path, $phpEx); + $mock_container = new phpbb_mock_container_builder(); + $mock_container->set('cron.task_collection', []); + + $this->cron_manager = new \phpbb\cron\manager($mock_container, $routing_helper, $phpbb_root_path, $phpEx); + $this->cron_manager->load_tasks($tasks); + $command_tester = $this->get_command_tester(); $exit_status = $command_tester->execute(array('command' => $this->command_name, '--verbose' => true)); diff --git a/tests/controller/common_helper_route.php b/tests/controller/common_helper_route.php index 15695735b8..cfbfb8a7f9 100644 --- a/tests/controller/common_helper_route.php +++ b/tests/controller/common_helper_route.php @@ -202,13 +202,16 @@ abstract class phpbb_controller_common_helper_route extends phpbb_database_test_ */ public function test_helper_url_no_rewrite($route, $params, $is_amp, $session_id, $expected, $description) { + $mock_container = new phpbb_mock_container_builder(); + $mock_container->set('cron.task_collection', []); + $this->config = new \phpbb\config\config(array('enable_mod_rewrite' => '0')); $this->routing_helper = new \phpbb\routing\helper($this->config, $this->router, $this->symfony_request, $this->request, $this->root_path, 'php'); $this->helper = new phpbb_mock_controller_helper( $this->auth, $this->cache, $this->config, - new \phpbb\cron\manager([], $this->routing_helper, $this->root_path, 'php'), + new \phpbb\cron\manager($mock_container, $this->routing_helper, $this->root_path, 'php'), $this->db, $this->dispatcher, $this->language, @@ -262,13 +265,16 @@ abstract class phpbb_controller_common_helper_route extends phpbb_database_test_ */ public function test_helper_url_with_rewrite($route, $params, $is_amp, $session_id, $expected, $description) { + $mock_container = new phpbb_mock_container_builder(); + $mock_container->set('cron.task_collection', []); + $this->config = new \phpbb\config\config(array('enable_mod_rewrite' => '1')); $this->routing_helper = new \phpbb\routing\helper($this->config, $this->router, $this->symfony_request, $this->request, $this->root_path, 'php'); $this->helper = new phpbb_mock_controller_helper( $this->auth, $this->cache, $this->config, - new \phpbb\cron\manager([], $this->routing_helper, $this->root_path, 'php'), + new \phpbb\cron\manager($mock_container, $this->routing_helper, $this->root_path, 'php'), $this->db, $this->dispatcher, $this->language, @@ -322,13 +328,16 @@ abstract class phpbb_controller_common_helper_route extends phpbb_database_test_ */ public function test_helper_url_absolute($route, $params, $is_amp, $session_id, $expected, $description) { + $mock_container = new phpbb_mock_container_builder(); + $mock_container->set('cron.task_collection', []); + $this->config = new \phpbb\config\config(array('enable_mod_rewrite' => '0')); $this->routing_helper = new \phpbb\routing\helper($this->config, $this->router, $this->symfony_request, $this->request, $this->root_path, 'php'); $this->helper = new phpbb_mock_controller_helper( $this->auth, $this->cache, $this->config, - new \phpbb\cron\manager([], $this->routing_helper, $this->root_path, 'php'), + new \phpbb\cron\manager($mock_container, $this->routing_helper, $this->root_path, 'php'), $this->db, $this->dispatcher, $this->language, @@ -382,13 +391,16 @@ abstract class phpbb_controller_common_helper_route extends phpbb_database_test_ */ public function test_helper_url_relative_path($route, $params, $is_amp, $session_id, $expected, $description) { + $mock_container = new phpbb_mock_container_builder(); + $mock_container->set('cron.task_collection', []); + $this->config = new \phpbb\config\config(array('enable_mod_rewrite' => '0')); $this->routing_helper = new \phpbb\routing\helper($this->config, $this->router, $this->symfony_request, $this->request, $this->root_path, 'php'); $this->helper = new phpbb_mock_controller_helper( $this->auth, $this->cache, $this->config, - new \phpbb\cron\manager([], $this->routing_helper, $this->root_path, 'php'), + new \phpbb\cron\manager($mock_container, $this->routing_helper, $this->root_path, 'php'), $this->db, $this->dispatcher, $this->language, @@ -442,13 +454,16 @@ abstract class phpbb_controller_common_helper_route extends phpbb_database_test_ */ public function test_helper_url_network($route, $params, $is_amp, $session_id, $expected, $description) { + $mock_container = new phpbb_mock_container_builder(); + $mock_container->set('cron.task_collection', []); + $this->config = new \phpbb\config\config(array('enable_mod_rewrite' => '0')); $this->routing_helper = new \phpbb\routing\helper($this->config, $this->router, $this->symfony_request, $this->request, $this->root_path, 'php'); $this->helper = new phpbb_mock_controller_helper( $this->auth, $this->cache, $this->config, - new \phpbb\cron\manager([], $this->routing_helper, $this->root_path, 'php'), + new \phpbb\cron\manager($mock_container, $this->routing_helper, $this->root_path, 'php'), $this->db, $this->dispatcher, $this->language, @@ -502,13 +517,16 @@ abstract class phpbb_controller_common_helper_route extends phpbb_database_test_ */ public function test_helper_url_absolute_with_rewrite($route, $params, $is_amp, $session_id, $expected, $description) { + $mock_container = new phpbb_mock_container_builder(); + $mock_container->set('cron.task_collection', []); + $this->config = new \phpbb\config\config(array('enable_mod_rewrite' => '1')); $this->routing_helper = new \phpbb\routing\helper($this->config, $this->router, $this->symfony_request, $this->request, $this->root_path, 'php'); $this->helper = new phpbb_mock_controller_helper( $this->auth, $this->cache, $this->config, - new \phpbb\cron\manager([], $this->routing_helper, $this->root_path, 'php'), + new \phpbb\cron\manager($mock_container, $this->routing_helper, $this->root_path, 'php'), $this->db, $this->dispatcher, $this->language, @@ -559,13 +577,16 @@ abstract class phpbb_controller_common_helper_route extends phpbb_database_test_ */ public function test_helper_url_relative_path_with_rewrite($route, $params, $is_amp, $session_id, $expected, $description) { + $mock_container = new phpbb_mock_container_builder(); + $mock_container->set('cron.task_collection', []); + $this->config = new \phpbb\config\config(array('enable_mod_rewrite' => '1')); $this->routing_helper = new \phpbb\routing\helper($this->config, $this->router, $this->symfony_request, $this->request, $this->root_path, 'php'); $this->helper = new phpbb_mock_controller_helper( $this->auth, $this->cache, $this->config, - new \phpbb\cron\manager([], $this->routing_helper, $this->root_path, 'php'), + new \phpbb\cron\manager($mock_container, $this->routing_helper, $this->root_path, 'php'), $this->db, $this->dispatcher, $this->language, @@ -619,13 +640,16 @@ abstract class phpbb_controller_common_helper_route extends phpbb_database_test_ */ public function test_helper_url_network_with_rewrite($route, $params, $is_amp, $session_id, $expected, $description) { + $mock_container = new phpbb_mock_container_builder(); + $mock_container->set('cron.task_collection', []); + $this->config = new \phpbb\config\config(['enable_mod_rewrite' => '1']); $this->routing_helper = new \phpbb\routing\helper($this->config, $this->router, $this->symfony_request, $this->request, $this->root_path, 'php'); $this->helper = new phpbb_mock_controller_helper( $this->auth, $this->cache, $this->config, - new \phpbb\cron\manager([], $this->routing_helper, $this->root_path, 'php'), + new \phpbb\cron\manager($mock_container, $this->routing_helper, $this->root_path, 'php'), $this->db, $this->dispatcher, $this->language, @@ -668,12 +692,16 @@ abstract class phpbb_controller_common_helper_route extends phpbb_database_test_ 'server_protocol' => $server_protocol, )); + $mock_container = new phpbb_mock_container_builder(); + $mock_container->set('cron.task_collection', []); + $this->routing_helper = new \phpbb\routing\helper($this->config, $this->router, $this->symfony_request, $this->request, $this->root_path, 'php'); + $this->helper = new phpbb_mock_controller_helper( $this->auth, $this->cache, $this->config, - new \phpbb\cron\manager([], $this->routing_helper, $this->root_path, 'php'), + new \phpbb\cron\manager($mock_container, $this->routing_helper, $this->root_path, 'php'), $this->db, $this->dispatcher, $this->language, diff --git a/tests/cron/manager_test.php b/tests/cron/manager_test.php index e5326daa2c..5f1acac2ae 100644 --- a/tests/cron/manager_test.php +++ b/tests/cron/manager_test.php @@ -104,6 +104,12 @@ class phpbb_cron_manager_test extends \phpbb_test_case $phpEx ); - return new \phpbb\cron\manager($tasks, $routing_helper, $phpbb_root_path, $phpEx); + $mock_container = new phpbb_mock_container_builder(); + $mock_container->set('cron.task_collection', []); + + $cron_manager = new \phpbb\cron\manager($mock_container, $routing_helper, $phpbb_root_path, $phpEx); + $cron_manager->load_tasks($tasks); + + return $cron_manager; } } diff --git a/tests/pagination/pagination_test.php b/tests/pagination/pagination_test.php index 0c920dc9a7..8ad22f8d5d 100644 --- a/tests/pagination/pagination_test.php +++ b/tests/pagination/pagination_test.php @@ -42,6 +42,10 @@ class phpbb_pagination_pagination_test extends phpbb_template_template_test_case new \phpbb\routing\file_locator(dirname(__FILE__) . '/') ); $resources_locator = new \phpbb\routing\resources_locator\default_resources_locator(dirname(__FILE__) . '/', PHPBB_ENVIRONMENT, $manager); + + $mock_container = new phpbb_mock_container_builder(); + $mock_container->set('cron.task_collection', []); + $router = new phpbb_mock_router(new phpbb_mock_container_builder(), $resources_locator, $loader, 'php', dirname(__FILE__) . '/', true, true); $request = new phpbb_mock_request(); @@ -62,7 +66,7 @@ class phpbb_pagination_pagination_test extends phpbb_template_template_test_case new \phpbb\auth\auth(), new \phpbb\cache\driver\dummy(), $this->config, - new \phpbb\cron\manager([], $this->routing_helper, '', 'php'), + new \phpbb\cron\manager($mock_container, $this->routing_helper, '', 'php'), $db, new phpbb_mock_event_dispatcher(), new \phpbb\language\language(new \phpbb\language\language_file_loader($phpbb_root_path, $phpEx)),