function digest_rebase_stats($timestamp) { $dotw = date("w", $timestamp); // Day of the Week (0 (sunday) - 6 (saturday)) $dotm = date("j", $timestamp); // Day of the Month (1 - 31) $odd_week = date("W", $timestamp) & 1; // Odd weeknumber or not $dotfn = $dotw; // Day of the Fortnight (0 (sunday 1st week) - 6 (saturday 1st week)) if (!$odd_week) { $dotfn += 7; // in even weeks + 7 days (7 (sunday 2nd week) - 13 (saturday 2nd week)) } // reset site stats if (digest_site_enabled()) { if ($site_stats = elgg_get_plugin_setting("site_statistics", "digest")) { $site_stats = json_decode($site_stats, true); $site_stats["general"] = array(); $site_stats[DIGEST_INTERVAL_DAILY] = array(); // reset weekly stats foreach ($site_stats[DIGEST_INTERVAL_WEEKLY] as $key => $values) { if (stristr($key, "day_" . $dotw . "_")) { unset($site_stats[DIGEST_INTERVAL_WEEKLY][$key]); } } // reset weekly stats foreach ($site_stats[DIGEST_INTERVAL_FORTNIGHTLY] as $key => $values) { if (stristr($key, "day_" . $dotfn . "_")) { unset($site_stats[DIGEST_INTERVAL_FORTNIGHTLY][$key]); } } // reset weekly stats foreach ($site_stats[DIGEST_INTERVAL_MONTHLY] as $key => $values) { if (stristr($key, "day_" . $dotm . "_")) { unset($site_stats[DIGEST_INTERVAL_MONTHLY][$key]); } } // save the new stats elgg_set_plugin_setting("site_statistics", json_encode($site_stats), "digest"); } } // reset group stats if (digest_group_enabled()) { if ($group_stats = elgg_get_plugin_setting("group_statistics", "digest")) { $group_stats = json_decode($group_stats, true); $group_stats["general"] = array(); $group_stats[DIGEST_INTERVAL_DAILY] = array(); // reset weekly stats foreach ($group_stats[DIGEST_INTERVAL_WEEKLY] as $key => $values) { if (stristr($key, "day_" . $dotw . "_")) { unset($group_stats[DIGEST_INTERVAL_WEEKLY][$key]); } } // reset weekly stats foreach ($group_stats[DIGEST_INTERVAL_FORTNIGHTLY] as $key => $values) { if (stristr($key, "day_" . $dotfn . "_")) { unset($group_stats[DIGEST_INTERVAL_FORTNIGHTLY][$key]); } } // reset weekly stats foreach ($group_stats[DIGEST_INTERVAL_MONTHLY] as $key => $values) { if (stristr($key, "day_" . $dotm . "_")) { unset($group_stats[DIGEST_INTERVAL_MONTHLY][$key]); } } // save the new stats elgg_set_plugin_setting("group_statistics", json_encode($group_stats), "digest"); } } }
/** * 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); } } }
<?php // is group digest enabled if (digest_group_enabled()) { // check the group $group = elgg_extract("entity", $vars); if (!empty($group) && elgg_instanceof($group, "group", null, "ElggGroup")) { // is this group limited by some other plugin if (elgg_trigger_plugin_hook("digest", "group", array("group" => $group), true)) { $group_interval = $group->digest_interval; if (empty($group_interval)) { $group_interval = digest_get_default_group_interval(); } $interval_options = array(DIGEST_INTERVAL_NONE => elgg_echo("digest:interval:none"), DIGEST_INTERVAL_DAILY => elgg_echo("digest:interval:daily"), DIGEST_INTERVAL_WEEKLY => elgg_echo("digest:interval:weekly"), DIGEST_INTERVAL_FORTNIGHTLY => elgg_echo("digest:interval:fortnightly"), DIGEST_INTERVAL_MONTHLY => elgg_echo("digest:interval:monthly")); // make form $form_body = "<div>"; $form_body .= elgg_echo("digest:groupsettings:setting"); $form_body .= elgg_view("input/dropdown", array("name" => "digest_interval", "options_values" => $interval_options, "value" => $group_interval, "class" => "mlm")); $form_body .= "</div>"; $form_body .= "<div class='elgg-foot'>"; $form_body .= elgg_view("input/hidden", array("name" => "group_guid", "value" => $group->getGUID())); $form_body .= elgg_view("input/submit", array("value" => elgg_echo("save"))); $form_body .= "</div>"; $form = elgg_view("input/form", array("body" => $form_body, "action" => "action/digest/update/groupsettings")); echo elgg_view_module("info", elgg_echo("digest:groupsettings:title") . "<span class='elgg-icon elgg-icon-info mlm digest-settings-title-info' title='" . elgg_echo("digest:groupsettings:description") . "'></span>", $form); } } }
/** * Adds a link to the digest settings for the groups * * @param string $hook 'register' * @param string $type 'menu:groups:my_status' * @param ElggMenuItem[] $return_value the current menu items * @param array $params supplied params * * @return ElggMenuItem[] */ function digest_menu_groups_my_status_hook($hook, $type, $return_value, $params) { if (!digest_group_enabled()) { return $return_value; } $user = elgg_get_logged_in_user_entity(); $group = elgg_get_page_owner_entity(); if (empty($user) || !empty($group)) { return $return_value; } if (!elgg_instanceof($group, "group") || !$group->isMember($user)) { return $return_value; } $return_value[] = ElggMenuItem::factory(array("name" => "digest", "text" => elgg_echo("digest:usersettings:groups:title"), "href" => "digest/user/" . $user->username, "is_trusted" => true)); return $return_value; }