1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-07-30 21:40:43 +02:00

[feature/system-cron] Refactored cron task naming, loading and running.

PHPBB3-9596
This commit is contained in:
Oleg Pudeyev
2010-04-17 03:13:30 -04:00
parent 61e0285da8
commit 0f9b3bcc27
17 changed files with 261 additions and 340 deletions

View File

@@ -0,0 +1,63 @@
<?php
/**
*
* @package phpBB3
* @version $Id$
* @copyright (c) 2010 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
/**
* Prune all forums cron task.
*
* It is intended to be invoked from system cron.
* This task will find all forums for which pruning is enabled, and will
* prune all forums as necessary.
*
* @package phpBB3
*/
class cron_task_core_prune_all_forums extends cron_task_base
{
/**
* Runs this cron task.
*/
public function run()
{
global $db;
$sql = 'SELECT forum_id, prune_next, enable_prune, prune_days, prune_viewed, forum_flags, prune_freq
FROM ' . FORUMS_TABLE . "
WHERE enable_prune = 1 and prune_next < " . time();
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
if ($row['prune_days'])
{
auto_prune($row['forum_id'], 'posted', $row['forum_flags'], $row['prune_days'], $row['prune_freq']);
}
if ($row['prune_viewed'])
{
auto_prune($row['forum_id'], 'viewed', $row['forum_flags'], $row['prune_viewed'], $row['prune_freq']);
}
}
$db->sql_freeresult($result);
}
/**
* Returns whether this cron task can run, given current board configuration.
*/
public function is_runnable()
{
global $config;
return !!$config['use_system_cron'];
}
}

View File

@@ -0,0 +1,112 @@
<?php
/**
*
* @package phpBB3
* @version $Id$
* @copyright (c) 2010 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
/**
* Prune one forum cron task.
*
* It is intended to be used when cron is invoked via web.
* This task can decide whether it should be run using data obtained by viewforum
* code, without making additional database queries.
*
* @package phpBB3
*/
class cron_task_core_prune_forum extends cron_task_base implements parametrized_cron_task
{
/**
* Constructor.
*
* If $forum_data is given, it is assumed to contain necessary information
* about a single forum that is to be pruned.
*
* If $forum_data is not given, forum id will be retrieved via request_var
* and a database query will be performed to load the necessary information
* about the forum.
*/
public function __construct($forum_data=null)
{
global $db;
if ($forum_data)
{
$this->forum_data = $forum_data;
}
else
{
$forum_id = request_var('f', 0);
$sql = 'SELECT forum_id, prune_next, enable_prune, prune_days, prune_viewed, forum_flags, prune_freq
FROM ' . FORUMS_TABLE . "
WHERE forum_id = $forum_id";
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
if (!$row)
{
// FIXME what to do?
break;
}
$this->forum_data = $row;
}
}
/**
* Runs this cron task.
*/
public function run()
{
global $phpbb_root_path, $phpEx;
include_once($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
if ($this->forum_data['prune_days'])
{
auto_prune($this->forum_data['forum_id'], 'posted', $this->forum_data['forum_flags'], $this->forum_data['prune_days'], $this->forum_data['prune_freq']);
}
if ($this->forum_data['prune_viewed'])
{
auto_prune($this->forum_data['forum_id'], 'viewed', $this->forum_data['forum_flags'], $this->forum_data['prune_viewed'], $this->forum_data['prune_freq']);
}
}
/**
* Returns whether this cron task can run, given current board configuration.
*/
public function is_runnable()
{
global $config;
return !$config['use_system_cron'];
}
/**
* Returns whether this cron task should run now, because enough time
* has passed since it was last run.
*/
public function should_run()
{
return $this->forum_data['enable_prune'] && $this->forum_data['prune_next'] < time();
}
/**
* Returns parameters of this cron task as a query string.
*/
public function get_url_query_string()
{
return 'f=' . $this->forum_data['forum_id'];
}
}

View File

@@ -0,0 +1,64 @@
<?php
/**
*
* @package phpBB3
* @version $Id$
* @copyright (c) 2010 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
/**
* Queue cron task. Sends email and jabber messages queued by other scripts.
*
* @package phpBB3
*/
class cron_task_core_queue extends cron_task_base
{
/**
* Runs this cron task.
*/
public function run()
{
global $phpbb_root_path, $phpEx;
include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx);
$queue = new queue();
$queue->process();
}
/**
* Returns whether this cron task can run, given current board configuration.
*/
public function is_runnable()
{
global $phpbb_root_path, $phpEx;
return file_exists($phpbb_root_path . 'cache/queue.' . $phpEx);
}
/**
* Returns whether this cron task should run now, because enough time
* has passed since it was last run.
*/
public function should_run()
{
global $config;
return $config['last_queue_run'] < time() - $config['queue_interval_config'];
}
/**
* Returns whether this cron task can be run in shutdown function.
*/
public function is_shutdown_function_safe()
{
global $config;
return !$config['smtp_delivery'];
}
}

