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