Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 4.1.x will end 13 November 2023 (12 months).
  • Bug fixes for security issues in 4.1.x will end 10 November 2025 (36 months).
  • PHP version: minimum PHP 7.4.0 Note: minimum PHP version has increased since Moodle 4.0. PHP 8.0.x is supported too.
   1  <?php
   2  
   3  /**
   4   * Abstract class representing Definition cache managers that implements
   5   * useful common methods and is a factory.
   6   * @todo Create a separate maintenance file advanced users can use to
   7   *       cache their custom HTMLDefinition, which can be loaded
   8   *       via a configuration directive
   9   * @todo Implement memcached
  10   */
  11  abstract class HTMLPurifier_DefinitionCache
  12  {
  13      /**
  14       * @type string
  15       */
  16      public $type;
  17  
  18      /**
  19       * @param string $type Type of definition objects this instance of the
  20       *      cache will handle.
  21       */
  22      public function __construct($type)
  23      {
  24          $this->type = $type;
  25      }
  26  
  27      /**
  28       * Generates a unique identifier for a particular configuration
  29       * @param HTMLPurifier_Config $config Instance of HTMLPurifier_Config
  30       * @return string
  31       */
  32      public function generateKey($config)
  33      {
  34          return $config->version . ',' . // possibly replace with function calls
  35                 $config->getBatchSerial($this->type) . ',' .
  36                 $config->get($this->type . '.DefinitionRev');
  37      }
  38  
  39      /**
  40       * Tests whether or not a key is old with respect to the configuration's
  41       * version and revision number.
  42       * @param string $key Key to test
  43       * @param HTMLPurifier_Config $config Instance of HTMLPurifier_Config to test against
  44       * @return bool
  45       */
  46      public function isOld($key, $config)
  47      {
  48          if (substr_count($key, ',') < 2) {
  49              return true;
  50          }
  51          list($version, $hash, $revision) = explode(',', $key, 3);
  52          $compare = version_compare($version, $config->version);
  53          // version mismatch, is always old
  54          if ($compare != 0) {
  55              return true;
  56          }
  57          // versions match, ids match, check revision number
  58          if ($hash == $config->getBatchSerial($this->type) &&
  59              $revision < $config->get($this->type . '.DefinitionRev')) {
  60              return true;
  61          }
  62          return false;
  63      }
  64  
  65      /**
  66       * Checks if a definition's type jives with the cache's type
  67       * @note Throws an error on failure
  68       * @param HTMLPurifier_Definition $def Definition object to check
  69       * @return bool true if good, false if not
  70       */
  71      public function checkDefType($def)
  72      {
  73          if ($def->type !== $this->type) {
  74              trigger_error("Cannot use definition of type {$def->type} in cache for {$this->type}");
  75              return false;
  76          }
  77          return true;
  78      }
  79  
  80      /**
  81       * Adds a definition object to the cache
  82       * @param HTMLPurifier_Definition $def
  83       * @param HTMLPurifier_Config $config
  84       */
  85      abstract public function add($def, $config);
  86  
  87      /**
  88       * Unconditionally saves a definition object to the cache
  89       * @param HTMLPurifier_Definition $def
  90       * @param HTMLPurifier_Config $config
  91       */
  92      abstract public function set($def, $config);
  93  
  94      /**
  95       * Replace an object in the cache
  96       * @param HTMLPurifier_Definition $def
  97       * @param HTMLPurifier_Config $config
  98       */
  99      abstract public function replace($def, $config);
 100  
 101      /**
 102       * Retrieves a definition object from the cache
 103       * @param HTMLPurifier_Config $config
 104       */
 105      abstract public function get($config);
 106  
 107      /**
 108       * Removes a definition object to the cache
 109       * @param HTMLPurifier_Config $config
 110       */
 111      abstract public function remove($config);
 112  
 113      /**
 114       * Clears all objects from cache
 115       * @param HTMLPurifier_Config $config
 116       */
 117      abstract public function flush($config);
 118  
 119      /**
 120       * Clears all expired (older version or revision) objects from cache
 121       * @note Be careful implementing this method as flush. Flush must
 122       *       not interfere with other Definition types, and cleanup()
 123       *       should not be repeatedly called by userland code.
 124       * @param HTMLPurifier_Config $config
 125       */
 126      abstract public function cleanup($config);
 127  }
 128  
 129  // vim: et sw=4 sts=4