/** * when a default site interval is set, the user must tell us wether he/shw wants te receive a digest * * @param string $hook * @param string $type * @param bool $return_value * @param array $params */ function digest_register_user_hook($hook, $type, $return_value, $params) { if (!empty($params) && is_array($params)) { $user = elgg_extract("user", $params); if (!empty($user) && elgg_instanceof($user, "user", null, "ElggUser")) { if (($site_interval = digest_get_default_site_interval()) && $site_interval != DIGEST_INTERVAL_NONE) { // show hidden users (maybe disabled by uservalidationbyemail) $show_hidden = access_get_show_hidden_status(); access_show_hidden_entities(true); if (get_input("digest_site") == "yes") { $user->setPrivateSetting("digest_" . elgg_get_config("site_guid"), $site_interval); } else { $user->setPrivateSetting("digest_" . elgg_get_config("site_guid"), DIGEST_INTERVAL_NONE); } access_show_hidden_entities($show_hidden); } } } }
<?php if (($setting = digest_get_default_site_interval()) && $setting != DIGEST_INTERVAL_NONE) { ?> <br /> <input type="checkbox" name="digest_site" class="elgg-input-checkbox" value="yes" /> <?php echo elgg_echo("digest:register:enable"); }
function digest_process($settings) { global $DB_QUERY_CACHE; global $ENTITY_CACHE; global $interval_ts_upper; $interval_ts_upper = (int) elgg_extract("timestamp", $settings, time()); $fork_id = (int) elgg_extract("fork_id", $settings, 0); // should new users be included $never_logged_in = false; if (elgg_get_plugin_setting("include_never_logged_in", "digest") == "yes") { $never_logged_in = true; } // backup some cache $entity_cache_backup = $ENTITY_CACHE; // should the site digest be sent if (digest_site_enabled()) { // prepare stats logging $site_stats = digest_prepare_site_statistics(); // log some beginning stats $site_stats["general"]["mts_start_digest"] = microtime(true); $site_stats["general"]["ts_start_cron"] = $interval_ts_upper; $site_stats["general"]["peak_memory_start"] = memory_get_peak_usage(false); $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" => $never_logged_in, "offset" => (int) elgg_extract("site_offset", $settings, 0), "limit" => (int) elgg_extract("site_limit", $settings, 0)); // find users if ($users = digest_get_site_users($site_intervals)) { // log selection time $site_stats["general"]["mts_user_selection_done"] = microtime(true); // use a fair memory footprint if ($DB_QUERY_CACHE) { $DB_QUERY_CACHE->clear(); } $stats_last_memory = memory_get_usage(false); // process users foreach ($users as $user_setting) { // stat logging $site_stats[$user_setting["user_interval"]]["users"]++; $site_stats["general"]["users"]++; // sent site digest for this user $user = get_user($user_setting["guid"]); // log start time $stats_mts_before = microtime(true); // sent out the digest if (digest_site($user, $user_setting["user_interval"]) === true) { // mail was sent $site_stats[$user_setting["user_interval"]]["mails"]++; $site_stats["general"]["mails"]++; } // stats logging $site_stats[$user_setting["user_interval"]]["total_time"] += microtime(true) - $stats_mts_before; // reset cache $GLOBALS["ENTITY_CACHE"] = $entity_cache_backup; if ($DB_QUERY_CACHE) { $DB_QUERY_CACHE->clear(); } unset($user); // stats logging of memory leak $stats_current_memory = memory_get_usage(false); $site_stats[$user_setting["user_interval"]]["total_memory"] += $stats_current_memory - $stats_last_memory; $stats_last_memory = $stats_current_memory; } } // cleanup some stuff unset($users); unset($site_intervals); // log some end stats $site_stats["general"]["mts_end_digest"] = microtime(true); $site_stats["general"]["peak_memory_end"] = memory_get_peak_usage(false); // save stats logging digest_save_site_statistics($site_stats, $interval_ts_upper, $fork_id); unset($site_stats); } // should the group digest be sent if (digest_group_enabled()) { // prepare stats logging $group_stats = digest_prepare_group_statistics(); // log some beginning stats $group_stats["general"]["mts_start_digest"] = microtime(true); $group_stats["general"]["ts_start_cron"] = $interval_ts_upper; $group_stats["general"]["peak_memory_start"] = memory_get_peak_usage(false); // prepare group options $options = array("type" => "group", "limit" => false, "callback" => "digest_row_to_guid"); if ($limit = (int) elgg_extract("group_limit", $settings, 0)) { $options["limit"] = $limit; $options["offset"] = (int) elgg_extract("group_offset", $settings, 0); } $group_intervals = array(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)); // ignore access to get all groups $ia = elgg_set_ignore_access(true); if ($group_guids = elgg_get_entities($options)) { // log selection time $group_stats["general"]["mts_group_selection_done"] = microtime(true); // use a fair memory footprint if ($DB_QUERY_CACHE) { $DB_QUERY_CACHE->clear(); } $stats_last_group_memory = memory_get_usage(false); foreach ($group_guids as $group_guid) { // stats logging $group_stats["general"]["groups"]++; // make sure we can get the group elgg_set_ignore_access(true); // get group $group = get_entity($group_guid); // get group default interval $group_interval = $group->digest_interval; if (empty($group_interval)) { // group has no interval, so fallback to site default $group_interval = digest_get_default_group_interval(); } $group_intervals[DIGEST_INTERVAL_DEFAULT] = $group_interval; // restore access elgg_set_ignore_access($ia); $stats_begin_user_selection = microtime(true); if ($users = digest_get_group_users($group_guid, $group_intervals, $never_logged_in)) { // stats loggin $group_stats["general"]["total_time_user_selection"] += microtime(true) - $stats_begin_user_selection; // use a fair memory footprint if ($DB_QUERY_CACHE) { $DB_QUERY_CACHE->clear(); } $stats_last_memory = memory_get_usage(false); // process users foreach ($users as $user_setting) { // stat logging $group_stats[$user_setting["user_interval"]]["users"]++; if (!in_array($group_guid, $group_stats[$user_setting["user_interval"]]["groups"])) { $group_stats[$user_setting["user_interval"]]["groups"][] = $group_guid; } $group_stats["general"]["users"]++; // get the user $user = get_user($user_setting["guid"]); // log start time $stats_mts_before = microtime(true); // sent digest if (digest_group($group, $user, $user_setting["user_interval"]) === true) { // mail was sent $group_stats[$user_setting["user_interval"]]["mails"]++; $group_stats["general"]["mails"]++; } // stats logging $group_stats[$user_setting["user_interval"]]["total_time"] += microtime(true) - $stats_mts_before; // reset cache $GLOBALS["ENTITY_CACHE"] = $entity_cache_backup; if ($DB_QUERY_CACHE) { $DB_QUERY_CACHE->clear(); } unset($user); // stats logging of memory leak $stats_current_memory = memory_get_usage(false); $group_stats[$user_setting["user_interval"]]["total_memory"] += $stats_current_memory - $stats_last_memory; $stats_last_memory = $stats_current_memory; } } else { // stats logging $group_stats["general"]["total_time_user_selection"] += microtime(true) - $stats_begin_user_selection; } // reset cache $GLOBALS["ENTITY_CACHE"] = $entity_cache_backup; if ($DB_QUERY_CACHE) { $DB_QUERY_CACHE->clear(); } unset($group); // stats logging of memory leak $stats_current_group_memory = memory_get_usage(false); $group_stats["general"]["total_memory"] += $stats_current_group_memory - $stats_last_group_memory; $stats_last_group_memory = $stats_current_group_memory; } } // restore access settings elgg_set_ignore_access($ia); // log some end stats $group_stats["general"]["mts_end_digest"] = microtime(true); $group_stats["general"]["peak_memory_end"] = memory_get_peak_usage(false); // save stats logging digest_save_group_statistics($group_stats, $interval_ts_upper, $fork_id); } }
<?php if (!digest_site_enabled()) { return; } $user = elgg_extract("user", $vars); $site_guid = elgg_get_site_entity()->getGUID(); $site_interval = $user->getPrivateSetting("digest_" . $site_guid); if (empty($site_interval)) { $site_interval = digest_get_default_site_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 $body = "<div>"; $body .= elgg_echo("digest:usersettings:site:setting"); $body .= elgg_view("input/dropdown", array("name" => "digest[" . $site_guid . "]", "options_values" => $interval_options, "value" => $site_interval, "class" => "mlm")); $body .= "</div>"; $title = elgg_echo("digest:usersettings:site:title"); $title .= "<span title='" . elgg_echo("digest:usersettings:site:description") . "'>"; $title .= elgg_view_icon("info", "digest-settings-title-info mlm"); $title .= "</span>"; echo elgg_view_module("info", $title, $body);
if (digest_site_enabled()) { $site_stats = elgg_get_plugin_setting("site_statistics", "digest"); if (!empty($site_stats)) { $site_stats = digest_compress_statistics(json_decode($site_stats, true)); $general = elgg_extract("general", $site_stats); if (!empty($general) && is_array($general)) { if ($general["ts_start_cron"]) { // site digest has run at least once $gen_table = "<table class='elgg-table mbl'>"; $gen_table .= "<tr>"; $gen_table .= "<td>" . elgg_echo("digest:admin:stats:general:server_name") . "</td>"; $gen_table .= "<td>" . elgg_extract("server_name", $general, " ") . "</td>"; $gen_table .= "</tr>"; $gen_table .= "<tr>"; $gen_table .= "<td>" . elgg_echo("digest:settings:interval:site_default") . "</td>"; $gen_table .= "<td>" . elgg_echo("digest:interval:" . digest_get_default_site_interval()) . "</td>"; $gen_table .= "</tr>"; $gen_table .= "<tr>"; $gen_table .= "<td>" . elgg_echo("digest:admin:stats:general:ts_start_cron") . "</td>"; $gen_table .= "<td>" . elgg_view_friendly_time(elgg_extract("ts_start_cron", $general, 0)) . " (" . htmlspecialchars(date(elgg_echo("friendlytime:date_format"), elgg_extract("ts_start_cron", $general, 0))) . ") </td>"; $gen_table .= "</tr>"; $gen_table .= "<tr>"; $gen_table .= "<td>" . elgg_echo("digest:admin:stats:general:mts_start_digest") . "</td>"; $gen_table .= "<td>" . digest_readable_time(elgg_extract("mts_start_digest", $general, 0) - elgg_extract("ts_start_cron", $general, 0)) . "</td>"; $gen_table .= "</tr>"; $gen_table .= "<tr>"; $gen_table .= "<td>" . elgg_echo("digest:admin:stats:site:general:mts_user_selection_done") . "</td>"; $gen_table .= "<td>" . digest_readable_time(elgg_extract("mts_user_selection_done", $general, 0) - elgg_extract("mts_start_digest", $general, 0)) . "</td>"; $gen_table .= "</tr>"; $gen_table .= "<tr>"; $gen_table .= "<td>" . elgg_echo("digest:admin:stats:general:mts_end_digest") . "</td>";
<?php $setting = digest_get_default_site_interval(); if (!empty($setting) && $setting != DIGEST_INTERVAL_NONE) { echo "<div>"; echo elgg_view("input/checkbox", array("name" => "digest_site", "value" => "yes", "default" => false, "id" => "digest-register")); echo "<label for='digest-register'>" . elgg_echo("digest:register:enable") . "</label>"; echo "</div>"; }