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.php89
1 files changed, 89 insertions, 0 deletions
diff --git a/engine/lib/cron.php b/engine/lib/cron.php
new file mode 100644
index 000000000..4f3d05b93
--- /dev/null
+++ b/engine/lib/cron.php
@@ -0,0 +1,89 @@
+<?php
+/**
+ * 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();
+ }
+
+ $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';
+
+ return $return_value;
+}
+
+elgg_register_event_handler('init', 'system', 'cron_init');