Exemple #1
0
    if (strtotime('-' . $i . ' weeks', $now) >= $minlog) {
        $timeoptions[strtotime('-' . $i . ' weeks', $now)] = get_string('numweeks', 'moodle', $i);
    }
}
// months
for ($i = 2; $i < 12; $i++) {
    if (strtotime('-' . $i . ' months', $now) >= $minlog) {
        $timeoptions[strtotime('-' . $i . ' months', $now)] = get_string('nummonths', 'moodle', $i);
    }
}
// try a year
if (strtotime('-1 year', $now) >= $minlog) {
    $timeoptions[strtotime('-1 year', $now)] = get_string('lastyear');
}
$useroptions = array();
if ($roles = get_roles_on_exact_context(get_context_instance(CONTEXT_COURSE, $course->id))) {
    foreach ($roles as $r) {
        $useroptions[$r->id] = $r->name;
    }
}
$guestrole = get_guest_role();
if (empty($useroptions[$guestrole->id])) {
    $useroptions[$guestrole->id] = $guestrole->name;
}
$actionoptions = array('' => $strallactions, 'view' => $strview, 'post' => $strpost);
// print first controls.
echo '<form class="participationselectform" action="index.php" method="get"><div>' . "\n" . '<input type="hidden" name="id" value="' . $course->id . '" />' . "\n" . '<input type="hidden" name="oldmod" value="' . $moduleid . '" />' . "\n" . '<input type="hidden" name="instanceid" value="' . $instanceid . '" />' . "\n";
echo '<label for="menumoduleid">' . get_string('activitymodule') . '</label>' . "\n";
choose_from_menu($modoptions, 'moduleid', $moduleid);
echo '<label for="menutimefrom">' . get_string('lookback') . '</label>' . "\n";
choose_from_menu($timeoptions, 'timefrom', $timefrom);
function backup_fetch_roles($preferences)
{
    global $CFG;
    $contexts = array();
    $roles = array();
    /// adding course context
    $coursecontext = get_context_instance(CONTEXT_COURSE, $preferences->backup_course);
    $contexts[$coursecontext->id] = $coursecontext;
    /// adding mod contexts
    $mods = $preferences->mods;
    foreach ($mods as $modname => $mod) {
        $instances = $mod->instances;
        foreach ($instances as $id => $instance) {
            // if this type of mod is to be backed up
            if ($instance->backup) {
                $cm = get_coursemodule_from_instance($modname, $id);
                $context = get_context_instance(CONTEXT_MODULE, $cm->id);
                // put context in array keys
                $contexts[$context->id] = $context;
            }
        }
    }
    // add all roles assigned at user context
    if ($preferences->backup_users) {
        if ($users = get_records_sql("SELECT u.old_id, u.table_name,u.info\n                                            FROM {$CFG->prefix}backup_ids u\n                                            WHERE u.backup_code = '{$preferences->backup_unique_code}' AND\n                                            u.table_name = 'user'")) {
            foreach ($users as $user) {
                $context = get_context_instance(CONTEXT_USER, $user->old_id);
                $contexts[$context->id] = $context;
            }
        }
    }
    // add all roles assigned at block context
    if ($courseblocks = get_records_sql("SELECT *\n                                             FROM {$CFG->prefix}block_instance\n                                             WHERE pagetype = '" . PAGE_COURSE_VIEW . "'\n                                                   AND pageid = {$preferences->backup_course}")) {
        foreach ($courseblocks as $courseblock) {
            $context = get_context_instance(CONTEXT_BLOCK, $courseblock->id);
            $contexts[$context->id] = $context;
        }
    }
    // foreach context, call get_roles_on_exact_context + get_roles_with_override_on_context() and insert into array
    foreach ($contexts as $context) {
        if ($proles = get_roles_on_exact_context($context)) {
            // Look for roles assignments
            foreach ($proles as $prole) {
                $roles[$prole->id] = $prole;
            }
        }
        if ($proles = get_roles_with_override_on_context($context)) {
            // Look for roles overrides
            foreach ($proles as $prole) {
                $roles[$prole->id] = $prole;
            }
        }
    }
    return $roles;
}
function stats_cron_daily()
{
    global $CFG;
    if (empty($CFG->enablestats)) {
        return STATS_RUN_ABORTED;
    }
    if (!($timestart = stats_get_start_from('daily'))) {
        return STATS_RUN_ABORTED;
    }
    $midnight = stats_getmidnight(time());
    // check to make sure we're due to run, at least one day after last run
    if (isset($CFG->statslastdaily) and time() - 24 * 60 * 60 < $CFG->statslastdaily) {
        return STATS_RUN_ABORTED;
    }
    mtrace("Running daily statistics gathering...");
    set_config('statslastdaily', time());
    $return = STATS_RUN_COMPLETE;
    // optimistic
    static $daily_modules;
    if (empty($daily_modules)) {
        $daily_modules = array();
        $mods = get_records("modules");
        foreach ($mods as $mod) {
            $file = $CFG->dirroot . '/mod/' . $mod->name . '/lib.php';
            if (!is_readable($file)) {
                continue;
            }
            require_once $file;
            $fname = $mod->name . '_get_daily_stats';
            if (function_exists($fname)) {
                $daily_modules[$mod] = $fname;
            }
        }
    }
    $nextmidnight = stats_get_next_dayend($timestart);
    if (!($courses = get_records('course', '', '', '', 'id,1'))) {
        return STATS_RUN_ABORTED;
    }
    $days = 0;
    mtrace("starting at {$timestart}");
    while ($midnight > $nextmidnight && $timestart < $nextmidnight) {
        $timesql = " (l.time > {$timestart} AND l.time < {$nextmidnight}) ";
        begin_sql();
        foreach ($courses as $course) {
            //do this first.
            if ($course->id == SITEID) {
                $stat = new StdClass();
                $stat->courseid = $course->id;
                $stat->timeend = $nextmidnight;
                $stat->roleid = 0;
                // all users
                $stat->stattype = 'logins';
                $sql = 'SELECT count(l.id) FROM ' . $CFG->prefix . 'log l WHERE l.action = \'login\' AND ' . $timesql;
                $stat->stat1 = count_records_sql($sql);
                $sql = 'SELECT COUNT(DISTINCT(l.userid)) FROM ' . $CFG->prefix . 'log l WHERE l.action = \'login\' AND ' . $timesql;
                $stat->stat2 = count_records_sql($sql);
                insert_record('stats_daily', $stat, false);
                // don't worry about the return id, we don't need it.
                // and now user logins...
                $sql = 'SELECT l.userid,count(l.id) as count FROM ' . $CFG->prefix . 'log l WHERE action = \'login\' AND ' . $timesql . ' GROUP BY userid';
                if ($logins = get_records_sql($sql)) {
                    foreach ($logins as $l) {
                        $stat->statsreads = $l->count;
                        $stat->userid = $l->userid;
                        $stat->timeend = $nextmidnight;
                        $stat->courseid = SITEID;
                        $stat->statswrites = 0;
                        $stat->stattype = 'logins';
                        $stat->roleid = 0;
                        insert_record('stats_user_daily', $stat, false);
                    }
                }
            }
            $context = get_context_instance(CONTEXT_COURSE, $course->id);
            if (!($roles = get_roles_on_exact_context($context))) {
                // no roles.. nothing to log.
                continue;
            }
            $primary_roles = sql_primary_role_subselect();
            // In dmllib.php
            foreach ($roles as $role) {
                // ENROLMENT FIRST....
                // ALL users with this role...
                $stat = new StdClass();
                $stat->courseid = $course->id;
                $stat->roleid = $role->id;
                $stat->timeend = $nextmidnight;
                $stat->stattype = 'enrolments';
                $sql = 'SELECT COUNT(DISTINCT prs.userid) FROM (' . $primary_roles . ') prs WHERE prs.primary_roleid=' . $role->id . ' AND prs.courseid=' . $course->id . ' AND prs.contextlevel = ' . CONTEXT_COURSE;
                $stat->stat1 = count_records_sql($sql);
                $sql = 'SELECT COUNT(DISTINCT prs.userid) FROM (' . $primary_roles . ') prs 
                        INNER JOIN ' . $CFG->prefix . 'log l ON (prs.userid=l.userid AND l.course=prs.courseid) 
                        WHERE prs.primary_roleid=' . $role->id . ' AND prs.courseid=' . $course->id . ' 
                        AND prs.contextlevel = ' . CONTEXT_COURSE . ' AND ' . $timesql;
                $stat->stat2 = count_records_sql($sql);
                insert_record('stats_daily', $stat, false);
                // don't worry about the return id, we don't need it.
                // ACTIVITY
                $stat = new StdClass();
                $stat->courseid = $course->id;
                $stat->roleid = $role->id;
                $stat->timeend = $nextmidnight;
                $stat->stattype = 'activity';
                $sql = 'SELECT COUNT(DISTINCT l.id) FROM (' . $primary_roles . ') prs 
                        INNER JOIN ' . $CFG->prefix . 'log l ON (prs.userid=l.userid
                        AND l.course=prs.courseid) WHERE prs.primary_roleid=' . $role->id . ' 
                        AND prs.courseid=' . $course->id . ' AND prs.contextlevel = ' . CONTEXT_COURSE . '
                         AND ' . $timesql . ' ' . stats_get_action_sql_in('view');
                $stat->stat1 = count_records_sql($sql);
                $sql = 'SELECT COUNT(DISTINCT l.id) FROM (' . $primary_roles . ') prs 
                        INNER JOIN ' . $CFG->prefix . 'log l ON (prs.userid=l.userid  AND l.course=prs.courseid) 
                        WHERE prs.primary_roleid=' . $role->id . ' AND prs.courseid=' . $course->id . ' 
                        AND prs.contextlevel = ' . CONTEXT_COURSE . ' AND ' . $timesql . ' ' . stats_get_action_sql_in('post');
                $stat->stat2 = count_records_sql($sql);
                insert_record('stats_daily', $stat, false);
                // don't worry about the return id, we don't need it.
            }
            $users = stats_get_course_users($course, $timesql);
            foreach ($users as $user) {
                stats_do_daily_user_cron($course, $user, $user->primaryrole, $timesql, $nextmidnight, $daily_modules);
            }
        }
        commit_sql();
        $timestart = $nextmidnight;
        $nextmidnight = stats_get_next_dayend($nextmidnight);
        $days++;
        if (!stats_check_runtime()) {
            mtrace("Stopping early! reached maxruntime");
            $return = STATS_RUN_ABORTED;
            break;
        }
    }
    mtrace("got up to " . $timestart);
    mtrace("Completed {$days} days");
    return $return;
}