File indexing completed on 2024-12-22 05:36:19

0001 <?php
0002 
0003 /**
0004  * Fluent interface for validating the contents of member variables.
0005  * This should be immutable. See HTMLPurifier_ConfigSchema_Validator for
0006  * use-cases. We name this an 'atom' because it's ONLY for validations that
0007  * are independent and usually scalar.
0008  */
0009 class HTMLPurifier_ConfigSchema_ValidatorAtom
0010 {
0011     /**
0012      * @type string
0013      */
0014     protected $context;
0015 
0016     /**
0017      * @type object
0018      */
0019     protected $obj;
0020 
0021     /**
0022      * @type string
0023      */
0024     protected $member;
0025 
0026     /**
0027      * @type mixed
0028      */
0029     protected $contents;
0030 
0031     public function __construct($context, $obj, $member)
0032     {
0033         $this->context = $context;
0034         $this->obj = $obj;
0035         $this->member = $member;
0036         $this->contents =& $obj->$member;
0037     }
0038 
0039     /**
0040      * @return HTMLPurifier_ConfigSchema_ValidatorAtom
0041      */
0042     public function assertIsString()
0043     {
0044         if (!is_string($this->contents)) {
0045             $this->error('must be a string');
0046         }
0047         return $this;
0048     }
0049 
0050     /**
0051      * @return HTMLPurifier_ConfigSchema_ValidatorAtom
0052      */
0053     public function assertIsBool()
0054     {
0055         if (!is_bool($this->contents)) {
0056             $this->error('must be a boolean');
0057         }
0058         return $this;
0059     }
0060 
0061     /**
0062      * @return HTMLPurifier_ConfigSchema_ValidatorAtom
0063      */
0064     public function assertIsArray()
0065     {
0066         if (!is_array($this->contents)) {
0067             $this->error('must be an array');
0068         }
0069         return $this;
0070     }
0071 
0072     /**
0073      * @return HTMLPurifier_ConfigSchema_ValidatorAtom
0074      */
0075     public function assertNotNull()
0076     {
0077         if ($this->contents === null) {
0078             $this->error('must not be null');
0079         }
0080         return $this;
0081     }
0082 
0083     /**
0084      * @return HTMLPurifier_ConfigSchema_ValidatorAtom
0085      */
0086     public function assertAlnum()
0087     {
0088         $this->assertIsString();
0089         if (!ctype_alnum($this->contents)) {
0090             $this->error('must be alphanumeric');
0091         }
0092         return $this;
0093     }
0094 
0095     /**
0096      * @return HTMLPurifier_ConfigSchema_ValidatorAtom
0097      */
0098     public function assertNotEmpty()
0099     {
0100         if (empty($this->contents)) {
0101             $this->error('must not be empty');
0102         }
0103         return $this;
0104     }
0105 
0106     /**
0107      * @return HTMLPurifier_ConfigSchema_ValidatorAtom
0108      */
0109     public function assertIsLookup()
0110     {
0111         $this->assertIsArray();
0112         foreach ($this->contents as $v) {
0113             if ($v !== true) {
0114                 $this->error('must be a lookup array');
0115             }
0116         }
0117         return $this;
0118     }
0119 
0120     /**
0121      * @param string $msg
0122      * @throws HTMLPurifier_ConfigSchema_Exception
0123      */
0124     protected function error($msg)
0125     {
0126         throw new HTMLPurifier_ConfigSchema_Exception(ucfirst($this->member) . ' in ' . $this->context . ' ' . $msg);
0127     }
0128 }
0129 
0130 // vim: et sw=4 sts=4