View File

@@ -0,0 +1,53 @@
<?php
/**
*
* @package phpBB3
* @version $Id$
* @copyright (c) 2010 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
/**
* Tidy cache cron task.
*
* @package phpBB3
*/
class cron_task_core_tidy_cache extends cron_task_base
{
/**
* Runs this cron task.
*/
public function run()
{
global $cache;
$cache->tidy();
}
/**
* Returns whether this cron task can run, given current board configuration.
*/
public function is_runnable()
{
global $cache;
return method_exists($cache, 'tidy');
}
/**
* Returns whether this cron task should run now, because enough time
* has passed since it was last run.
*/
public function should_run()
{
global $config;
return $config['cache_last_gc'] < time() - $config['cache_gc'];
}
}

View File

@@ -0,0 +1,44 @@
<?php
/**
*
* @package phpBB3
* @version $Id$
* @copyright (c) 2010 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
/**
* Tidy database cron task.
*
* @package phpBB3
*/
class cron_task_core_tidy_database extends cron_task_base
{
/**
* Runs this cron task.
*/
public function run()
{
include_once($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
tidy_database();
}
/**
* Returns whether this cron task should run now, because enough time
* has passed since it was last run.
*/
public function should_run()
{
global $config;
return $config['database_last_gc'] < time() - $config['database_gc'];
}
}

View File

@@ -0,0 +1,72 @@
<?php
/**
*
* @package phpBB3
* @version $Id$
* @copyright (c) 2010 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
/**
* Tidy search cron task.
*
* Will only run when the currently selected search backend supports tidying.
*
* @package phpBB3
*/
class cron_task_core_tidy_sessions extends cron_task_base
{
/**
* Runs this cron task.
*/
public function run()
{
global $phpbb_root_path, $phpEx, $config, $error;
// Select the search method
$search_type = basename($config['search_type']);
include_once("{$phpbb_root_path}includes/search/$search_type.$phpEx");
// We do some additional checks in the module to ensure it can actually be utilised
$error = false;
$search = new $search_type($error);
if (!$error)
{
$search->tidy();
}
}
/**
* Returns whether this cron task can run, given current board configuration.
*/
public function is_runnable()
{
global $phpbb_root_path, $phpEx, $config;
// Select the search method
$search_type = basename($config['search_type']);
return file_exists($phpbb_root_path . 'includes/search/' . $search_type . '.' . $phpEx);
}
/**
* Returns whether this cron task should run now, because enough time
* has passed since it was last run.
*/
public function should_run()
{
global $config;
return $config['search_last_gc'] < time() - $config['search_gc'];
}
}

View File

@@ -0,0 +1,44 @@
<?php
/**
*
* @package phpBB3
* @version $Id$
* @copyright (c) 2010 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
/**
* Tidy sessions cron task.
*
* @package phpBB3
*/
class cron_task_core_tidy_sessions extends cron_task_base
{
/**
* Runs this cron task.
*/
public function run()
{
global $user;
$user->session_gc();
}
/**
* Returns whether this cron task should run now, because enough time
* has passed since it was last run.
*/
public function should_run()
{
global $config;
return $config['session_last_gc'] < time() - $config['session_gc'];
}
}

View File

@@ -0,0 +1,56 @@
<?php
/**
*
* @package phpBB3
* @version $Id$
* @copyright (c) 2010 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
/**
* Tidy warnings cron task.
*
* Will only run when warnings are configured to expire.
*
* @package phpBB3
*/
class cron_task_core_tidy_warnings extends cron_task_base
{
/**
* Runs this cron task.
*/
public function run()
{
global $phpbb_root_path, $phpEx;
include_once($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
tidy_warnings();
}
/**
* Returns whether this cron task can run, given current board configuration.
*/
public function is_runnable()
{
global $config;
return !!$config['warnings_expire_days'];
}
/**
* Returns whether this cron task should run now, because enough time
* has passed since it was last run.
*/
public function should_run()
{
global $config;
return $config['warnings_last_gc'] < time() - $config['warnings_gc'];
}
}