diff options
Diffstat (limited to 'engine/lib/cron.php')
| -rw-r--r-- | engine/lib/cron.php | 140 |
1 files changed, 83 insertions, 57 deletions
diff --git a/engine/lib/cron.php b/engine/lib/cron.php index a5ec123ff..4f3d05b93 100644 --- a/engine/lib/cron.php +++ b/engine/lib/cron.php @@ -1,63 +1,89 @@ <?php - /** - * Elgg cron library. - * - * @package Elgg - * @subpackage Core - * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 - * @author Curverider Ltd - * @copyright Curverider Ltd 2008 - * @link http://elgg.org/ - */ - - /** The cron exception. */ - class CronException extends Exception {} - - /** - * Initialisation - * - */ - function cron_init() - { - // Register a pagehandler for cron - register_page_handler('cron','cron_page_handler'); +/** + * Elgg cron library. + * + * @package Elgg + * @subpackage Core + */ + +/** + * Cron initialization + * + * @return void + * @access private + */ +function cron_init() { + // Register a pagehandler for cron + elgg_register_page_handler('cron', 'cron_page_handler'); + + // register a hook for Walled Garden public pages + elgg_register_plugin_hook_handler('public_pages', 'walled_garden', 'cron_public_pages'); +} + +/** + * Cron handler + * + * @param array $page Pages + * + * @return bool + * @throws CronException + * @access private + */ +function cron_page_handler($page) { + if (!isset($page[0])) { + forward(); } - - /** - * Cron handler for redirecting pages. - * - * @param unknown_type $page - */ - function cron_page_handler($page) - { - global $CONFIG; - - 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])); - } - - // Include cron handler - include($CONFIG->path . "engine/handlers/cron_handler.php"); - } - else - forward(); + + $period = strtolower($page[0]); + + $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) { + $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'; - // Register a startup event - register_elgg_event_handler('init','system','cron_init'); + return $return_value; +} -?>
\ No newline at end of file +elgg_register_event_handler('init', 'system', 'cron_init'); |
