1: <?php
2:
3: /**
4: * Fluent interface for validating the contents of member variables.
5: * This should be immutable. See HTMLPurifier_ConfigSchema_Validator for
6: * use-cases. We name this an 'atom' because it's ONLY for validations that
7: * are independent and usually scalar.
8: */
9: class HTMLPurifier_ConfigSchema_ValidatorAtom
10: {
11: /**
12: * @type string
13: */
14: protected $context;
15:
16: /**
17: * @type object
18: */
19: protected $obj;
20:
21: /**
22: * @type string
23: */
24: protected $member;
25:
26: /**
27: * @type mixed
28: */
29: protected $contents;
30:
31: public function __construct($context, $obj, $member)
32: {
33: $this->context = $context;
34: $this->obj = $obj;
35: $this->member = $member;
36: $this->contents =& $obj->$member;
37: }
38:
39: /**
40: * @return HTMLPurifier_ConfigSchema_ValidatorAtom
41: */
42: public function assertIsString()
43: {
44: if (!is_string($this->contents)) {
45: $this->error('must be a string');
46: }
47: return $this;
48: }
49:
50: /**
51: * @return HTMLPurifier_ConfigSchema_ValidatorAtom
52: */
53: public function assertIsBool()
54: {
55: if (!is_bool($this->contents)) {
56: $this->error('must be a boolean');
57: }
58: return $this;
59: }
60:
61: /**
62: * @return HTMLPurifier_ConfigSchema_ValidatorAtom
63: */
64: public function assertIsArray()
65: {
66: if (!is_array($this->contents)) {
67: $this->error('must be an array');
68: }
69: return $this;
70: }
71:
72: /**
73: * @return HTMLPurifier_ConfigSchema_ValidatorAtom
74: */
75: public function assertNotNull()
76: {
77: if ($this->contents === null) {
78: $this->error('must not be null');
79: }
80: return $this;
81: }
82:
83: /**
84: * @return HTMLPurifier_ConfigSchema_ValidatorAtom
85: */
86: public function assertAlnum()
87: {
88: $this->assertIsString();
89: if (!ctype_alnum($this->contents)) {
90: $this->error('must be alphanumeric');
91: }
92: return $this;
93: }
94:
95: /**
96: * @return HTMLPurifier_ConfigSchema_ValidatorAtom
97: */
98: public function assertNotEmpty()
99: {
100: if (empty($this->contents)) {
101: $this->error('must not be empty');
102: }
103: return $this;
104: }
105:
106: /**
107: * @return HTMLPurifier_ConfigSchema_ValidatorAtom
108: */
109: public function assertIsLookup()
110: {
111: $this->assertIsArray();
112: foreach ($this->contents as $v) {
113: if ($v !== true) {
114: $this->error('must be a lookup array');
115: }
116: }
117: return $this;
118: }
119:
120: /**
121: * @param string $msg
122: * @throws HTMLPurifier_ConfigSchema_Exception
123: */
124: protected function error($msg)
125: {
126: throw new HTMLPurifier_ConfigSchema_Exception(ucfirst($this->member) . ' in ' . $this->context . ' ' . $msg);
127: }
128: }
129:
130: // vim: et sw=4 sts=4
131: