PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.16.2
GiveWP – Donation Plugin and Fundraising Platform v3.16.2
4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / Form / LegacyConsumer / Validators / FileUploadValidator.php
give / src / Form / LegacyConsumer / Validators Last commit date
FileUploadValidator.php 4 years ago
FileUploadValidator.php
127 lines
1 <?php
2
3 namespace Give\Form\LegacyConsumer\Validators;
4
5 use Give\Form\LegacyConsumer\Traits\HasFilesArray;
6 use Give\Framework\FieldsAPI\File;
7
8 use function _n;
9 use function esc_html__;
10 use function give_set_error;
11 use function size_format;
12
13 /**
14 * @package Give\Form\LegacyConsumer\Validators
15 * @since 2.14.0
16 */
17 class FileUploadValidator
18 {
19 use HasFilesArray;
20
21 /**
22 * @var array
23 */
24 private $files;
25 /**
26 * @var File
27 */
28 private $field;
29 /**
30 * @var int
31 */
32 private $uploadSize;
33 /**
34 * @var array
35 */
36 private $uploadedTypes;
37
38 /**
39 * @since 2.14.0
40 */
41 public function __construct(File $field)
42 {
43 $this->field = $field;
44 $this->files = $this->getFiles();
45
46 foreach ($this->files as $file) {
47 $this->uploadSize += $file['size'];
48 $this->uploadedTypes[] = $file['type'];
49 }
50 }
51
52 /**
53 * @since 2.14.0
54 */
55 public function __invoke()
56 {
57 if ( ! $this->files) {
58 $this->validateRequired();
59
60 return;
61 }
62
63 $this->validateUploadTypes();
64 $this->validateUploadSize();
65 }
66
67 /**
68 * @since 2.14.0
69 */
70 private function validateRequired()
71 {
72 if ($this->field->isRequired()) {
73 give_set_error(
74 "give-{$this->field->getName()}-required-field-missing",
75 $this->field->getRequiredError()['error_message']
76 );
77 }
78 }
79
80 /**
81 * @since 2.14.0
82 */
83 private function validateUploadTypes()
84 {
85 $allowedTypes = $this->field->getAllowedTypes();
86
87 if (array_diff($this->uploadedTypes, $allowedTypes)) {
88 give_set_error(
89 'field-api-file-upload-allowed-type-error',
90 sprintf(
91 esc_html__('Unable to upload file. Allowed file %1$s: %2$s', 'give'),
92 _n('type', 'types', count($allowedTypes), 'give'),
93 array_reduce(
94 array_keys($allowedTypes),
95 function ($initial, $fileType) {
96 $separator = $initial ? ', ' : '';
97 $initial .= $separator . str_replace('|', ', ', $fileType);
98
99 return $initial;
100 },
101 ''
102 )
103 )
104 );
105 }
106 }
107
108 /**
109 * @since 2.14.0
110 * @since 2.16.0 File size unit update to bytes from mega bytes in logic to get precise result.
111 */
112 private function validateUploadSize()
113 {
114 $allowedFileSize = $this->field->getMaxSize();
115
116 if ($allowedFileSize < $this->uploadSize) {
117 give_set_error(
118 'field-api-file-upload-size-error',
119 sprintf(
120 esc_html__('File size exceed upload limit. Maximum file limit is %s', 'give'),
121 size_format($allowedFileSize)
122 )
123 );
124 }
125 }
126 }
127