Completed
Push — refactorCachePSR2 ( 42c00b...43ff10 )
by Michael
03:15
created

CacheRenderer   A

Complexity

Total Complexity 17

Size/Duplication

Total Lines 87
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Importance

Changes 0
Metric Value
dl 0
loc 87
rs 10
c 0
b 0
f 0
wmc 17
lcom 1
cbo 1

2 Methods

Rating   Name   Duplication   Size   Complexity  
B addDependencies() 0 37 8
B makeDefaultCacheDecision() 0 40 9
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 makeDefaultCacheDecision()
17
    {
18
        global $conf;
19
20
        if (!parent::makeDefaultCacheDecision()) {
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