예제 #1
0
/**
 * 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);
        }
    }
}
예제 #2
0
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");
        }
    }
}
예제 #3
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);