diff options
Diffstat (limited to 'engine/lib/cron.php')
| -rw-r--r-- | engine/lib/cron.php | 108 |
1 files changed, 60 insertions, 48 deletions
diff --git a/engine/lib/cron.php b/engine/lib/cron.php index 75897fb21..4f3d05b93 100644 --- a/engine/lib/cron.php +++ b/engine/lib/cron.php @@ -4,74 +4,86 @@ * * @package Elgg * @subpackage Core - * @author Curverider Ltd - * @link http://elgg.org/ */ -/** The cron exception. */ -class CronException extends Exception {} - /** - * Initialisation + * Cron initialization * + * @return void + * @access private */ function cron_init() { // Register a pagehandler for cron - register_page_handler('cron','cron_page_handler'); - + elgg_register_page_handler('cron', 'cron_page_handler'); + // register a hook for Walled Garden public pages - register_plugin_hook('public_pages', 'walled_garden', 'cron_public_pages'); + elgg_register_plugin_hook_handler('public_pages', 'walled_garden', 'cron_public_pages'); } /** - * Cron handler for redirecting pages. + * Cron handler * - * @param unknown_type $page + * @param array $page Pages + * + * @return bool + * @throws CronException + * @access private */ function cron_page_handler($page) { - global $CONFIG; + if (!isset($page[0])) { + forward(); + } - if ($page[0]) { - switch (strtolower($page[0])) { - case 'minute' : - case 'fiveminute' : - case 'fifteenmin' : - case 'halfhour' : - case 'hourly' : - case 'daily' : - case 'weekly' : - case 'monthly': - case 'yearly' : - case 'reboot' : - set_input('period', $page[0]); - break; - default : - throw new CronException(sprintf(elgg_echo('CronException:unknownperiod'), $page[0])); - } + $period = strtolower($page[0]); - // Include cron handler - include($CONFIG->path . "engine/handlers/cron_handler.php"); - } else { - forward(); + $allowed_periods = array( + 'minute', 'fiveminute', 'fifteenmin', 'halfhour', 'hourly', + 'daily', 'weekly', 'monthly', 'yearly', 'reboot' + ); + + if (!in_array($period, $allowed_periods)) { + throw new CronException(elgg_echo('CronException:unknownperiod', array($period))); } + + // Get a list of parameters + $params = array(); + $params['time'] = time(); + + // Data to return to + $old_stdout = ""; + ob_start(); + + $old_stdout = elgg_trigger_plugin_hook('cron', $period, $params, $old_stdout); + $std_out = ob_get_clean(); + + echo $std_out . $old_stdout; + return true; } +/** + * Register cron's pages as public in case we're in Walled Garden mode + * + * @param string $hook public_pages + * @param string $type system + * @param array $return_value Array of pages to allow + * @param mixed $params Params + * + * @return array + * @access private + */ function cron_public_pages($hook, $type, $return_value, $params) { - global $CONFIG; - - $return_value[] = "{$CONFIG->url}pg/cron/minute"; - $return_value[] = "{$CONFIG->url}pg/cron/fiveminute"; - $return_value[] = "{$CONFIG->url}pg/cron/fifteenmin"; - $return_value[] = "{$CONFIG->url}pg/cron/halfhour"; - $return_value[] = "{$CONFIG->url}pg/cron/hourly"; - $return_value[] = "{$CONFIG->url}pg/cron/daily"; - $return_value[] = "{$CONFIG->url}pg/cron/weekly"; - $return_value[] = "{$CONFIG->url}pg/cron/monthly"; - $return_value[] = "{$CONFIG->url}pg/cron/yearly"; - $return_value[] = "{$CONFIG->url}pg/cron/reboot"; - + $return_value[] = 'cron/minute'; + $return_value[] = 'cron/fiveminute'; + $return_value[] = 'cron/fifteenmin'; + $return_value[] = 'cron/halfhour'; + $return_value[] = 'cron/hourly'; + $return_value[] = 'cron/daily'; + $return_value[] = 'cron/weekly'; + $return_value[] = 'cron/monthly'; + $return_value[] = 'cron/yearly'; + $return_value[] = 'cron/reboot'; + return $return_value; } -// Register a startup event -register_elgg_event_handler('init','system','cron_init');
\ No newline at end of file +elgg_register_event_handler('init', 'system', 'cron_init'); |
