xref: /dokuwiki/inc/Cache/CacheParser.php (revision 0db5771e6b5f779df34a039ad49d4652eaf21893)
1*0db5771eSMichael Große<?php
2*0db5771eSMichael Große
3*0db5771eSMichael Großenamespace dokuwiki\Cache;
4*0db5771eSMichael Große
5*0db5771eSMichael Große/**
6*0db5771eSMichael Große * Parser caching
7*0db5771eSMichael Große */
8*0db5771eSMichael Großeclass CacheParser extends Cache
9*0db5771eSMichael Große{
10*0db5771eSMichael Große
11*0db5771eSMichael Große    public $file = '';       // source file for cache
12*0db5771eSMichael Große    public $mode = '';       // input mode (represents the processing the input file will undergo)
13*0db5771eSMichael Große    public $page = '';
14*0db5771eSMichael Große
15*0db5771eSMichael Große    public $_event = 'PARSER_CACHE_USE';
16*0db5771eSMichael Große
17*0db5771eSMichael Große    /**
18*0db5771eSMichael Große     *
19*0db5771eSMichael Große     * @param string $id page id
20*0db5771eSMichael Große     * @param string $file source file for cache
21*0db5771eSMichael Große     * @param string $mode input mode
22*0db5771eSMichael Große     */
23*0db5771eSMichael Große    public function __construct($id, $file, $mode)
24*0db5771eSMichael Große    {
25*0db5771eSMichael Große        if ($id) {
26*0db5771eSMichael Große            $this->page = $id;
27*0db5771eSMichael Große        }
28*0db5771eSMichael Große        $this->file = $file;
29*0db5771eSMichael Große        $this->mode = $mode;
30*0db5771eSMichael Große
31*0db5771eSMichael Große        parent::__construct($file . $_SERVER['HTTP_HOST'] . $_SERVER['SERVER_PORT'], '.' . $mode);
32*0db5771eSMichael Große    }
33*0db5771eSMichael Große
34*0db5771eSMichael Große    /**
35*0db5771eSMichael Große     * method contains cache use decision logic
36*0db5771eSMichael Große     *
37*0db5771eSMichael Große     * @return bool               see useCache()
38*0db5771eSMichael Große     */
39*0db5771eSMichael Große    public function _useCache()
40*0db5771eSMichael Große    {
41*0db5771eSMichael Große
42*0db5771eSMichael Große        if (!file_exists($this->file)) {
43*0db5771eSMichael Große            return false;
44*0db5771eSMichael Große        }                   // source exists?
45*0db5771eSMichael Große        return parent::_useCache();
46*0db5771eSMichael Große    }
47*0db5771eSMichael Große
48*0db5771eSMichael Große    protected function _addDependencies()
49*0db5771eSMichael Große    {
50*0db5771eSMichael Große
51*0db5771eSMichael Große        // parser cache file dependencies ...
52*0db5771eSMichael Große        $files = array(
53*0db5771eSMichael Große            $this->file,                              // ... source
54*0db5771eSMichael Große            DOKU_INC . 'inc/parser/Parser.php',                // ... parser
55*0db5771eSMichael Große            DOKU_INC . 'inc/parser/handler.php',               // ... handler
56*0db5771eSMichael Große        );
57*0db5771eSMichael Große        $files = array_merge($files, getConfigFiles('main'));    // ... wiki settings
58*0db5771eSMichael Große
59*0db5771eSMichael Große        $this->depends['files'] = !empty($this->depends['files']) ?
60*0db5771eSMichael Große            array_merge($files, $this->depends['files']) :
61*0db5771eSMichael Große            $files;
62*0db5771eSMichael Große        parent::_addDependencies();
63*0db5771eSMichael Große    }
64*0db5771eSMichael Große
65*0db5771eSMichael Große}
66