diff options
Diffstat (limited to 'phpBB/phpbb/cron/manager.php')
| -rw-r--r-- | phpBB/phpbb/cron/manager.php | 138 | 
1 files changed, 138 insertions, 0 deletions
diff --git a/phpBB/phpbb/cron/manager.php b/phpBB/phpbb/cron/manager.php new file mode 100644 index 0000000000..84c9650830 --- /dev/null +++ b/phpBB/phpbb/cron/manager.php @@ -0,0 +1,138 @@ +<?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(); + +	protected $phpbb_root_path; +	protected $php_ext; + +	/** +	* Constructor. Loads all available tasks. +	* +	* @param array|Traversable $tasks Provides an iterable set of task names +	*/ +	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 +	* +	* @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() +	{ +		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; +	} + +	/** +	* Wraps a task inside an instance of phpbb_cron_task_wrapper. +	* +	* @param  phpbb_cron_task 			$task The task. +	* @return phpbb_cron_task_wrapper	The wrapped task. +	*/ +	public function wrap_task(phpbb_cron_task $task) +	{ +		return new phpbb_cron_task_wrapper($task, $this->phpbb_root_path, $this->php_ext); +	} +}  | 
