1
2 #ifdef HAVE_CONFIG_H
3 #include "../../ext_config.h"
4 #endif
5
6 #include <php.h>
7 #include "../../php_ext.h"
8 #include "../../ext.h"
9
10 #include <Zend/zend_operators.h>
11 #include <Zend/zend_exceptions.h>
12 #include <Zend/zend_interfaces.h>
13
14 #include "kernel/main.h"
15 #include "kernel/object.h"
16 #include "kernel/memory.h"
17 #include "ext/spl/spl_exceptions.h"
18 #include "kernel/exception.h"
19 #include "kernel/array.h"
20 #include "kernel/operators.h"
21 #include "kernel/fcall.h"
22
23
24 /**
25 * Phalcon\Validation\Validator
26 *
27 * This is a base class for validators
28 */
ZEPHIR_INIT_CLASS(Phalcon_Validation_Validator)29 ZEPHIR_INIT_CLASS(Phalcon_Validation_Validator) {
30
31 ZEPHIR_REGISTER_CLASS(Phalcon\\Validation, Validator, phalcon, validation_validator, phalcon_validation_validator_method_entry, ZEND_ACC_EXPLICIT_ABSTRACT_CLASS);
32
33 zend_declare_property_null(phalcon_validation_validator_ce, SL("_options"), ZEND_ACC_PROTECTED TSRMLS_CC);
34
35 zend_class_implements(phalcon_validation_validator_ce TSRMLS_CC, 1, phalcon_validation_validatorinterface_ce);
36 return SUCCESS;
37
38 }
39
40 /**
41 * Phalcon\Validation\Validator constructor
42 */
PHP_METHOD(Phalcon_Validation_Validator,__construct)43 PHP_METHOD(Phalcon_Validation_Validator, __construct) {
44
45 zval *options_param = NULL;
46 zval *options = NULL;
47
48 ZEPHIR_MM_GROW();
49 zephir_fetch_params(1, 0, 1, &options_param);
50
51 if (!options_param) {
52 ZEPHIR_INIT_VAR(options);
53 array_init(options);
54 } else {
55 options = options_param;
56 }
57
58
59 zephir_update_property_this(getThis(), SL("_options"), options TSRMLS_CC);
60 ZEPHIR_MM_RESTORE();
61
62 }
63
64 /**
65 * Checks if an option has been defined
66
67 * @deprecated since 2.1.0
68 * @see \Phalcon\Validation\Validator::hasOption()
69 */
PHP_METHOD(Phalcon_Validation_Validator,isSetOption)70 PHP_METHOD(Phalcon_Validation_Validator, isSetOption) {
71
72 zval *key_param = NULL, *_0;
73 zval *key = NULL;
74
75 ZEPHIR_MM_GROW();
76 zephir_fetch_params(1, 1, 0, &key_param);
77
78 if (UNEXPECTED(Z_TYPE_P(key_param) != IS_STRING && Z_TYPE_P(key_param) != IS_NULL)) {
79 zephir_throw_exception_string(spl_ce_InvalidArgumentException, SL("Parameter 'key' must be a string") TSRMLS_CC);
80 RETURN_MM_NULL();
81 }
82 if (EXPECTED(Z_TYPE_P(key_param) == IS_STRING)) {
83 zephir_get_strval(key, key_param);
84 } else {
85 ZEPHIR_INIT_VAR(key);
86 ZVAL_EMPTY_STRING(key);
87 }
88
89
90 _0 = zephir_fetch_nproperty_this(this_ptr, SL("_options"), PH_NOISY_CC);
91 RETURN_MM_BOOL(zephir_array_isset(_0, key));
92
93 }
94
95 /**
96 * Checks if an option is defined
97 */
PHP_METHOD(Phalcon_Validation_Validator,hasOption)98 PHP_METHOD(Phalcon_Validation_Validator, hasOption) {
99
100 zval *key_param = NULL, *_0;
101 zval *key = NULL;
102
103 ZEPHIR_MM_GROW();
104 zephir_fetch_params(1, 1, 0, &key_param);
105
106 if (UNEXPECTED(Z_TYPE_P(key_param) != IS_STRING && Z_TYPE_P(key_param) != IS_NULL)) {
107 zephir_throw_exception_string(spl_ce_InvalidArgumentException, SL("Parameter 'key' must be a string") TSRMLS_CC);
108 RETURN_MM_NULL();
109 }
110 if (EXPECTED(Z_TYPE_P(key_param) == IS_STRING)) {
111 zephir_get_strval(key, key_param);
112 } else {
113 ZEPHIR_INIT_VAR(key);
114 ZVAL_EMPTY_STRING(key);
115 }
116
117
118 _0 = zephir_fetch_nproperty_this(this_ptr, SL("_options"), PH_NOISY_CC);
119 RETURN_MM_BOOL(zephir_array_isset(_0, key));
120
121 }
122
123 /**
124 * Returns an option in the validator's options
125 * Returns null if the option hasn't set
126 */
PHP_METHOD(Phalcon_Validation_Validator,getOption)127 PHP_METHOD(Phalcon_Validation_Validator, getOption) {
128
129 zend_bool _0$$4;
130 zval *key_param = NULL, *defaultValue = NULL, *options = NULL, *value = NULL, *fieldValue = NULL;
131 zval *key = NULL;
132
133 ZEPHIR_MM_GROW();
134 zephir_fetch_params(1, 1, 1, &key_param, &defaultValue);
135
136 if (UNEXPECTED(Z_TYPE_P(key_param) != IS_STRING && Z_TYPE_P(key_param) != IS_NULL)) {
137 zephir_throw_exception_string(spl_ce_InvalidArgumentException, SL("Parameter 'key' must be a string") TSRMLS_CC);
138 RETURN_MM_NULL();
139 }
140 if (EXPECTED(Z_TYPE_P(key_param) == IS_STRING)) {
141 zephir_get_strval(key, key_param);
142 } else {
143 ZEPHIR_INIT_VAR(key);
144 ZVAL_EMPTY_STRING(key);
145 }
146 if (!defaultValue) {
147 defaultValue = ZEPHIR_GLOBAL(global_null);
148 }
149
150
151 options = zephir_fetch_nproperty_this(this_ptr, SL("_options"), PH_NOISY_CC);
152 if (Z_TYPE_P(options) == IS_ARRAY) {
153 if (zephir_array_isset_fetch(&value, options, key, 1 TSRMLS_CC)) {
154 _0$$4 = ZEPHIR_IS_STRING(key, "attribute");
155 if (_0$$4) {
156 _0$$4 = Z_TYPE_P(value) == IS_ARRAY;
157 }
158 if (_0$$4) {
159 if (zephir_array_isset_fetch(&fieldValue, value, key, 1 TSRMLS_CC)) {
160 RETURN_CTOR(fieldValue);
161 }
162 }
163 RETURN_CTOR(value);
164 }
165 }
166 RETVAL_ZVAL(defaultValue, 1, 0);
167 RETURN_MM();
168
169 }
170
171 /**
172 * Sets an option in the validator
173 */
PHP_METHOD(Phalcon_Validation_Validator,setOption)174 PHP_METHOD(Phalcon_Validation_Validator, setOption) {
175
176 zval *key_param = NULL, *value;
177 zval *key = NULL;
178
179 ZEPHIR_MM_GROW();
180 zephir_fetch_params(1, 2, 0, &key_param, &value);
181
182 if (UNEXPECTED(Z_TYPE_P(key_param) != IS_STRING && Z_TYPE_P(key_param) != IS_NULL)) {
183 zephir_throw_exception_string(spl_ce_InvalidArgumentException, SL("Parameter 'key' must be a string") TSRMLS_CC);
184 RETURN_MM_NULL();
185 }
186 if (EXPECTED(Z_TYPE_P(key_param) == IS_STRING)) {
187 zephir_get_strval(key, key_param);
188 } else {
189 ZEPHIR_INIT_VAR(key);
190 ZVAL_EMPTY_STRING(key);
191 }
192
193
194 zephir_update_property_array(this_ptr, SL("_options"), key, value TSRMLS_CC);
195 ZEPHIR_MM_RESTORE();
196
197 }
198
199 /**
200 * Executes the validation
201 */
PHP_METHOD(Phalcon_Validation_Validator,validate)202 PHP_METHOD(Phalcon_Validation_Validator, validate) {
203
204 }
205
206 /**
207 * Prepares a label for the field.
208 */
PHP_METHOD(Phalcon_Validation_Validator,prepareLabel)209 PHP_METHOD(Phalcon_Validation_Validator, prepareLabel) {
210
211 zend_long ZEPHIR_LAST_CALL_STATUS;
212 zval *field = NULL;
213 zval *validation, *field_param = NULL, *label = NULL, *_0, *_1$$3;
214
215 ZEPHIR_MM_GROW();
216 zephir_fetch_params(1, 2, 0, &validation, &field_param);
217
218 if (UNEXPECTED(Z_TYPE_P(field_param) != IS_STRING && Z_TYPE_P(field_param) != IS_NULL)) {
219 zephir_throw_exception_string(spl_ce_InvalidArgumentException, SL("Parameter 'field' must be a string") TSRMLS_CC);
220 RETURN_MM_NULL();
221 }
222 if (EXPECTED(Z_TYPE_P(field_param) == IS_STRING)) {
223 zephir_get_strval(field, field_param);
224 } else {
225 ZEPHIR_INIT_VAR(field);
226 ZVAL_EMPTY_STRING(field);
227 }
228
229
230 ZEPHIR_INIT_VAR(_0);
231 ZVAL_STRING(_0, "label", ZEPHIR_TEMP_PARAM_COPY);
232 ZEPHIR_CALL_METHOD(&label, this_ptr, "getoption", NULL, 0, _0);
233 zephir_check_temp_parameter(_0);
234 zephir_check_call_status();
235 if (Z_TYPE_P(label) == IS_ARRAY) {
236 zephir_array_fetch(&_1$$3, label, field, PH_NOISY | PH_READONLY, "phalcon/validation/validator.zep", 110 TSRMLS_CC);
237 ZEPHIR_CPY_WRT(label, _1$$3);
238 }
239 if (ZEPHIR_IS_EMPTY(label)) {
240 ZEPHIR_CALL_METHOD(&label, validation, "getlabel", NULL, 0, field);
241 zephir_check_call_status();
242 }
243 RETURN_CCTOR(label);
244
245 }
246
247 /**
248 * Prepares a validation message.
249 */
PHP_METHOD(Phalcon_Validation_Validator,prepareMessage)250 PHP_METHOD(Phalcon_Validation_Validator, prepareMessage) {
251
252 zend_long ZEPHIR_LAST_CALL_STATUS;
253 zval *field = NULL, *type = NULL, *option = NULL;
254 zval *validation, *field_param = NULL, *type_param = NULL, *option_param = NULL, *message = NULL, *_0$$3;
255
256 ZEPHIR_MM_GROW();
257 zephir_fetch_params(1, 3, 1, &validation, &field_param, &type_param, &option_param);
258
259 if (UNEXPECTED(Z_TYPE_P(field_param) != IS_STRING && Z_TYPE_P(field_param) != IS_NULL)) {
260 zephir_throw_exception_string(spl_ce_InvalidArgumentException, SL("Parameter 'field' must be a string") TSRMLS_CC);
261 RETURN_MM_NULL();
262 }
263 if (EXPECTED(Z_TYPE_P(field_param) == IS_STRING)) {
264 zephir_get_strval(field, field_param);
265 } else {
266 ZEPHIR_INIT_VAR(field);
267 ZVAL_EMPTY_STRING(field);
268 }
269 if (UNEXPECTED(Z_TYPE_P(type_param) != IS_STRING && Z_TYPE_P(type_param) != IS_NULL)) {
270 zephir_throw_exception_string(spl_ce_InvalidArgumentException, SL("Parameter 'type' must be a string") TSRMLS_CC);
271 RETURN_MM_NULL();
272 }
273 if (EXPECTED(Z_TYPE_P(type_param) == IS_STRING)) {
274 zephir_get_strval(type, type_param);
275 } else {
276 ZEPHIR_INIT_VAR(type);
277 ZVAL_EMPTY_STRING(type);
278 }
279 if (!option_param) {
280 ZEPHIR_INIT_VAR(option);
281 ZVAL_STRING(option, "message", 1);
282 } else {
283 if (UNEXPECTED(Z_TYPE_P(option_param) != IS_STRING && Z_TYPE_P(option_param) != IS_NULL)) {
284 zephir_throw_exception_string(spl_ce_InvalidArgumentException, SL("Parameter 'option' must be a string") TSRMLS_CC);
285 RETURN_MM_NULL();
286 }
287 if (EXPECTED(Z_TYPE_P(option_param) == IS_STRING)) {
288 zephir_get_strval(option, option_param);
289 } else {
290 ZEPHIR_INIT_VAR(option);
291 ZVAL_EMPTY_STRING(option);
292 }
293 }
294
295
296 ZEPHIR_CALL_METHOD(&message, this_ptr, "getoption", NULL, 0, option);
297 zephir_check_call_status();
298 if (Z_TYPE_P(message) == IS_ARRAY) {
299 zephir_array_fetch(&_0$$3, message, field, PH_NOISY | PH_READONLY, "phalcon/validation/validator.zep", 129 TSRMLS_CC);
300 ZEPHIR_CPY_WRT(message, _0$$3);
301 }
302 if (ZEPHIR_IS_EMPTY(message)) {
303 ZEPHIR_CALL_METHOD(&message, validation, "getdefaultmessage", NULL, 0, type);
304 zephir_check_call_status();
305 }
306 RETURN_CCTOR(message);
307
308 }
309
310 /**
311 * Prepares a validation code.
312 */
PHP_METHOD(Phalcon_Validation_Validator,prepareCode)313 PHP_METHOD(Phalcon_Validation_Validator, prepareCode) {
314
315 zend_long ZEPHIR_LAST_CALL_STATUS;
316 zval *field_param = NULL, *code = NULL, *_0, *_1$$3;
317 zval *field = NULL;
318
319 ZEPHIR_MM_GROW();
320 zephir_fetch_params(1, 1, 0, &field_param);
321
322 if (UNEXPECTED(Z_TYPE_P(field_param) != IS_STRING && Z_TYPE_P(field_param) != IS_NULL)) {
323 zephir_throw_exception_string(spl_ce_InvalidArgumentException, SL("Parameter 'field' must be a string") TSRMLS_CC);
324 RETURN_MM_NULL();
325 }
326 if (EXPECTED(Z_TYPE_P(field_param) == IS_STRING)) {
327 zephir_get_strval(field, field_param);
328 } else {
329 ZEPHIR_INIT_VAR(field);
330 ZVAL_EMPTY_STRING(field);
331 }
332
333
334 ZEPHIR_INIT_VAR(_0);
335 ZVAL_STRING(_0, "code", ZEPHIR_TEMP_PARAM_COPY);
336 ZEPHIR_CALL_METHOD(&code, this_ptr, "getoption", NULL, 0, _0);
337 zephir_check_temp_parameter(_0);
338 zephir_check_call_status();
339 if (Z_TYPE_P(code) == IS_ARRAY) {
340 zephir_array_fetch(&_1$$3, code, field, PH_NOISY | PH_READONLY, "phalcon/validation/validator.zep", 148 TSRMLS_CC);
341 ZEPHIR_CPY_WRT(code, _1$$3);
342 }
343 RETURN_CCTOR(code);
344
345 }
346
347