mirror of
https://github.com/moodle/moodle.git
synced 2025-01-18 05:58:34 +01:00
Auto-linking filters: fix serious caching bug in forum mailouts
Autolinking of glossaries, activity, resources and wiki names were using a trivial single-entry cache implemented with static vars. The cache was _not_ keyed on course. This bug was visible during forum_cron() which walks many courses. The cache would get "stuck" on the first course that had something to put in the cache. All mailouts from there onwards would autolink to stuff in the wrong course.
This commit is contained in:
parent
8cf990bcfe
commit
9aa9080756
@ -8,12 +8,20 @@
|
||||
|
||||
global $CFG;
|
||||
|
||||
// Trivial-cache - keyed on $cachedcourseid
|
||||
static $activitylist;
|
||||
static $cachedcourse;
|
||||
|
||||
if (empty($courseid)) {
|
||||
$courseid = SITEID;
|
||||
}
|
||||
|
||||
// Initialise/invalidate our trivial cache if dealing with a different course
|
||||
if (!isset($cachedcourseid) || $cachedcourseid !== (int)$courseid) {
|
||||
$activitylist = array();
|
||||
}
|
||||
$cachedcourseid = (int)$courseid;
|
||||
|
||||
/// It may be cached
|
||||
|
||||
if (empty($activitylist)) {
|
||||
|
@ -3,17 +3,26 @@
|
||||
function glossary_filter($courseid, $text) {
|
||||
global $CFG;
|
||||
|
||||
// Trivial-cache - keyed on $cachedcourseid
|
||||
static $nothingtodo;
|
||||
static $conceptlist;
|
||||
|
||||
if (!empty($nothingtodo)) { // We've been here in this page already
|
||||
return $text;
|
||||
}
|
||||
static $cachedcourseid;
|
||||
|
||||
if (empty($courseid)) {
|
||||
$courseid = SITEID;
|
||||
}
|
||||
|
||||
// Initialise/invalidate our trivial cache if dealing with a different course
|
||||
if (!isset($cachedcourseid) || $cachedcourseid !== (int)$courseid) {
|
||||
$conceptlist = array();
|
||||
$nothingtodo = false;
|
||||
}
|
||||
$cachedcourseid = (int)$courseid;
|
||||
|
||||
if ($nothingtodo === true) {
|
||||
return $text;
|
||||
}
|
||||
|
||||
/// Create a list of all the concepts to search for. It may be cached already.
|
||||
|
||||
if (empty($conceptlist)) {
|
||||
|
@ -7,17 +7,26 @@
|
||||
|
||||
global $CFG;
|
||||
|
||||
// Trivial-cache - keyed on $cachedcourseid
|
||||
static $nothingtodo;
|
||||
static $resourcelist;
|
||||
|
||||
if (!empty($nothingtodo)) { // We've been here in this page already
|
||||
return $text;
|
||||
}
|
||||
static $cachedcourseid;
|
||||
|
||||
// if we don't have a courseid, we can't run the query, so
|
||||
if (empty($courseid)) {
|
||||
return $text;
|
||||
}
|
||||
|
||||
// Initialise/invalidate our trivial cache if dealing with a different course
|
||||
if (!isset($cachedcourseid) || $cachedcourseid !== (int)$courseid) {
|
||||
$resourcelist = array();
|
||||
$nothingtodo = false;
|
||||
}
|
||||
$cachedcourseid = (int)$courseid;
|
||||
|
||||
if ($nothingtodo === true) {
|
||||
return $text;
|
||||
}
|
||||
|
||||
/// Create a list of all the resources to search for. It may be cached already.
|
||||
|
||||
|
@ -10,17 +10,26 @@
|
||||
|
||||
global $CFG;
|
||||
|
||||
// Trivial-cache - keyed on $cachedcourseid
|
||||
static $nothingtodo;
|
||||
static $wikipagelist;
|
||||
|
||||
if (!empty($nothingtodo)) { // We've been here in this page already
|
||||
return $text;
|
||||
}
|
||||
static $cachedcourseid;
|
||||
|
||||
if (empty($courseid)) {
|
||||
$courseid = SITEID;
|
||||
}
|
||||
|
||||
// Initialise/invalidate our trivial cache if dealing with a different course
|
||||
if (!isset($cachedcourseid) || $cachedcourseid !== (int)$courseid) {
|
||||
$wikipagelist = array();
|
||||
$nothingtodo = false;
|
||||
}
|
||||
$cachedcourseid = (int)$courseid;
|
||||
|
||||
if (!empty($nothingtodo)) { // We've been here in this page already
|
||||
return $text;
|
||||
}
|
||||
|
||||
/// Create a list of all the wikis to search for. It may be cached already.
|
||||
|
||||
if (empty($wikipagelist)) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user