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  // Enum = Enumerated
   4  /**
   5   * Validates a keyword against a list of valid values.
   6   * @warning The case-insensitive compare of this function uses PHP's
   7   *          built-in strtolower and ctype_lower functions, which may
   8   *          cause problems with international comparisons
   9   */
  10  class HTMLPurifier_AttrDef_Enum extends HTMLPurifier_AttrDef
  11  {
  12  
  13      /**
  14       * Lookup table of valid values.
  15       * @type array
  16       * @todo Make protected
  17       */
  18      public $valid_values = array();
  19  
  20      /**
  21       * Bool indicating whether or not enumeration is case sensitive.
  22       * @note In general this is always case insensitive.
  23       */
  24      protected $case_sensitive = false; // values according to W3C spec
  25  
  26      /**
  27       * @param array $valid_values List of valid values
  28       * @param bool $case_sensitive Whether or not case sensitive
  29       */
  30      public function __construct($valid_values = array(), $case_sensitive = false)
  31      {
  32          $this->valid_values = array_flip($valid_values);
  33          $this->case_sensitive = $case_sensitive;
  34      }
  35  
  36      /**
  37       * @param string $string
  38       * @param HTMLPurifier_Config $config
  39       * @param HTMLPurifier_Context $context
  40       * @return bool|string
  41       */
  42      public function validate($string, $config, $context)
  43      {
  44          $string = trim($string);
  45          if (!$this->case_sensitive) {
  46              // we may want to do full case-insensitive libraries
  47              $string = ctype_lower($string) ? $string : strtolower($string);
  48          }
  49          $result = isset($this->valid_values[$string]);
  50  
  51          return $result ? $string : false;
  52      }
  53  
  54      /**
  55       * @param string $string In form of comma-delimited list of case-insensitive
  56       *      valid values. Example: "foo,bar,baz". Prepend "s:" to make
  57       *      case sensitive
  58       * @return HTMLPurifier_AttrDef_Enum
  59       */
  60      public function make($string)
  61      {
  62          if (strlen($string) > 2 && $string[0] == 's' && $string[1] == ':') {
  63              $string = substr($string, 2);
  64              $sensitive = true;
  65          } else {
  66              $sensitive = false;
  67          }
  68          $values = explode(',', $string);
  69          return new HTMLPurifier_AttrDef_Enum($values, $sensitive);
  70      }
  71  }
  72  
  73  // vim: et sw=4 sts=4