}
}
- mtrace("Finished blocks");
+ mtrace('Finished blocks');
if (!empty($CFG->langcache)) {
mtrace('Updating languages cache');
get_list_of_languages();
}
+ mtrace('Removing expired enrolments ...', ''); // See MDL-8785
+ $timenow = time();
+ if ($oldenrolments = get_records_select('role_assignments', "timeend > 0 AND timeend < '$timenow'")) {
+ mtrace(count($oldenrolments).' to delete');
+ foreach ($oldenrolments as $oldenrolment) {
+ if (role_unassign($oldenrolment->roleid, $oldenrolment->userid, 0, $oldenrolment->contextid)) {
+ mtrace("Deleted expired role assignment $oldenrolment->roleid for user $oldenrolment->userid from context $oldenrolment->contextid");
+ }
+ }
+ mtrace('Done');
+ } else {
+ mtrace('none found');
+ }
+
/// Run all core cron jobs, but not every time since they aren't too important.
/// These don't have a timer to reduce load, so we'll use a random number
$capsearch ="";
}
-/// Set up SQL fragments for timestart, timeend etc
- $now = time();
- $timesql = "AND ((ra.timestart = 0 OR ra.timestart < $now) AND (ra.timeend = 0 OR ra.timeend > $now))";
-
/// Then we use 1 giant SQL to bring out all relevant capabilities.
/// The first part gets the capabilities of orginal role.
/// The second part gets the capabilities of overriden roles.
$searchcontexts1
rc.contextid=$siteinstance->id
$capsearch
- $timesql
GROUP BY
rc.capability, c1.id, c1.contextlevel * 100
HAVING
$searchcontexts1
rc.contextid != $siteinstance->id
$capsearch
- $timesql
AND cr.c2 = c1.id
GROUP BY
rc.capability, c1.id, c2.id, c1.contextlevel * 100 + c2.contextlevel
$searchcontexts1
rc.contextid != $siteinstance->id
$capsearch
- $timesql
GROUP BY
rc.capability, (c1.contextlevel * 100 + c2.contextlevel), c1.id, c2.id, rc.permission
$newra->userid = $userid;
$newra->hidden = $hidden;
$newra->enrol = $enrol;
- $newra->timestart = $timestart;
+ /// Always round timestart downto 100 secs to help DBs to use their own caching algorithms
+ /// by repeating queries with the same exact parameters in a 100 secs time window
+ $newra->timestart = round($timestart, -2);
$newra->timeend = $timeend;
$newra->timemodified = time();
$newra->modifierid = empty($USER->id) ? 0 : $USER->id;
$newra->id = $ra->id;
$newra->hidden = $hidden;
$newra->enrol = $enrol;
- $newra->timestart = $timestart;
+ /// Always round timestart downto 100 secs to help DBs to use their own caching algorithms
+ /// by repeating queries with the same exact parameters in a 100 secs time window
+ $newra->timestart = round($timestart, -2);
$newra->timeend = $timeend;
$newra->timemodified = time();
$newra->modifierid = empty($USER->id) ? 0 : $USER->id;