PITS /
01177: Add a mechanism to disable internal $acache
Summary: Add a mechanism to disable internal $acache
Created: 2010-03-08 18:21
Status: Open
Category: CoreCandidate
From: DaveG
Assigned:
Priority: 4
Version: 2.2.8
OS:
Description: Provide a mechanism to turn internal $acache off.
Problem
There are instances where users or recipes make early calls which populate internal caching mechanisms (like the $acache). Subsequent calls which would normally populate additional data do not alter the content of the cache, and cause problems for users and recipes.
The suggestion is for functions which cache operations to accept a parameter disabling the caching operation for that call, or to use a global flag to turn caching on and off.
Suggestion 1
The following code snippet by Peter Bowers provides a flag EnableAuthCache which turns the $achache off. Code has been tested by DaveG and appears to work, but additional investigation is needed to ensure no further reaching effects.
function PmWikiAuth($pagename, $level, $authprompt=true, $since=0) {
global $DefaultPasswords, $GroupAttributesFmt, $AllowPassword,
$AuthCascade, $FmtV, $AuthPromptFmt, $PageStartFmt, $PageEndFmt,
$AuthId, $AuthList, $NoHTMLCache;
// START changes
global $EnableAuthCache; // included in the line above - put here for clarity
static $bcache; // probably ought to be a more sensible name :-)
#static $acache;
SDV($EnableAuthCache, true);
if ($EnableAuthCache) $acache = &$bcache;
else $acache = $bcache;
// END changes
SDV($GroupAttributesFmt,'$Group/GroupAttributes');
and:
if (!$authprompt) return false;
$GLOBALS['AuthNeeded'] = (@$_POST['authpw'])
? $page['=pwsource'][$level] . ' ' . $level : '';
// START changes
if ($EnableAuthCache)
PCache($pagename, $page);
// END changes
$postvars = '';
foreach($_POST as $k=>$v) {
if ($k == 'authpw' || $k == 'authid') continue;