1: <?php
2:
3: 4: 5: 6: 7: 8: 9: 10: 11:
12:
13:
14:
15: 16: 17: 18: 19: 20: 21: 22:
23: abstract class NTextBase extends NFormControl
24: {
25:
26: protected $emptyValue = '';
27:
28:
29: protected $filters = array();
30:
31:
32:
33: 34: 35: 36: 37:
38: public function setValue($value)
39: {
40: $this->value = is_array($value) ? '' : (string) $value;
41: return $this;
42: }
43:
44:
45:
46: 47: 48: 49:
50: public function getValue()
51: {
52: $value = $this->value;
53: foreach ($this->filters as $filter) {
54: $value = (string) $filter->invoke($value);
55: }
56: return $value === $this->translate($this->emptyValue) ? '' : $value;
57: }
58:
59:
60:
61: 62: 63: 64: 65:
66: public function setEmptyValue($value)
67: {
68: $this->emptyValue = (string) $value;
69: return $this;
70: }
71:
72:
73:
74: 75: 76: 77:
78: final public function getEmptyValue()
79: {
80: return $this->emptyValue;
81: }
82:
83:
84:
85: 86: 87: 88: 89:
90: public function addFilter($filter)
91: {
92: $this->filters[] = callback($filter);
93: return $this;
94: }
95:
96:
97:
98: public function getControl()
99: {
100: $control = parent::getControl();
101: foreach ($this->getRules() as $rule) {
102: if ($rule->type === NRule::VALIDATOR && !$rule->isNegative
103: && ($rule->operation === NForm::LENGTH || $rule->operation === NForm::MAX_LENGTH)
104: ) {
105: $control->maxlength = is_array($rule->arg) ? $rule->arg[1] : $rule->arg;
106: }
107: }
108: if ($this->emptyValue !== '') {
109: $control->data('nette-empty-value', $this->translate($this->emptyValue));
110: }
111: return $control;
112: }
113:
114:
115:
116: public function addRule($operation, $message = NULL, $arg = NULL)
117: {
118: if ($operation === NForm::FLOAT) {
119: $this->addFilter(callback(__CLASS__, 'filterFloat'));
120: }
121: return parent::addRule($operation, $message, $arg);
122: }
123:
124:
125:
126: 127: 128: 129: 130: 131:
132: public static function validateMinLength(NTextBase $control, $length)
133: {
134: return NStrings::length($control->getValue()) >= $length;
135: }
136:
137:
138:
139: 140: 141: 142: 143: 144:
145: public static function validateMaxLength(NTextBase $control, $length)
146: {
147: return NStrings::length($control->getValue()) <= $length;
148: }
149:
150:
151:
152: 153: 154: 155: 156: 157:
158: public static function validateLength(NTextBase $control, $range)
159: {
160: if (!is_array($range)) {
161: $range = array($range, $range);
162: }
163: return NValidators::isInRange(NStrings::length($control->getValue()), $range);
164: }
165:
166:
167:
168: 169: 170: 171: 172:
173: public static function validateEmail(NTextBase $control)
174: {
175: return NValidators::isEmail($control->getValue());
176: }
177:
178:
179:
180: 181: 182: 183: 184:
185: public static function validateUrl(NTextBase $control)
186: {
187: return NValidators::isUrl($control->getValue()) || NValidators::isUrl('http://' . $control->getValue());
188: }
189:
190:
191:
192:
193: public static function validateRegexp(NTextBase $control, $regexp)
194: {
195: return (bool) NStrings::match($control->getValue(), $regexp);
196: }
197:
198:
199:
200: 201: 202: 203: 204: 205:
206: public static function validatePattern(NTextBase $control, $pattern)
207: {
208: return (bool) NStrings::match($control->getValue(), "\x01^($pattern)$\x01u");
209: }
210:
211:
212:
213: 214: 215: 216: 217:
218: public static function validateInteger(NTextBase $control)
219: {
220: return NValidators::isNumericInt($control->getValue());
221: }
222:
223:
224:
225: 226: 227: 228: 229:
230: public static function validateFloat(NTextBase $control)
231: {
232: return NValidators::isNumeric(self::filterFloat($control->getValue()));
233: }
234:
235:
236:
237: 238: 239: 240: 241: 242:
243: public static function validateRange(NTextBase $control, $range)
244: {
245: return NValidators::isInRange($control->getValue(), $range);
246: }
247:
248:
249:
250: 251: 252: 253: 254:
255: public static function filterFloat($s)
256: {
257: return str_replace(array(' ', ','), array('', '.'), $s);
258: }
259:
260: }
261: