Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
85.71% covered (warning)
85.71%
6 / 7
CRAP
93.55% covered (success)
93.55%
29 / 31
manager
0.00% covered (danger)
0.00%
0 / 1
85.71% covered (warning)
85.71%
6 / 7
14.05
93.55% covered (success)
93.55%
29 / 31
 __construct
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
4 / 4
 load_tasks
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
4 / 4
 find_one_ready_task
0.00% covered (danger)
0.00%
0 / 1
3.21
71.43% covered (warning)
71.43%
5 / 7
 find_all_ready_tasks
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
8 / 8
 find_task
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
6 / 6
 get_tasks
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 wrap_task
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
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;
/**
* Cron manager class.
*
* Finds installed cron tasks, stores task objects, provides task selection.
*/
class manager
{
    /**
    * Set of \phpbb\cron\task\wrapper objects.
    * Array holding all tasks that have been found.
    *
    * @var array
    */
    protected $tasks = array();
    protected $phpbb_root_path;
    protected $php_ext;
    /**
    * Constructor. Loads all available tasks.
    *
    * @param array|\Traversable $tasks Provides an iterable set of task names
    * @param string $phpbb_root_path Relative path to phpBB root
    * @param string $php_ext PHP file extension
    */
    public function __construct($tasks, $phpbb_root_path, $php_ext)
    {
        $this->phpbb_root_path = $phpbb_root_path;
        $this->php_ext = $php_ext;
        $this->load_tasks($tasks);
    }
    /**
    * 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
    *
    * @return null
    */
    public function load_tasks($tasks)
    {
        foreach ($tasks as $task)
        {
            $this->tasks[] = $this->wrap_task($task);
        }
    }
    /**
    * 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 \phpbb\cron\task\wrapper|null
    */
    public function find_one_ready_task()
    {
        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()
    {
        $tasks = array();
        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 \phpbb\cron\task\wrapper    A wrapped task corresponding to the given name, or null.
    */
    public function find_task($name)
    {
        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()
    {
        return $this->tasks;
    }
    /**
    * Wraps a task inside an instance of \phpbb\cron\task\wrapper.
    *
    * @param  \phpbb\cron\task\task             $task The task.
    * @return \phpbb\cron\task\wrapper    The wrapped task.
    */
    public function wrap_task(\phpbb\cron\task\task $task)
    {
        return new \phpbb\cron\task\wrapper($task, $this->phpbb_root_path, $this->php_ext);
    }
}