aboutsummaryrefslogtreecommitdiff
path: root/engine/lib/cron.php
diff options
context:
space:
mode:
Diffstat (limited to 'engine/lib/cron.php')
-rw-r--r--engine/lib/cron.php140
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');