示例#1
0
/**
 * 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);
            }
        }
    }
}
示例#2
0
<?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");
}
示例#3
0
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);
    }
}
示例#4
0
文件: site.php 项目: coldtrick/digest
<?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);
示例#5
0
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, "&nbsp;") . "</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>";
示例#6
0
<?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>";
}