Failed Conditions
Push — refactorCachePSR2 ( 0db577 )
by Michael
02:54
created

CacheRenderer::_addDependencies()   B

Complexity

Conditions 8
Paths 25

Size

Total Lines 37

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 8
nc 25
nop 0
dl 0
loc 37
rs 8.0835
c 0
b 0
f 0
1
<?php
2
3
namespace dokuwiki\Cache;
4
5
/**
6
 * Caching of data of renderer
7
 */
8
class CacheRenderer extends CacheParser
9
{
10
11
    /**
12
     * method contains cache use decision logic
13
     *
14
     * @return bool               see useCache()
15
     */
16
    public function _useCache()
17
    {
18
        global $conf;
19
20
        if (!parent::_useCache()) {
21
            return false;
22
        }
23
24
        if (!isset($this->page)) {
25
            return true;
26
        }
27
28
        // meta cache older than file it depends on?
29
        if ($this->_time < @filemtime(metaFN($this->page, '.meta'))) {
30
            return false;
31
        }
32
33
        // check current link existence is consistent with cache version
34
        // first check the purgefile
35
        // - if the cache is more recent than the purgefile we know no links can have been updated
36
        if ($this->_time >= @filemtime($conf['cachedir'] . '/purgefile')) {
37
            return true;
38
        }
39
40
        // for wiki pages, check metadata dependencies
41
        $metadata = p_get_metadata($this->page);
42
43
        if (!isset($metadata['relation']['references']) ||
44
            empty($metadata['relation']['references'])) {
45
            return true;
46
        }
47
48
        foreach ($metadata['relation']['references'] as $id => $exists) {
49
            if ($exists != page_exists($id, '', false)) {
50
                return false;
51
            }
52
        }
53
54
        return true;
55
    }
56
57
    protected function _addDependencies()
58
    {
59
        global $conf;
60
61
        // default renderer cache file 'age' is dependent on 'cachetime' setting, two special values:
62
        //    -1 : do not cache (should not be overridden)
63
        //    0  : cache never expires (can be overridden) - no need to set depends['age']
64
        if ($conf['cachetime'] == -1) {
65
            $this->_nocache = true;
66
            return;
67
        } elseif ($conf['cachetime'] > 0) {
68
            $this->depends['age'] = isset($this->depends['age']) ?
69
                min($this->depends['age'], $conf['cachetime']) : $conf['cachetime'];
70
        }
71
72
        // renderer cache file dependencies ...
73
        $files = array(
74
            DOKU_INC . 'inc/parser/' . $this->mode . '.php',       // ... the renderer
75
        );
76
77
        // page implies metadata and possibly some other dependencies
78
        if (isset($this->page)) {
79
80
            // for xhtml this will render the metadata if needed
81
            $valid = p_get_metadata($this->page, 'date valid');
82
            if (!empty($valid['age'])) {
83
                $this->depends['age'] = isset($this->depends['age']) ?
84
                    min($this->depends['age'], $valid['age']) : $valid['age'];
85
            }
86
        }
87
88
        $this->depends['files'] = !empty($this->depends['files']) ?
89
            array_merge($files, $this->depends['files']) :
90
            $files;
91
92
        parent::_addDependencies();
93
    }
94
}
95