case "site_limit": case "group_offset": case "group_limit": case "timestamp": case "fork_id": $value = (int) $value; if ($value > 0) { ${$key} = $value; } break; default: ${$key} = $value; break; } } } if (!empty($secret) && (!empty($site_limit) || !empty($group_limit))) { ini_set("memory_limit", $memory_limit); require_once dirname(dirname(dirname(dirname(__FILE__)))) . "/engine/start.php"; if (digest_validate_commandline_secret($secret)) { $params = array("site_offset" => $site_offset, "site_limit" => $site_limit, "group_offset" => $group_offset, "group_limit" => $group_limit, "timestamp" => $timestamp, "fork_id" => $fork_id); digest_process($params); } else { echo elgg_echo("digest:cli:error:secret"); } } else { echo "Wrong input to run this script, please provide a site_limit or group_limit and secret."; } } else { echo "This script can only be run from the commandline"; }
/** * Lets figure out what we need to do * * @param string $hook * @param string $entity_type * @param bool $returnvalue * @param array $params */ function digest_cron_handler($hook, $entity_type, $returnvalue, $params) { global $interval_ts_upper; if (!empty($params) && is_array($params)) { $interval_ts_upper = (int) elgg_extract("time", $params, time()); // prepare some settings $digest_settings = array("timestamp" => $interval_ts_upper, "fork_id" => 0); // rebase the stats digest_rebase_stats($interval_ts_upper); // is multicore support enabled if (($cores = (int) elgg_get_plugin_setting("multi_core", "digest")) && $cores > 1) { // add some settings for the commandline $digest_settings["memory_limit"] = ini_get("memory_limit"); $digest_settings["host"] = $_SERVER["HTTP_HOST"]; $digest_settings["secret"] = digest_generate_commandline_secret(); if (isset($_SERVER["HTTPS"])) { $digest_settings["https"] = $_SERVER["HTTPS"]; } // shoul we include users who have never logged in $include_never_logged_in = false; if (elgg_get_plugin_setting("include_never_logged_in", "digest") == "yes") { $include_never_logged_in = true; } // multi core is enabled now try to find out how many users/groups to send per core $site_users_count = 0; $site_users_interval = 0; $group_count = 0; $group_interval = 0; // site digest settings if (digest_site_enabled()) { $site_intervals = array(DIGEST_INTERVAL_DEFAULT => digest_get_default_site_interval(), DIGEST_INTERVAL_WEEKLY => digest_get_default_distribution(DIGEST_INTERVAL_WEEKLY), DIGEST_INTERVAL_FORTNIGHTLY => digest_get_default_distribution(DIGEST_INTERVAL_FORTNIGHTLY), DIGEST_INTERVAL_MONTHLY => digest_get_default_distribution(DIGEST_INTERVAL_MONTHLY), "include_never_logged_in" => $include_never_logged_in); $site_users = digest_get_site_users($site_intervals); $site_users_count = count($site_users); $site_users_interval = (int) ceil($site_users_count / $cores); } // group digest settings if (digest_group_enabled()) { $group_options = array("type" => "group", "count" => true); $group_count = elgg_get_entities($group_options); $group_interval = (int) ceil($group_count / $cores); } // start processes $site_offset = 0; $group_offset = 0; for ($i = 0; $i < $cores; $i++) { $digest_settings["fork_id"] = $i; if ($site_users_count > 0) { $digest_settings["site_offset"] = $site_users_interval * $i; $digest_settings["site_limit"] = $site_users_interval; } if ($group_count > 0) { $digest_settings["group_offset"] = $group_interval * $i; $digest_settings["group_limit"] = $group_interval; } digest_start_commandline($digest_settings); } } else { // procces the digest digest_process($digest_settings); } } }