12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- <?php
- /**
- * Elgg cron library.
- *
- * @package Elgg.Core
- * @subpackage Cron
- */
- /**
- * Cron initialization
- *
- * @return void
- * @access private
- */
- function _elgg_cron_init() {
- elgg_register_page_handler('cron', '_elgg_cron_page_handler');
- elgg_register_plugin_hook_handler('cron', 'all', '_elgg_cron_monitor', 1000);
- elgg_set_config('elgg_cron_periods', array(
- 'minute',
- 'fiveminute',
- 'fifteenmin',
- 'halfhour',
- 'hourly',
- 'daily',
- 'weekly',
- 'monthly',
- 'yearly',
- // reboot is deprecated and probably does not work
- 'reboot',
- ));
- elgg_register_admin_menu_item('administer', 'cron', 'statistics');
- }
- /**
- * Cron handler
- *
- * @param array $page Pages
- *
- * @return bool
- * @throws CronException
- * @access private
- */
- function _elgg_cron_page_handler($page) {
- if (!isset($page[0])) {
- forward();
- }
- $period = strtolower($page[0]);
- $allowed_periods = elgg_get_config('elgg_cron_periods');
- if (!in_array($period, $allowed_periods)) {
- throw new \CronException("$period is not a recognized cron 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;
- }
- /**
- * Record cron running
- *
- * @param string $hook Hook name
- * @param string $period Cron period
- * @param string $output Output content
- * @param array $params Hook parameters
- * @return void
- * @access private
- */
- function _elgg_cron_monitor($hook, $period, $output, $params) {
- $time = $params['time'];
- $periods = elgg_get_config('elgg_cron_periods');
- if (in_array($period, $periods)) {
- $key = "cron_latest:$period:ts";
- elgg_get_site_entity()->setPrivateSetting($key, $time);
- }
- }
- return function(\Elgg\EventsService $events, \Elgg\HooksRegistrationService $hooks) {
- $events->registerHandler('init', 'system', '_elgg_cron_init');
- };
|