95 lines
2.8 KiB
PHP
95 lines
2.8 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace dokuwiki\Cache;
|
||
|
|
||
|
/**
|
||
|
* Caching of data of renderer
|
||
|
*/
|
||
|
class CacheRenderer extends CacheParser
|
||
|
{
|
||
|
|
||
|
/**
|
||
|
* method contains cache use decision logic
|
||
|
*
|
||
|
* @return bool see useCache()
|
||
|
*/
|
||
|
public function makeDefaultCacheDecision()
|
||
|
{
|
||
|
global $conf;
|
||
|
|
||
|
if (!parent::makeDefaultCacheDecision()) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
if (!isset($this->page)) {
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
// meta cache older than file it depends on?
|
||
|
if ($this->_time < @filemtime(metaFN($this->page, '.meta'))) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
// check current link existence is consistent with cache version
|
||
|
// first check the purgefile
|
||
|
// - if the cache is more recent than the purgefile we know no links can have been updated
|
||
|
if ($this->_time >= @filemtime($conf['cachedir'] . '/purgefile')) {
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
// for wiki pages, check metadata dependencies
|
||
|
$metadata = p_get_metadata($this->page);
|
||
|
|
||
|
if (!isset($metadata['relation']['references']) ||
|
||
|
empty($metadata['relation']['references'])) {
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
foreach ($metadata['relation']['references'] as $id => $exists) {
|
||
|
if ($exists != page_exists($id, '', false)) {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
protected function addDependencies()
|
||
|
{
|
||
|
global $conf;
|
||
|
|
||
|
// default renderer cache file 'age' is dependent on 'cachetime' setting, two special values:
|
||
|
// -1 : do not cache (should not be overridden)
|
||
|
// 0 : cache never expires (can be overridden) - no need to set depends['age']
|
||
|
if ($conf['cachetime'] == -1) {
|
||
|
$this->_nocache = true;
|
||
|
return;
|
||
|
} elseif ($conf['cachetime'] > 0) {
|
||
|
$this->depends['age'] = isset($this->depends['age']) ?
|
||
|
min($this->depends['age'], $conf['cachetime']) : $conf['cachetime'];
|
||
|
}
|
||
|
|
||
|
// renderer cache file dependencies ...
|
||
|
$files = array(
|
||
|
DOKU_INC . 'inc/parser/' . $this->mode . '.php', // ... the renderer
|
||
|
);
|
||
|
|
||
|
// page implies metadata and possibly some other dependencies
|
||
|
if (isset($this->page)) {
|
||
|
|
||
|
// for xhtml this will render the metadata if needed
|
||
|
$valid = p_get_metadata($this->page, 'date valid');
|
||
|
if (!empty($valid['age'])) {
|
||
|
$this->depends['age'] = isset($this->depends['age']) ?
|
||
|
min($this->depends['age'], $valid['age']) : $valid['age'];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$this->depends['files'] = !empty($this->depends['files']) ?
|
||
|
array_merge($files, $this->depends['files']) :
|
||
|
$files;
|
||
|
|
||
|
parent::addDependencies();
|
||
|
}
|
||
|
}
|