Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
87.50% |
7 / 8 |
CRAP | |
97.06% |
33 / 34 |
manager | |
0.00% |
0 / 1 |
|
87.50% |
7 / 8 |
16 | |
97.06% |
33 / 34 |
__construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
6 / 6 |
|||
load_tasks | |
100.00% |
1 / 1 |
2 | |
100.00% |
3 / 3 |
|||
load_tasks_from_container | |
100.00% |
1 / 1 |
2 | |
100.00% |
5 / 5 |
|||
find_one_ready_task | |
0.00% |
0 / 1 |
3.04 | |
83.33% |
5 / 6 |
|||
find_all_ready_tasks | |
100.00% |
1 / 1 |
3 | |
100.00% |
6 / 6 |
|||
find_task | |
100.00% |
1 / 1 |
3 | |
100.00% |
5 / 5 |
|||
get_tasks | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
wrap_task | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
<?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\cron; | |
use phpbb\cron\task\wrapper; | |
use phpbb\routing\helper; | |
use Symfony\Component\DependencyInjection\ContainerInterface; | |
/** | |
* Cron manager class. | |
* | |
* Finds installed cron tasks, stores task objects, provides task selection. | |
*/ | |
class manager | |
{ | |
/** | |
* @var ContainerInterface | |
*/ | |
protected $phpbb_container; | |
/** | |
* @var helper | |
*/ | |
protected $routing_helper; | |
/** | |
* Set of \phpbb\cron\task\wrapper objects. | |
* Array holding all tasks that have been found. | |
* | |
* @var array | |
*/ | |
protected $tasks = []; | |
/** | |
* Flag indicating if $this->tasks contains tasks registered in the container | |
* | |
* @var bool | |
*/ | |
protected $is_initialised_from_container = false; | |
/** | |
* @var string | |
*/ | |
protected $phpbb_root_path; | |
/** | |
* @var string | |
*/ | |
protected $php_ext; | |
/** | |
* @var \phpbb\template\template | |
*/ | |
protected $template; | |
/** | |
* Constructor. Loads all available tasks. | |
* | |
* @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 | |
* @param \phpbb\template\template $template | |
*/ | |
public function __construct(ContainerInterface $phpbb_container, helper $routing_helper, $phpbb_root_path, $php_ext, $template) | |
{ | |
$this->phpbb_container = $phpbb_container; | |
$this->routing_helper = $routing_helper; | |
$this->phpbb_root_path = $phpbb_root_path; | |
$this->php_ext = $php_ext; | |
$this->template = $template; | |
} | |
/** | |
* Loads tasks given by name, wraps them | |
* and puts them into $this->tasks. | |
* | |
* @param array|\Traversable $tasks Array of instances of \phpbb\cron\task\task | |
*/ | |
public function load_tasks($tasks) | |
{ | |
foreach ($tasks as $task) | |
{ | |
$this->tasks[] = $this->wrap_task($task); | |
} | |
} | |
/** | |
* Loads registered tasks from the container, wraps them | |
* and puts them into $this->tasks. | |
*/ | |
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. | |
* | |
* If several tasks are ready, any one of them could be returned. | |
* | |
* If no tasks are ready, null is returned. | |
* | |
* @return wrapper|null | |
*/ | |
public function find_one_ready_task() | |
{ | |
$this->load_tasks_from_container(); | |
shuffle($this->tasks); | |
foreach ($this->tasks as $task) | |
{ | |
if ($task->is_ready()) | |
{ | |
return $task; | |
} | |
} | |
return null; | |
} | |
/** | |
* Finds all tasks that are ready to run. | |
* | |
* @return array List of tasks which are ready to run (wrapped in \phpbb\cron\task\wrapper). | |
*/ | |
public function find_all_ready_tasks() | |
{ | |
$this->load_tasks_from_container(); | |
$tasks = []; | |
foreach ($this->tasks as $task) | |
{ | |
if ($task->is_ready()) | |
{ | |
$tasks[] = $task; | |
} | |
} | |
return $tasks; | |
} | |
/** | |
* Finds a task by name. | |
* | |
* If there is no task with the specified name, null is returned. | |
* | |
* Web runner uses this method to resolve names to tasks. | |
* | |
* @param string $name Name of the task to look up. | |
* @return wrapper A wrapped task corresponding to the given name, or null. | |
*/ | |
public function find_task($name) | |
{ | |
$this->load_tasks_from_container(); | |
foreach ($this->tasks as $task) | |
{ | |
if ($task->get_name() == $name) | |
{ | |
return $task; | |
} | |
} | |
return null; | |
} | |
/** | |
* Find all tasks and return them. | |
* | |
* @return array List of all tasks. | |
*/ | |
public function get_tasks() | |
{ | |
$this->load_tasks_from_container(); | |
return $this->tasks; | |
} | |
/** | |
* Wraps a task inside an instance of \phpbb\cron\task\wrapper. | |
* | |
* @param \phpbb\cron\task\task $task The task. | |
* @return wrapper The wrapped task. | |
*/ | |
public function wrap_task(\phpbb\cron\task\task $task) | |
{ | |
return new wrapper($task, $this->routing_helper, $this->phpbb_root_path, $this->php_ext, $this->template); | |
} | |
} |