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:
martinlanghoff 2007-03-19 06:33:45 +00:00
parent 8cf990bcfe
commit 9aa9080756
4 changed files with 47 additions and 12 deletions

View File

@ -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)) {

View File

@ -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)) {

View File

@ -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.

View File

@ -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)) {