Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.0.x will end 8 May 2023 (12 months).
  • Bug fixes for security issues in 4.0.x will end 13 November 2023 (18 months).
  • PHP version: minimum PHP 7.3.0 Note: the minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is also supported.
   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