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   * Generic property list implementation
   5   */
   6  class HTMLPurifier_PropertyList
   7  {
   8      /**
   9       * Internal data-structure for properties.
  10       * @type array
  11       */
  12      protected $data = array();
  13  
  14      /**
  15       * Parent plist.
  16       * @type HTMLPurifier_PropertyList
  17       */
  18      protected $parent;
  19  
  20      /**
  21       * Cache.
  22       * @type array
  23       */
  24      protected $cache;
  25  
  26      /**
  27       * @param HTMLPurifier_PropertyList $parent Parent plist
  28       */
  29      public function __construct($parent = null)
  30      {
  31          $this->parent = $parent;
  32      }
  33  
  34      /**
  35       * Recursively retrieves the value for a key
  36       * @param string $name
  37       * @throws HTMLPurifier_Exception
  38       */
  39      public function get($name)
  40      {
  41          if ($this->has($name)) {
  42              return $this->data[$name];
  43          }
  44          // possible performance bottleneck, convert to iterative if necessary
  45          if ($this->parent) {
  46              return $this->parent->get($name);
  47          }
  48          throw new HTMLPurifier_Exception("Key '$name' not found");
  49      }
  50  
  51      /**
  52       * Sets the value of a key, for this plist
  53       * @param string $name
  54       * @param mixed $value
  55       */
  56      public function set($name, $value)
  57      {
  58          $this->data[$name] = $value;
  59      }
  60  
  61      /**
  62       * Returns true if a given key exists
  63       * @param string $name
  64       * @return bool
  65       */
  66      public function has($name)
  67      {
  68          return array_key_exists($name, $this->data);
  69      }
  70  
  71      /**
  72       * Resets a value to the value of it's parent, usually the default. If
  73       * no value is specified, the entire plist is reset.
  74       * @param string $name
  75       */
  76      public function reset($name = null)
  77      {
  78          if ($name == null) {
  79              $this->data = array();
  80          } else {
  81              unset($this->data[$name]);
  82          }
  83      }
  84  
  85      /**
  86       * Squashes this property list and all of its property lists into a single
  87       * array, and returns the array. This value is cached by default.
  88       * @param bool $force If true, ignores the cache and regenerates the array.
  89       * @return array
  90       */
  91      public function squash($force = false)
  92      {
  93          if ($this->cache !== null && !$force) {
  94              return $this->cache;
  95          }
  96          if ($this->parent) {
  97              return $this->cache = array_merge($this->parent->squash($force), $this->data);
  98          } else {
  99              return $this->cache = $this->data;
 100          }
 101      }
 102  
 103      /**
 104       * Returns the parent plist.
 105       * @return HTMLPurifier_PropertyList
 106       */
 107      public function getParent()
 108      {
 109          return $this->parent;
 110      }
 111  
 112      /**
 113       * Sets the parent plist.
 114       * @param HTMLPurifier_PropertyList $plist Parent plist
 115       */
 116      public function setParent($plist)
 117      {
 118          $this->parent = $plist;
 119      }
 120  }
 121  
 122  // vim: et sw=4 sts=4