PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.18.0
GiveWP – Donation Plugin and Fundraising Platform v3.18.0
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 / Framework / ValidationRules / Rules / File.php
give / src / Framework / ValidationRules / Rules Last commit date
AllowedTypes.php 3 years ago File.php 2 years ago
File.php
120 lines
1 <?php
2 declare(strict_types=1);
3
4 namespace Give\Framework\ValidationRules\Rules;
5
6 use Closure;
7 use Give\Framework\Http\Types\UploadedFile;
8 use Give\Vendors\StellarWP\Validation\Contracts\ValidatesOnFrontEnd;
9 use Give\Vendors\StellarWP\Validation\Contracts\ValidationRule;
10
11 /**
12 * @since 2.32.0
13 */
14 class File implements ValidationRule, ValidatesOnFrontEnd
15 {
16 /**
17 * The size, in bytes, of the uploaded file
18 *
19 * @var int
20 */
21 protected $maxSize;
22
23 /**
24 * @var string[]
25 */
26 protected $allowedMimeTypes;
27
28 /**
29 * @since 2.32.0
30 */
31 public static function id(): string
32 {
33 return 'file';
34 }
35
36 /**
37 * @since 2.32.0
38 */
39 public function maxSize(int $maxSize): ValidationRule
40 {
41 $this->maxSize = $maxSize;
42
43 return $this;
44 }
45
46 /**
47 * @since 2.32.0
48 */
49 public function getMaxSize(): int
50 {
51 return $this->maxSize ?? wp_max_upload_size();
52 }
53
54 /**
55 * @since 2.32.0
56 */
57 public function allowedMimeTypes(array $allowedMimeTypes): ValidationRule
58 {
59 $this->allowedMimeTypes = $allowedMimeTypes;
60
61 return $this;
62 }
63
64 /**
65 * @since 2.32.0
66 *
67 * @return string[]
68 */
69 public function getAllowedMimeTypes(): array
70 {
71 return $this->allowedMimeTypes ?? get_allowed_mime_types();
72 }
73
74 /**
75 * @since 2.32.0
76 **/
77 public function __invoke($value, Closure $fail, string $key, array $values)
78 {
79 try {
80 $file = UploadedFile::fromArray($value);
81
82 if (!$file->isUploadedFile()) {
83 $fail(sprintf(__('%s must be a valid file.', 'give'), '{field}'));
84 }
85
86 // check against both the allowed mime types defined by the file rule and the server
87 if (!in_array($file->getMimeType(), $this->getAllowedMimeTypes(), true) ||
88 !in_array($file->getMimeType(), get_allowed_mime_types(), true)) {
89 $fail(sprintf(__('%s must be a valid file type.', 'give'), '{field}'));
90 }
91
92 // check against both the max upload size defined by the file rule and the server
93 if ($file->getSize() > $this->getMaxSize() || $file->getSize() > wp_max_upload_size()) {
94 $fail(
95 sprintf(__('%s must be less than or equal to %d bytes.', 'give'), '{field}', $this->getMaxSize())
96 );
97 }
98
99 if ($file->getError() !== UPLOAD_ERR_OK) {
100 $fail(sprintf(__('%s must be a valid file.', 'give'), '{field}'));
101 }
102 } catch (\Throwable $e) {
103 $fail($e->getMessage());
104 }
105 }
106
107 /**
108 * @since 2.32.0
109 */
110 public static function fromString(string $options = null): ValidationRule
111 {
112 return new self();
113 }
114
115 public function serializeOption()
116 {
117 return null;
118 }
119 }
120