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/fcall.h"
16 #include "kernel/array.h"
17 #include "kernel/operators.h"
18 #include "kernel/memory.h"
19 #include "kernel/string.h"
20 #include "kernel/concat.h"
21 #include "kernel/exception.h"
22 #include "kernel/object.h"
23 #include "ext/spl/spl_exceptions.h"
24 
25 
26 /**
27  * Phalcon\Validation\Validator\File
28  *
29  * Checks if a value has a correct file
30  *
31  * <code>
32  * use Phalcon\Validation;
33  * use Phalcon\Validation\Validator\File as FileValidator;
34  *
35  * $validator = new Validation();
36  *
37  * $validator->add(
38  *     "file",
39  *     new FileValidator(
40  *         [
41  *             "maxSize"              => "2M",
42  *             "messageSize"          => ":field exceeds the max filesize (:max)",
43  *             "allowedTypes"         => [
44  *                 "image/jpeg",
45  *                 "image/png",
46  *             ],
47  *             "messageType"          => "Allowed file types are :types",
48  *             "maxResolution"        => "800x600",
49  *             "messageMaxResolution" => "Max resolution of :field is :max",
50  *         ]
51  *     )
52  * );
53  *
54  * $validator->add(
55  *     [
56  *         "file",
57  *         "anotherFile",
58  *     ],
59  *     new FileValidator(
60  *         [
61  *             "maxSize" => [
62  *                 "file"        => "2M",
63  *                 "anotherFile" => "4M",
64  *             ],
65  *             "messageSize" => [
66  *                 "file"        => "file exceeds the max filesize 2M",
67  *                 "anotherFile" => "anotherFile exceeds the max filesize 4M",
68  *             "allowedTypes" => [
69  *                 "file"        => [
70  *                     "image/jpeg",
71  *                     "image/png",
72  *                 ],
73  *                 "anotherFile" => [
74  *                     "image/gif",
75  *                     "image/bmp",
76  *                 ],
77  *             ],
78  *             "messageType" => [
79  *                 "file"        => "Allowed file types are image/jpeg and image/png",
80  *                 "anotherFile" => "Allowed file types are image/gif and image/bmp",
81  *             ],
82  *             "maxResolution" => [
83  *                 "file"        => "800x600",
84  *                 "anotherFile" => "1024x768",
85  *             ],
86  *             "messageMaxResolution" => [
87  *                 "file"        => "Max resolution of file is 800x600",
88  *                 "anotherFile" => "Max resolution of file is 1024x768",
89  *             ],
90  *         ]
91  *     )
92  * );
93  * </code>
94  */
ZEPHIR_INIT_CLASS(Phalcon_Validation_Validator_File)95 ZEPHIR_INIT_CLASS(Phalcon_Validation_Validator_File) {
96 
97 	ZEPHIR_REGISTER_CLASS_EX(Phalcon\\Validation\\Validator, File, phalcon, validation_validator_file, phalcon_validation_validator_ce, phalcon_validation_validator_file_method_entry, 0);
98 
99 	return SUCCESS;
100 
101 }
102 
103 /**
104  * Executes the validation
105  */
PHP_METHOD(Phalcon_Validation_Validator_File,validate)106 PHP_METHOD(Phalcon_Validation_Validator_File, validate) {
107 
108 	zend_bool _1, _2, _3, _5, _6, _11, _12, _14, _20, _21, _50, _57$$16, _64$$21;
109 	zend_long ZEPHIR_LAST_CALL_STATUS;
110 	zval *field = NULL;
111 	zval *validation, *field_param = NULL, *_SERVER, *_POST, *_FILES, *value = NULL, *message = NULL, *label = NULL, *replacePairs = NULL, *types = NULL, *byteUnits = NULL, *unit = NULL, *maxSize = NULL, *matches = NULL, *bytes = NULL, *mime = NULL, *tmp = NULL, *width = NULL, *height = NULL, *minResolution = NULL, *maxResolution = NULL, *minWidth = NULL, *maxWidth = NULL, *minHeight = NULL, *maxHeight = NULL, *fieldTypes = NULL, *code = NULL, *minResolutionArray = NULL, *maxResolutionArray = NULL, *_0, *_4, *_7, *_13, *_15, *_16 = NULL, *_25 = NULL, *_26 = NULL, *_42 = NULL, *_49 = NULL, *_51 = NULL, *_8$$3 = NULL, *_9$$3 = NULL, *_10$$3 = NULL, *_17$$4 = NULL, *_18$$4 = NULL, *_19$$4 = NULL, *_22$$5 = NULL, *_23$$5 = NULL, *_24$$5 = NULL, *_27$$6 = NULL, *_29$$6, *_30$$6, *_31$$6, *_32$$6, *_33$$6 = NULL, *_34$$6, *_35$$6, _36$$6, *_37$$6, *_38$$6 = NULL, *_28$$7, *_39$$9 = NULL, *_40$$9 = NULL, *_41$$9 = NULL, *_43$$10, _44$$13, *_45$$13, *_46$$15 = NULL, *_47$$15 = NULL, *_48$$15 = NULL, *_52$$16, *_53$$16 = NULL, *_54$$16 = NULL, *_61$$16 = NULL, *_55$$17, *_56$$18, *_58$$20 = NULL, *_59$$20 = NULL, *_60$$20 = NULL, *_62$$21, *_63$$22, *_65$$23 = NULL, *_66$$23 = NULL, *_67$$23 = NULL;
112 
113 	ZEPHIR_MM_GROW();
114 	zephir_get_global(&_FILES, SS("_FILES") TSRMLS_CC);
115 	zephir_get_global(&_POST, SS("_POST") TSRMLS_CC);
116 	zephir_get_global(&_SERVER, SS("_SERVER") TSRMLS_CC);
117 	zephir_fetch_params(1, 2, 0, &validation, &field_param);
118 
119 	if (UNEXPECTED(Z_TYPE_P(field_param) != IS_STRING && Z_TYPE_P(field_param) != IS_NULL)) {
120 		zephir_throw_exception_string(spl_ce_InvalidArgumentException, SL("Parameter 'field' must be a string") TSRMLS_CC);
121 		RETURN_MM_NULL();
122 	}
123 	if (EXPECTED(Z_TYPE_P(field_param) == IS_STRING)) {
124 		zephir_get_strval(field, field_param);
125 	} else {
126 		ZEPHIR_INIT_VAR(field);
127 		ZVAL_EMPTY_STRING(field);
128 	}
129 
130 
131 	ZEPHIR_CALL_METHOD(&value, validation, "getvalue", NULL, 0, field);
132 	zephir_check_call_status();
133 	ZEPHIR_CALL_METHOD(&label, this_ptr, "preparelabel", NULL, 0, validation, field);
134 	zephir_check_call_status();
135 	ZEPHIR_CALL_METHOD(&code, this_ptr, "preparecode", NULL, 0, field);
136 	zephir_check_call_status();
137 	zephir_array_fetch_string(&_0, _SERVER, SL("REQUEST_METHOD"), PH_NOISY | PH_READONLY, "phalcon/validation/validator/file.zep", 112 TSRMLS_CC);
138 	_1 = ZEPHIR_IS_STRING(_0, "POST");
139 	if (_1) {
140 		_1 = ZEPHIR_IS_EMPTY(_POST);
141 	}
142 	_2 = _1;
143 	if (_2) {
144 		_2 = ZEPHIR_IS_EMPTY(_FILES);
145 	}
146 	_3 = _2;
147 	if (_3) {
148 		zephir_array_fetch_string(&_4, _SERVER, SL("CONTENT_LENGTH"), PH_NOISY | PH_READONLY, "phalcon/validation/validator/file.zep", 112 TSRMLS_CC);
149 		_3 = ZEPHIR_GT_LONG(_4, 0);
150 	}
151 	_5 = _3;
152 	if (!(_5)) {
153 		_6 = zephir_array_isset_string(value, SS("error"));
154 		if (_6) {
155 			zephir_array_fetch_string(&_7, value, SL("error"), PH_NOISY | PH_READONLY, "phalcon/validation/validator/file.zep", 112 TSRMLS_CC);
156 			_6 = ZEPHIR_IS_LONG_IDENTICAL(_7, 1);
157 		}
158 		_5 = _6;
159 	}
160 	if (_5) {
161 		ZEPHIR_INIT_VAR(_8$$3);
162 		ZVAL_STRING(_8$$3, "FileIniSize", ZEPHIR_TEMP_PARAM_COPY);
163 		ZEPHIR_INIT_VAR(_9$$3);
164 		ZVAL_STRING(_9$$3, "messageIniSize", ZEPHIR_TEMP_PARAM_COPY);
165 		ZEPHIR_CALL_METHOD(&message, this_ptr, "preparemessage", NULL, 0, validation, field, _8$$3, _9$$3);
166 		zephir_check_temp_parameter(_8$$3);
167 		zephir_check_temp_parameter(_9$$3);
168 		zephir_check_call_status();
169 		ZEPHIR_INIT_VAR(replacePairs);
170 		zephir_create_array(replacePairs, 1, 0 TSRMLS_CC);
171 		zephir_array_update_string(&replacePairs, SL(":field"), &label, PH_COPY | PH_SEPARATE);
172 		ZEPHIR_INIT_NVAR(_8$$3);
173 		object_init_ex(_8$$3, phalcon_validation_message_ce);
174 		ZEPHIR_CALL_FUNCTION(&_10$$3, "strtr", NULL, 27, message, replacePairs);
175 		zephir_check_call_status();
176 		ZEPHIR_INIT_NVAR(_9$$3);
177 		ZVAL_STRING(_9$$3, "FileIniSize", ZEPHIR_TEMP_PARAM_COPY);
178 		ZEPHIR_CALL_METHOD(NULL, _8$$3, "__construct", NULL, 473, _10$$3, field, _9$$3, code);
179 		zephir_check_temp_parameter(_9$$3);
180 		zephir_check_call_status();
181 		ZEPHIR_CALL_METHOD(NULL, validation, "appendmessage", NULL, 0, _8$$3);
182 		zephir_check_call_status();
183 		RETURN_MM_BOOL(0);
184 	}
185 	_11 = !(zephir_array_isset_string(value, SS("error")));
186 	if (!(_11)) {
187 		_11 = !(zephir_array_isset_string(value, SS("tmp_name")));
188 	}
189 	_12 = _11;
190 	if (!(_12)) {
191 		zephir_array_fetch_string(&_13, value, SL("error"), PH_NOISY | PH_READONLY, "phalcon/validation/validator/file.zep", 128 TSRMLS_CC);
192 		_12 = !ZEPHIR_IS_LONG_IDENTICAL(_13, 0);
193 	}
194 	_14 = _12;
195 	if (!(_14)) {
196 		zephir_array_fetch_string(&_15, value, SL("tmp_name"), PH_NOISY | PH_READONLY, "phalcon/validation/validator/file.zep", 128 TSRMLS_CC);
197 		ZEPHIR_CALL_FUNCTION(&_16, "is_uploaded_file", NULL, 258, _15);
198 		zephir_check_call_status();
199 		_14 = !zephir_is_true(_16);
200 	}
201 	if (_14) {
202 		ZEPHIR_INIT_VAR(_17$$4);
203 		ZVAL_STRING(_17$$4, "FileEmpty", ZEPHIR_TEMP_PARAM_COPY);
204 		ZEPHIR_INIT_VAR(_18$$4);
205 		ZVAL_STRING(_18$$4, "messageEmpty", ZEPHIR_TEMP_PARAM_COPY);
206 		ZEPHIR_CALL_METHOD(&message, this_ptr, "preparemessage", NULL, 0, validation, field, _17$$4, _18$$4);
207 		zephir_check_temp_parameter(_17$$4);
208 		zephir_check_temp_parameter(_18$$4);
209 		zephir_check_call_status();
210 		ZEPHIR_INIT_NVAR(replacePairs);
211 		zephir_create_array(replacePairs, 1, 0 TSRMLS_CC);
212 		zephir_array_update_string(&replacePairs, SL(":field"), &label, PH_COPY | PH_SEPARATE);
213 		ZEPHIR_INIT_NVAR(_17$$4);
214 		object_init_ex(_17$$4, phalcon_validation_message_ce);
215 		ZEPHIR_CALL_FUNCTION(&_19$$4, "strtr", NULL, 27, message, replacePairs);
216 		zephir_check_call_status();
217 		ZEPHIR_INIT_NVAR(_18$$4);
218 		ZVAL_STRING(_18$$4, "FileEmpty", ZEPHIR_TEMP_PARAM_COPY);
219 		ZEPHIR_CALL_METHOD(NULL, _17$$4, "__construct", NULL, 473, _19$$4, field, _18$$4, code);
220 		zephir_check_temp_parameter(_18$$4);
221 		zephir_check_call_status();
222 		ZEPHIR_CALL_METHOD(NULL, validation, "appendmessage", NULL, 0, _17$$4);
223 		zephir_check_call_status();
224 		RETURN_MM_BOOL(0);
225 	}
226 	_20 = !(zephir_array_isset_string(value, SS("name")));
227 	if (!(_20)) {
228 		_20 = !(zephir_array_isset_string(value, SS("type")));
229 	}
230 	_21 = _20;
231 	if (!(_21)) {
232 		_21 = !(zephir_array_isset_string(value, SS("size")));
233 	}
234 	if (_21) {
235 		ZEPHIR_INIT_VAR(_22$$5);
236 		ZVAL_STRING(_22$$5, "FileValid", ZEPHIR_TEMP_PARAM_COPY);
237 		ZEPHIR_INIT_VAR(_23$$5);
238 		ZVAL_STRING(_23$$5, "messageValid", ZEPHIR_TEMP_PARAM_COPY);
239 		ZEPHIR_CALL_METHOD(&message, this_ptr, "preparemessage", NULL, 0, validation, field, _22$$5, _23$$5);
240 		zephir_check_temp_parameter(_22$$5);
241 		zephir_check_temp_parameter(_23$$5);
242 		zephir_check_call_status();
243 		ZEPHIR_INIT_NVAR(replacePairs);
244 		zephir_create_array(replacePairs, 1, 0 TSRMLS_CC);
245 		zephir_array_update_string(&replacePairs, SL(":field"), &label, PH_COPY | PH_SEPARATE);
246 		ZEPHIR_INIT_NVAR(_22$$5);
247 		object_init_ex(_22$$5, phalcon_validation_message_ce);
248 		ZEPHIR_CALL_FUNCTION(&_24$$5, "strtr", NULL, 27, message, replacePairs);
249 		zephir_check_call_status();
250 		ZEPHIR_INIT_NVAR(_23$$5);
251 		ZVAL_STRING(_23$$5, "FileValid", ZEPHIR_TEMP_PARAM_COPY);
252 		ZEPHIR_CALL_METHOD(NULL, _22$$5, "__construct", NULL, 473, _24$$5, field, _23$$5, code);
253 		zephir_check_temp_parameter(_23$$5);
254 		zephir_check_call_status();
255 		ZEPHIR_CALL_METHOD(NULL, validation, "appendmessage", NULL, 0, _22$$5);
256 		zephir_check_call_status();
257 		RETURN_MM_BOOL(0);
258 	}
259 	ZEPHIR_INIT_VAR(_26);
260 	ZVAL_STRING(_26, "maxSize", ZEPHIR_TEMP_PARAM_COPY);
261 	ZEPHIR_CALL_METHOD(&_25, this_ptr, "hasoption", NULL, 0, _26);
262 	zephir_check_temp_parameter(_26);
263 	zephir_check_call_status();
264 	if (zephir_is_true(_25)) {
265 		ZEPHIR_INIT_VAR(byteUnits);
266 		zephir_create_array(byteUnits, 9, 0 TSRMLS_CC);
267 		add_assoc_long_ex(byteUnits, SS("B"), 0);
268 		add_assoc_long_ex(byteUnits, SS("K"), 10);
269 		add_assoc_long_ex(byteUnits, SS("M"), 20);
270 		add_assoc_long_ex(byteUnits, SS("G"), 30);
271 		add_assoc_long_ex(byteUnits, SS("T"), 40);
272 		add_assoc_long_ex(byteUnits, SS("KB"), 10);
273 		add_assoc_long_ex(byteUnits, SS("MB"), 20);
274 		add_assoc_long_ex(byteUnits, SS("GB"), 30);
275 		add_assoc_long_ex(byteUnits, SS("TB"), 40);
276 		ZEPHIR_INIT_VAR(_27$$6);
277 		ZVAL_STRING(_27$$6, "maxSize", ZEPHIR_TEMP_PARAM_COPY);
278 		ZEPHIR_CALL_METHOD(&maxSize, this_ptr, "getoption", NULL, 0, _27$$6);
279 		zephir_check_temp_parameter(_27$$6);
280 		zephir_check_call_status();
281 		ZEPHIR_INIT_VAR(matches);
282 		ZVAL_NULL(matches);
283 		ZEPHIR_INIT_VAR(unit);
284 		ZVAL_STRING(unit, "B", 1);
285 		if (Z_TYPE_P(maxSize) == IS_ARRAY) {
286 			zephir_array_fetch(&_28$$7, maxSize, field, PH_NOISY | PH_READONLY, "phalcon/validation/validator/file.zep", 168 TSRMLS_CC);
287 			ZEPHIR_CPY_WRT(maxSize, _28$$7);
288 		}
289 		ZEPHIR_INIT_NVAR(_27$$6);
290 		ZEPHIR_INIT_VAR(_29$$6);
291 		ZEPHIR_INIT_VAR(_30$$6);
292 		zephir_array_keys(_30$$6, byteUnits TSRMLS_CC);
293 		zephir_fast_join_str(_29$$6, SL("|"), _30$$6 TSRMLS_CC);
294 		ZEPHIR_INIT_VAR(_31$$6);
295 		ZEPHIR_CONCAT_SVS(_31$$6, "/^([0-9]+(?:\\.[0-9]+)?)(", _29$$6, ")?$/Di");
296 		zephir_preg_match(_27$$6, _31$$6, maxSize, matches, 0, 0 , 0  TSRMLS_CC);
297 		if (zephir_array_isset_long(matches, 2)) {
298 			ZEPHIR_OBS_NVAR(unit);
299 			zephir_array_fetch_long(&unit, matches, 2, PH_NOISY, "phalcon/validation/validator/file.zep", 174 TSRMLS_CC);
300 		}
301 		zephir_array_fetch_long(&_32$$6, matches, 1, PH_NOISY | PH_READONLY, "phalcon/validation/validator/file.zep", 177 TSRMLS_CC);
302 		ZEPHIR_CALL_FUNCTION(&_33$$6, "floatval", NULL, 335, _32$$6);
303 		zephir_check_call_status();
304 		ZEPHIR_INIT_VAR(_34$$6);
305 		zephir_array_fetch(&_35$$6, byteUnits, unit, PH_NOISY | PH_READONLY, "phalcon/validation/validator/file.zep", 177 TSRMLS_CC);
306 		ZEPHIR_SINIT_VAR(_36$$6);
307 		ZVAL_LONG(&_36$$6, 2);
308 		zephir_pow_function(_34$$6, &_36$$6, _35$$6);
309 		ZEPHIR_INIT_VAR(bytes);
310 		mul_function(bytes, _33$$6, _34$$6 TSRMLS_CC);
311 		zephir_array_fetch_string(&_37$$6, value, SL("size"), PH_NOISY | PH_READONLY, "phalcon/validation/validator/file.zep", 179 TSRMLS_CC);
312 		ZEPHIR_CALL_FUNCTION(&_33$$6, "floatval", NULL, 335, _37$$6);
313 		zephir_check_call_status();
314 		ZEPHIR_CALL_FUNCTION(&_38$$6, "floatval", NULL, 335, bytes);
315 		zephir_check_call_status();
316 		if (ZEPHIR_GT(_33$$6, _38$$6)) {
317 			ZEPHIR_INIT_VAR(_39$$9);
318 			ZVAL_STRING(_39$$9, "FileSize", ZEPHIR_TEMP_PARAM_COPY);
319 			ZEPHIR_INIT_VAR(_40$$9);
320 			ZVAL_STRING(_40$$9, "messageSize", ZEPHIR_TEMP_PARAM_COPY);
321 			ZEPHIR_CALL_METHOD(&message, this_ptr, "preparemessage", NULL, 0, validation, field, _39$$9, _40$$9);
322 			zephir_check_temp_parameter(_39$$9);
323 			zephir_check_temp_parameter(_40$$9);
324 			zephir_check_call_status();
325 			ZEPHIR_INIT_NVAR(replacePairs);
326 			zephir_create_array(replacePairs, 2, 0 TSRMLS_CC);
327 			zephir_array_update_string(&replacePairs, SL(":field"), &label, PH_COPY | PH_SEPARATE);
328 			zephir_array_update_string(&replacePairs, SL(":max"), &maxSize, PH_COPY | PH_SEPARATE);
329 			ZEPHIR_INIT_NVAR(_39$$9);
330 			object_init_ex(_39$$9, phalcon_validation_message_ce);
331 			ZEPHIR_CALL_FUNCTION(&_41$$9, "strtr", NULL, 27, message, replacePairs);
332 			zephir_check_call_status();
333 			ZEPHIR_INIT_NVAR(_40$$9);
334 			ZVAL_STRING(_40$$9, "FileSize", ZEPHIR_TEMP_PARAM_COPY);
335 			ZEPHIR_CALL_METHOD(NULL, _39$$9, "__construct", NULL, 473, _41$$9, field, _40$$9, code);
336 			zephir_check_temp_parameter(_40$$9);
337 			zephir_check_call_status();
338 			ZEPHIR_CALL_METHOD(NULL, validation, "appendmessage", NULL, 0, _39$$9);
339 			zephir_check_call_status();
340 			RETURN_MM_BOOL(0);
341 		}
342 	}
343 	ZEPHIR_INIT_NVAR(_26);
344 	ZVAL_STRING(_26, "allowedTypes", ZEPHIR_TEMP_PARAM_COPY);
345 	ZEPHIR_CALL_METHOD(&_42, this_ptr, "hasoption", NULL, 0, _26);
346 	zephir_check_temp_parameter(_26);
347 	zephir_check_call_status();
348 	if (zephir_is_true(_42)) {
349 		ZEPHIR_INIT_VAR(_43$$10);
350 		ZVAL_STRING(_43$$10, "allowedTypes", ZEPHIR_TEMP_PARAM_COPY);
351 		ZEPHIR_CALL_METHOD(&types, this_ptr, "getoption", NULL, 0, _43$$10);
352 		zephir_check_temp_parameter(_43$$10);
353 		zephir_check_call_status();
354 		ZEPHIR_OBS_VAR(fieldTypes);
355 		if (zephir_array_isset_fetch(&fieldTypes, types, field, 0 TSRMLS_CC)) {
356 			ZEPHIR_CPY_WRT(types, fieldTypes);
357 		}
358 		if (Z_TYPE_P(types) != IS_ARRAY) {
359 			ZEPHIR_THROW_EXCEPTION_DEBUG_STR(phalcon_validation_exception_ce, "Option 'allowedTypes' must be an array", "phalcon/validation/validator/file.zep", 205);
360 			return;
361 		}
362 		if ((zephir_function_exists_ex(SS("finfo_open") TSRMLS_CC) == SUCCESS)) {
363 			ZEPHIR_SINIT_VAR(_44$$13);
364 			ZVAL_LONG(&_44$$13, 16);
365 			ZEPHIR_CALL_FUNCTION(&tmp, "finfo_open", NULL, 255, &_44$$13);
366 			zephir_check_call_status();
367 			zephir_array_fetch_string(&_45$$13, value, SL("tmp_name"), PH_NOISY | PH_READONLY, "phalcon/validation/validator/file.zep", 210 TSRMLS_CC);
368 			ZEPHIR_CALL_FUNCTION(&mime, "finfo_file", NULL, 256, tmp, _45$$13);
369 			zephir_check_call_status();
370 			ZEPHIR_CALL_FUNCTION(NULL, "finfo_close", NULL, 257, tmp);
371 			zephir_check_call_status();
372 		} else {
373 			ZEPHIR_OBS_NVAR(mime);
374 			zephir_array_fetch_string(&mime, value, SL("type"), PH_NOISY, "phalcon/validation/validator/file.zep", 214 TSRMLS_CC);
375 		}
376 		if (!(zephir_fast_in_array(mime, types TSRMLS_CC))) {
377 			ZEPHIR_INIT_VAR(_46$$15);
378 			ZVAL_STRING(_46$$15, "FileType", ZEPHIR_TEMP_PARAM_COPY);
379 			ZEPHIR_INIT_VAR(_47$$15);
380 			ZVAL_STRING(_47$$15, "messageType", ZEPHIR_TEMP_PARAM_COPY);
381 			ZEPHIR_CALL_METHOD(&message, this_ptr, "preparemessage", NULL, 0, validation, field, _46$$15, _47$$15);
382 			zephir_check_temp_parameter(_46$$15);
383 			zephir_check_temp_parameter(_47$$15);
384 			zephir_check_call_status();
385 			ZEPHIR_INIT_NVAR(replacePairs);
386 			zephir_create_array(replacePairs, 2, 0 TSRMLS_CC);
387 			zephir_array_update_string(&replacePairs, SL(":field"), &label, PH_COPY | PH_SEPARATE);
388 			ZEPHIR_INIT_NVAR(_46$$15);
389 			zephir_fast_join_str(_46$$15, SL(", "), types TSRMLS_CC);
390 			zephir_array_update_string(&replacePairs, SL(":types"), &_46$$15, PH_COPY | PH_SEPARATE);
391 			ZEPHIR_INIT_NVAR(_46$$15);
392 			object_init_ex(_46$$15, phalcon_validation_message_ce);
393 			ZEPHIR_CALL_FUNCTION(&_48$$15, "strtr", NULL, 27, message, replacePairs);
394 			zephir_check_call_status();
395 			ZEPHIR_INIT_NVAR(_47$$15);
396 			ZVAL_STRING(_47$$15, "FileType", ZEPHIR_TEMP_PARAM_COPY);
397 			ZEPHIR_CALL_METHOD(NULL, _46$$15, "__construct", NULL, 473, _48$$15, field, _47$$15, code);
398 			zephir_check_temp_parameter(_47$$15);
399 			zephir_check_call_status();
400 			ZEPHIR_CALL_METHOD(NULL, validation, "appendmessage", NULL, 0, _46$$15);
401 			zephir_check_call_status();
402 			RETURN_MM_BOOL(0);
403 		}
404 	}
405 	ZEPHIR_INIT_NVAR(_26);
406 	ZVAL_STRING(_26, "minResolution", ZEPHIR_TEMP_PARAM_COPY);
407 	ZEPHIR_CALL_METHOD(&_49, this_ptr, "hasoption", NULL, 0, _26);
408 	zephir_check_temp_parameter(_26);
409 	zephir_check_call_status();
410 	_50 = zephir_is_true(_49);
411 	if (!(_50)) {
412 		ZEPHIR_INIT_NVAR(_26);
413 		ZVAL_STRING(_26, "maxResolution", ZEPHIR_TEMP_PARAM_COPY);
414 		ZEPHIR_CALL_METHOD(&_51, this_ptr, "hasoption", NULL, 0, _26);
415 		zephir_check_temp_parameter(_26);
416 		zephir_check_call_status();
417 		_50 = zephir_is_true(_51);
418 	}
419 	if (_50) {
420 		zephir_array_fetch_string(&_52$$16, value, SL("tmp_name"), PH_NOISY | PH_READONLY, "phalcon/validation/validator/file.zep", 235 TSRMLS_CC);
421 		ZEPHIR_CALL_FUNCTION(&tmp, "getimagesize", NULL, 266, _52$$16);
422 		zephir_check_call_status();
423 		ZEPHIR_OBS_VAR(width);
424 		zephir_array_fetch_long(&width, tmp, 0, PH_NOISY, "phalcon/validation/validator/file.zep", 236 TSRMLS_CC);
425 		ZEPHIR_OBS_VAR(height);
426 		zephir_array_fetch_long(&height, tmp, 1, PH_NOISY, "phalcon/validation/validator/file.zep", 237 TSRMLS_CC);
427 		ZEPHIR_INIT_VAR(_54$$16);
428 		ZVAL_STRING(_54$$16, "minResolution", ZEPHIR_TEMP_PARAM_COPY);
429 		ZEPHIR_CALL_METHOD(&_53$$16, this_ptr, "hasoption", NULL, 0, _54$$16);
430 		zephir_check_temp_parameter(_54$$16);
431 		zephir_check_call_status();
432 		if (zephir_is_true(_53$$16)) {
433 			ZEPHIR_INIT_VAR(_55$$17);
434 			ZVAL_STRING(_55$$17, "minResolution", ZEPHIR_TEMP_PARAM_COPY);
435 			ZEPHIR_CALL_METHOD(&minResolution, this_ptr, "getoption", NULL, 0, _55$$17);
436 			zephir_check_temp_parameter(_55$$17);
437 			zephir_check_call_status();
438 			if (Z_TYPE_P(minResolution) == IS_ARRAY) {
439 				zephir_array_fetch(&_56$$18, minResolution, field, PH_NOISY | PH_READONLY, "phalcon/validation/validator/file.zep", 242 TSRMLS_CC);
440 				ZEPHIR_CPY_WRT(minResolution, _56$$18);
441 			}
442 			ZEPHIR_INIT_VAR(minResolutionArray);
443 			zephir_fast_explode_str(minResolutionArray, SL("x"), minResolution, LONG_MAX TSRMLS_CC);
444 			ZEPHIR_OBS_VAR(minWidth);
445 			zephir_array_fetch_long(&minWidth, minResolutionArray, 0, PH_NOISY, "phalcon/validation/validator/file.zep", 245 TSRMLS_CC);
446 			ZEPHIR_OBS_VAR(minHeight);
447 			zephir_array_fetch_long(&minHeight, minResolutionArray, 1, PH_NOISY, "phalcon/validation/validator/file.zep", 246 TSRMLS_CC);
448 		} else {
449 			ZEPHIR_INIT_NVAR(minWidth);
450 			ZVAL_LONG(minWidth, 1);
451 			ZEPHIR_INIT_NVAR(minHeight);
452 			ZVAL_LONG(minHeight, 1);
453 		}
454 		_57$$16 = ZEPHIR_LT(width, minWidth);
455 		if (!(_57$$16)) {
456 			_57$$16 = ZEPHIR_LT(height, minHeight);
457 		}
458 		if (_57$$16) {
459 			ZEPHIR_INIT_VAR(_58$$20);
460 			ZVAL_STRING(_58$$20, "FileMinResolution", ZEPHIR_TEMP_PARAM_COPY);
461 			ZEPHIR_INIT_VAR(_59$$20);
462 			ZVAL_STRING(_59$$20, "messageMinResolution", ZEPHIR_TEMP_PARAM_COPY);
463 			ZEPHIR_CALL_METHOD(&message, this_ptr, "preparemessage", NULL, 0, validation, field, _58$$20, _59$$20);
464 			zephir_check_temp_parameter(_58$$20);
465 			zephir_check_temp_parameter(_59$$20);
466 			zephir_check_call_status();
467 			ZEPHIR_INIT_NVAR(replacePairs);
468 			zephir_create_array(replacePairs, 2, 0 TSRMLS_CC);
469 			zephir_array_update_string(&replacePairs, SL(":field"), &label, PH_COPY | PH_SEPARATE);
470 			zephir_array_update_string(&replacePairs, SL(":min"), &minResolution, PH_COPY | PH_SEPARATE);
471 			ZEPHIR_INIT_NVAR(_58$$20);
472 			object_init_ex(_58$$20, phalcon_validation_message_ce);
473 			ZEPHIR_CALL_FUNCTION(&_60$$20, "strtr", NULL, 27, message, replacePairs);
474 			zephir_check_call_status();
475 			ZEPHIR_INIT_NVAR(_59$$20);
476 			ZVAL_STRING(_59$$20, "FileMinResolution", ZEPHIR_TEMP_PARAM_COPY);
477 			ZEPHIR_CALL_METHOD(NULL, _58$$20, "__construct", NULL, 473, _60$$20, field, _59$$20, code);
478 			zephir_check_temp_parameter(_59$$20);
479 			zephir_check_call_status();
480 			ZEPHIR_CALL_METHOD(NULL, validation, "appendmessage", NULL, 0, _58$$20);
481 			zephir_check_call_status();
482 			RETURN_MM_BOOL(0);
483 		}
484 		ZEPHIR_INIT_NVAR(_54$$16);
485 		ZVAL_STRING(_54$$16, "maxResolution", ZEPHIR_TEMP_PARAM_COPY);
486 		ZEPHIR_CALL_METHOD(&_61$$16, this_ptr, "hasoption", NULL, 0, _54$$16);
487 		zephir_check_temp_parameter(_54$$16);
488 		zephir_check_call_status();
489 		if (zephir_is_true(_61$$16)) {
490 			ZEPHIR_INIT_VAR(_62$$21);
491 			ZVAL_STRING(_62$$21, "maxResolution", ZEPHIR_TEMP_PARAM_COPY);
492 			ZEPHIR_CALL_METHOD(&maxResolution, this_ptr, "getoption", NULL, 0, _62$$21);
493 			zephir_check_temp_parameter(_62$$21);
494 			zephir_check_call_status();
495 			if (Z_TYPE_P(maxResolution) == IS_ARRAY) {
496 				zephir_array_fetch(&_63$$22, maxResolution, field, PH_NOISY | PH_READONLY, "phalcon/validation/validator/file.zep", 272 TSRMLS_CC);
497 				ZEPHIR_CPY_WRT(maxResolution, _63$$22);
498 			}
499 			ZEPHIR_INIT_VAR(maxResolutionArray);
500 			zephir_fast_explode_str(maxResolutionArray, SL("x"), maxResolution, LONG_MAX TSRMLS_CC);
501 			ZEPHIR_OBS_VAR(maxWidth);
502 			zephir_array_fetch_long(&maxWidth, maxResolutionArray, 0, PH_NOISY, "phalcon/validation/validator/file.zep", 275 TSRMLS_CC);
503 			ZEPHIR_OBS_VAR(maxHeight);
504 			zephir_array_fetch_long(&maxHeight, maxResolutionArray, 1, PH_NOISY, "phalcon/validation/validator/file.zep", 276 TSRMLS_CC);
505 			_64$$21 = ZEPHIR_GT(width, maxWidth);
506 			if (!(_64$$21)) {
507 				_64$$21 = ZEPHIR_GT(height, maxHeight);
508 			}
509 			if (_64$$21) {
510 				ZEPHIR_INIT_VAR(_65$$23);
511 				ZVAL_STRING(_65$$23, "FileMaxResolution", ZEPHIR_TEMP_PARAM_COPY);
512 				ZEPHIR_INIT_VAR(_66$$23);
513 				ZVAL_STRING(_66$$23, "messageMaxResolution", ZEPHIR_TEMP_PARAM_COPY);
514 				ZEPHIR_CALL_METHOD(&message, this_ptr, "preparemessage", NULL, 0, validation, field, _65$$23, _66$$23);
515 				zephir_check_temp_parameter(_65$$23);
516 				zephir_check_temp_parameter(_66$$23);
517 				zephir_check_call_status();
518 				ZEPHIR_INIT_NVAR(replacePairs);
519 				zephir_create_array(replacePairs, 2, 0 TSRMLS_CC);
520 				zephir_array_update_string(&replacePairs, SL(":field"), &label, PH_COPY | PH_SEPARATE);
521 				zephir_array_update_string(&replacePairs, SL(":max"), &maxResolution, PH_COPY | PH_SEPARATE);
522 				ZEPHIR_INIT_NVAR(_65$$23);
523 				object_init_ex(_65$$23, phalcon_validation_message_ce);
524 				ZEPHIR_CALL_FUNCTION(&_67$$23, "strtr", NULL, 27, message, replacePairs);
525 				zephir_check_call_status();
526 				ZEPHIR_INIT_NVAR(_66$$23);
527 				ZVAL_STRING(_66$$23, "FileMaxResolution", ZEPHIR_TEMP_PARAM_COPY);
528 				ZEPHIR_CALL_METHOD(NULL, _65$$23, "__construct", NULL, 473, _67$$23, field, _66$$23, code);
529 				zephir_check_temp_parameter(_66$$23);
530 				zephir_check_call_status();
531 				ZEPHIR_CALL_METHOD(NULL, validation, "appendmessage", NULL, 0, _65$$23);
532 				zephir_check_call_status();
533 				RETURN_MM_BOOL(0);
534 			}
535 		}
536 	}
537 	RETURN_MM_BOOL(1);
538 
539 }
540 
541 /**
542  * Check on empty
543  */
PHP_METHOD(Phalcon_Validation_Validator_File,isAllowEmpty)544 PHP_METHOD(Phalcon_Validation_Validator_File, isAllowEmpty) {
545 
546 	zend_bool _0, _1;
547 	zend_long ZEPHIR_LAST_CALL_STATUS;
548 	zval *field = NULL;
549 	zval *validation, *field_param = NULL, *value = NULL, *_2;
550 
551 	ZEPHIR_MM_GROW();
552 	zephir_fetch_params(1, 2, 0, &validation, &field_param);
553 
554 	if (UNEXPECTED(Z_TYPE_P(field_param) != IS_STRING && Z_TYPE_P(field_param) != IS_NULL)) {
555 		zephir_throw_exception_string(spl_ce_InvalidArgumentException, SL("Parameter 'field' must be a string") TSRMLS_CC);
556 		RETURN_MM_NULL();
557 	}
558 	if (EXPECTED(Z_TYPE_P(field_param) == IS_STRING)) {
559 		zephir_get_strval(field, field_param);
560 	} else {
561 		ZEPHIR_INIT_VAR(field);
562 		ZVAL_EMPTY_STRING(field);
563 	}
564 
565 
566 	ZEPHIR_CALL_METHOD(&value, validation, "getvalue", NULL, 0, field);
567 	zephir_check_call_status();
568 	_0 = ZEPHIR_IS_EMPTY(value);
569 	if (!(_0)) {
570 		_1 = zephir_array_isset_string(value, SS("error"));
571 		if (_1) {
572 			zephir_array_fetch_string(&_2, value, SL("error"), PH_NOISY | PH_READONLY, "phalcon/validation/validator/file.zep", 308 TSRMLS_CC);
573 			_1 = ZEPHIR_IS_LONG_IDENTICAL(_2, 4);
574 		}
575 		_0 = _1;
576 	}
577 	RETURN_MM_BOOL(_0);
578 
579 }
580 
581