aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/cron
diff options
context:
space:
mode:
Diffstat (limited to 'phpBB/includes/cron')
-rw-r--r--phpBB/includes/cron/manager.php123
-rw-r--r--phpBB/includes/cron/task/base.php2
-rw-r--r--phpBB/includes/cron/task/core/prune_all_forums.php2
-rw-r--r--phpBB/includes/cron/task/core/prune_forum.php2
-rw-r--r--phpBB/includes/cron/task/core/queue.php2
-rw-r--r--phpBB/includes/cron/task/core/tidy_cache.php2
-rw-r--r--phpBB/includes/cron/task/core/tidy_database.php2
-rw-r--r--phpBB/includes/cron/task/core/tidy_search.php2
-rw-r--r--phpBB/includes/cron/task/core/tidy_sessions.php2
-rw-r--r--phpBB/includes/cron/task/core/tidy_warnings.php2
-rw-r--r--phpBB/includes/cron/task/parametrized.php2
-rw-r--r--phpBB/includes/cron/task/provider.php48
-rw-r--r--phpBB/includes/cron/task/task.php2
-rw-r--r--phpBB/includes/cron/task/wrapper.php2
14 files changed, 65 insertions, 130 deletions
diff --git a/phpBB/includes/cron/manager.php b/phpBB/includes/cron/manager.php
index 31be1a69cb..7a78a1b054 100644
--- a/phpBB/includes/cron/manager.php
+++ b/phpBB/includes/cron/manager.php
@@ -3,7 +3,7 @@
*
* @package phpBB3
* @copyright (c) 2010 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -33,137 +33,24 @@ class phpbb_cron_manager
protected $tasks = array();
/**
- * Path to the root of directory tree with tasks.
- * For bundled phpBB tasks, this is the path to includes/cron/tasks
- * under phpBB root.
- * @var string
- */
- protected $task_path;
-
- /**
- * PHP file extension
- * @var string
- */
- protected $phpEx;
-
- /**
- * Cache driver
- * @var phpbb_cache_driver_interface
- */
- protected $cache;
-
- /**
* Constructor. Loads all available tasks.
*
- * Tasks will be looked up in directory tree rooted at $task_path.
- * Task classes will be autoloaded and must be named according to
- * autoloading naming conventions. To load cron tasks shipped with
- * phpbb, pass $phpbb_root_path . 'includes/cron/task' as $task_path.
- *
- * If $cache is given, names of found cron tasks will be cached in it
- * for one hour. Note that the cron task names are stored without
- * namespacing; if two different phbb_cron_manager instances are
- * constructed with different $task_path arguments but the same $cache,
- * the second instance will use task names found by the first instance.
- *
- * @param string $task_path Directory containing cron tasks
- * @param string $phpEx PHP file extension
- * @param phpbb_cache_driver_interface $cache Cache for task names (optional)
- * @return void
+ * @param array|Traversable $task_names Provides an iterable set of task names
*/
- public function __construct($task_path, $phpEx, phpbb_cache_driver_interface $cache = null)
+ public function __construct($task_names)
{
- if (DIRECTORY_SEPARATOR != '/')
- {
- // Need this on some platforms since the code elsewhere uses /
- // to separate directory components, but PHP iterators return
- // paths with platform-specific directory separators.
- $task_path = str_replace('/', DIRECTORY_SEPARATOR, $task_path);
- }
-
- $this->task_path = $task_path;
- $this->phpEx = $phpEx;
- $this->cache = $cache;
-
- $task_names = $this->find_cron_task_names();
$this->load_tasks($task_names);
}
/**
- * Finds cron task names.
- *
- * A cron task file must follow the naming convention:
- * includes/cron/task/$mod/$name.php.
- * $mod is core for tasks that are part of phpbb.
- * Modifications should use their name as $mod.
- * $name is the name of the cron task.
- * Cron task is expected to be a class named phpbb_cron_task_${mod}_${name}.
- *
- * @return array List of task names
- */
- public function find_cron_task_names()
- {
- if ($this->cache)
- {
- $task_names = $this->cache->get('_cron_tasks');
-
- if ($task_names !== false)
- {
- return $task_names;
- }
- }
-
- $task_names = array();
- $ext = '.' . $this->phpEx;
- $ext_length = strlen($ext);
-
- $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($this->task_path));
-
- foreach ($iterator as $fileinfo)
- {
- $file = preg_replace('#^' . preg_quote($this->task_path, '#') . '#', '', $fileinfo->getPathname());
-
- // skip directories and files direclty in the task root path
- if ($fileinfo->isFile() && strpos($file, DIRECTORY_SEPARATOR) !== false)
- {
- $task_name = str_replace(DIRECTORY_SEPARATOR, '_', substr($file, 0, -$ext_length));
- if (substr($file, -$ext_length) == $ext && $this->is_valid_name($task_name))
- {
- $task_names[] = 'phpbb_cron_task_' . $task_name;
- }
- }
- }
-
- if ($this->cache)
- {
- $this->cache->put('_cron_tasks', $task_names, 3600);
- }
-
- return $task_names;
- }
-
- /**
- * Checks whether $name is a valid identifier, and
- * therefore part of valid cron task class name.
- *
- * @param string $name Name to check
- *
- * @return bool
- */
- public function is_valid_name($name)
- {
- return (bool) preg_match('/^[a-zA-Z][a-zA-Z0-9_]*$/', $name);
- }
-
- /**
* Loads tasks given by name, wraps them
* and puts them into $this->tasks.
*
- * @param array $task_names Array of strings
+ * @param array|Traversable $task_names Array of strings
*
* @return void
*/
- public function load_tasks(array $task_names)
+ public function load_tasks($task_names)
{
foreach ($task_names as $task_name)
{
diff --git a/phpBB/includes/cron/task/base.php b/phpBB/includes/cron/task/base.php
index 9db8e3bd44..c05fb9a87c 100644
--- a/phpBB/includes/cron/task/base.php
+++ b/phpBB/includes/cron/task/base.php
@@ -3,7 +3,7 @@
*
* @package phpBB3
* @copyright (c) 2010 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
diff --git a/phpBB/includes/cron/task/core/prune_all_forums.php b/phpBB/includes/cron/task/core/prune_all_forums.php
index 39b5765229..15b93a9ca6 100644
--- a/phpBB/includes/cron/task/core/prune_all_forums.php
+++ b/phpBB/includes/cron/task/core/prune_all_forums.php
@@ -3,7 +3,7 @@
*
* @package phpBB3
* @copyright (c) 2010 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
diff --git a/phpBB/includes/cron/task/core/prune_forum.php b/phpBB/includes/cron/task/core/prune_forum.php
index 55b1c58cd4..7686fd4281 100644
--- a/phpBB/includes/cron/task/core/prune_forum.php
+++ b/phpBB/includes/cron/task/core/prune_forum.php
@@ -3,7 +3,7 @@
*
* @package phpBB3
* @copyright (c) 2010 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
diff --git a/phpBB/includes/cron/task/core/queue.php b/phpBB/includes/cron/task/core/queue.php
index 96cade0ce5..1c72eec7c7 100644
--- a/phpBB/includes/cron/task/core/queue.php
+++ b/phpBB/includes/cron/task/core/queue.php
@@ -3,7 +3,7 @@
*
* @package phpBB3
* @copyright (c) 2010 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
diff --git a/phpBB/includes/cron/task/core/tidy_cache.php b/phpBB/includes/cron/task/core/tidy_cache.php
index 793ce746b4..c9dc0bd9ae 100644
--- a/phpBB/includes/cron/task/core/tidy_cache.php
+++ b/phpBB/includes/cron/task/core/tidy_cache.php
@@ -3,7 +3,7 @@
*
* @package phpBB3
* @copyright (c) 2010 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
diff --git a/phpBB/includes/cron/task/core/tidy_database.php b/phpBB/includes/cron/task/core/tidy_database.php
index fb0e81eaba..80a1901b1e 100644
--- a/phpBB/includes/cron/task/core/tidy_database.php
+++ b/phpBB/includes/cron/task/core/tidy_database.php
@@ -3,7 +3,7 @@
*
* @package phpBB3
* @copyright (c) 2010 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
diff --git a/phpBB/includes/cron/task/core/tidy_search.php b/phpBB/includes/cron/task/core/tidy_search.php
index dcc78abbb8..8a0b1b690a 100644
--- a/phpBB/includes/cron/task/core/tidy_search.php
+++ b/phpBB/includes/cron/task/core/tidy_search.php
@@ -3,7 +3,7 @@
*
* @package phpBB3
* @copyright (c) 2010 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
diff --git a/phpBB/includes/cron/task/core/tidy_sessions.php b/phpBB/includes/cron/task/core/tidy_sessions.php
index 81e7e6a147..ae7bb242b8 100644
--- a/phpBB/includes/cron/task/core/tidy_sessions.php
+++ b/phpBB/includes/cron/task/core/tidy_sessions.php
@@ -3,7 +3,7 @@
*
* @package phpBB3
* @copyright (c) 2010 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
diff --git a/phpBB/includes/cron/task/core/tidy_warnings.php b/phpBB/includes/cron/task/core/tidy_warnings.php
index e7d4cc9eea..e1434e7087 100644
--- a/phpBB/includes/cron/task/core/tidy_warnings.php
+++ b/phpBB/includes/cron/task/core/tidy_warnings.php
@@ -3,7 +3,7 @@
*
* @package phpBB3
* @copyright (c) 2010 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
diff --git a/phpBB/includes/cron/task/parametrized.php b/phpBB/includes/cron/task/parametrized.php
index c6c45be0c0..0714b2e701 100644
--- a/phpBB/includes/cron/task/parametrized.php
+++ b/phpBB/includes/cron/task/parametrized.php
@@ -3,7 +3,7 @@
*
* @package phpBB3
* @copyright (c) 2010 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
diff --git a/phpBB/includes/cron/task/provider.php b/phpBB/includes/cron/task/provider.php
new file mode 100644
index 0000000000..1482051699
--- /dev/null
+++ b/phpBB/includes/cron/task/provider.php
@@ -0,0 +1,48 @@
+<?php
+/**
+*
+* @package phpBB3
+* @copyright (c) 2011 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+
+/**
+* @ignore
+*/
+if (!defined('IN_PHPBB'))
+{
+ exit;
+}
+
+/**
+* Provides cron manager with tasks
+*
+* Finds installed cron tasks and makes them available to the cron manager.
+*
+* @package phpBB3
+*/
+class phpbb_cron_task_provider extends phpbb_extension_provider
+{
+ /**
+ * Finds cron task names using the extension manager.
+ *
+ * All PHP files in includes/cron/task/core/ are considered tasks. Tasks
+ * in extensions have to be located in a directory called cron or a subdir
+ * of a directory called cron. The class and filename must end in a _task
+ * suffix. Additionally all PHP files in includes/cron/task/core/ are
+ * tasks.
+ *
+ * @return array List of task names
+ */
+ protected function find()
+ {
+ $finder = $this->extension_manager->get_finder();
+
+ return $finder
+ ->extension_suffix('_task')
+ ->extension_directory('/cron')
+ ->core_path('includes/cron/task/core/')
+ ->get_classes();
+ }
+}
diff --git a/phpBB/includes/cron/task/task.php b/phpBB/includes/cron/task/task.php
index cceccce44f..2f2a9e51f9 100644
--- a/phpBB/includes/cron/task/task.php
+++ b/phpBB/includes/cron/task/task.php
@@ -3,7 +3,7 @@
*
* @package phpBB3
* @copyright (c) 2010 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
diff --git a/phpBB/includes/cron/task/wrapper.php b/phpBB/includes/cron/task/wrapper.php
index 238d97853c..66c45189e5 100644
--- a/phpBB/includes/cron/task/wrapper.php
+++ b/phpBB/includes/cron/task/wrapper.php
@@ -3,7 +3,7 @@
*
* @package phpBB3
* @copyright (c) 2010 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/