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; }