PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 4.16.8.1
GiveWP – Donation Plugin and Fundraising Platform v4.16.8.1
4.16.9 4.16.8.1 4.16.8 4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 4.16.3 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 All 255 releases
give / src / Form / LegacyConsumer / Validators / FileUploadValidator.php

FileUploadValidator.php in GiveWP – Donation Plugin and Fundraising Platform 4.16.8.1, at src/Form/LegacyConsumer/Validators/FileUploadValidator.php

127 lines 3.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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