[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/inc/Cache/ -> CacheRenderer.php (source)

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