diff options
Diffstat (limited to 'phpBB/includes/cron/manager.php')
-rw-r--r-- | phpBB/includes/cron/manager.php | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/phpBB/includes/cron/manager.php b/phpBB/includes/cron/manager.php new file mode 100644 index 0000000000..7a78a1b054 --- /dev/null +++ b/phpBB/includes/cron/manager.php @@ -0,0 +1,146 @@ +<?php +/** +* +* @package phpBB3 +* @copyright (c) 2010 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +/** +* @ignore +*/ +if (!defined('IN_PHPBB')) +{ + exit; +} + +/** +* Cron manager class. +* +* Finds installed cron tasks, stores task objects, provides task selection. +* +* @package phpBB3 +*/ +class phpbb_cron_manager +{ + /** + * Set of phpbb_cron_task_wrapper objects. + * Array holding all tasks that have been found. + * + * @var array + */ + protected $tasks = array(); + + /** + * Constructor. Loads all available tasks. + * + * @param array|Traversable $task_names Provides an iterable set of task names + */ + public function __construct($task_names) + { + $this->load_tasks($task_names); + } + + /** + * Loads tasks given by name, wraps them + * and puts them into $this->tasks. + * + * @param array|Traversable $task_names Array of strings + * + * @return void + */ + public function load_tasks($task_names) + { + foreach ($task_names as $task_name) + { + $task = new $task_name(); + $wrapper = new phpbb_cron_task_wrapper($task); + $this->tasks[] = $wrapper; + } + } + + /** + * 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() + { + 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 A 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; + } + + /** + * Creates an instance of parametrized cron task $name with args $args. + * The constructed task is wrapped with cron task wrapper before being returned. + * + * @param string $name The task name, which is the same as cron task class name. + * @param array $args Will be passed to the task class's constructor. + * + * @return phpbb_cron_task_wrapper|null + */ + public function instantiate_task($name, array $args) + { + $task = $this->find_task($name); + if ($task) + { + // task here is actually an instance of cron task wrapper + $class = $task->get_name(); + $task = new $class($args); + // need to wrap the new task too + $task = new phpbb_cron_task_wrapper($task); + } + return $task; + } +} |