[ 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      /**
  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  }