maxSize = $maxSize; return $this; } /** * @since 2.32.0 */ public function getMaxSize(): int { return $this->maxSize ?? wp_max_upload_size(); } /** * @since 2.32.0 */ public function allowedMimeTypes(array $allowedMimeTypes): ValidationRule { $this->allowedMimeTypes = $allowedMimeTypes; return $this; } /** * @since 2.32.0 * * @return string[] */ public function getAllowedMimeTypes(): array { return $this->allowedMimeTypes ?? get_allowed_mime_types(); } /** * @since 2.32.0 **/ public function __invoke($value, Closure $fail, string $key, array $values) { try { $file = UploadedFile::fromArray($value); if (!$file->isUploadedFile()) { $fail(sprintf(__('%s must be a valid file.', 'give'), '{field}')); } // check against both the allowed mime types defined by the file rule and the server if (!in_array($file->getMimeType(), $this->getAllowedMimeTypes(), true) || !in_array($file->getMimeType(), get_allowed_mime_types(), true)) { $fail(sprintf(__('%s must be a valid file type.', 'give'), '{field}')); } // check against both the max upload size defined by the file rule and the server if ($file->getSize() > $this->getMaxSize() || $file->getSize() > wp_max_upload_size()) { $fail( sprintf(__('%s must be less than or equal to %d bytes.', 'give'), '{field}', $this->getMaxSize()) ); } if ($file->getError() !== UPLOAD_ERR_OK) { $fail(sprintf(__('%s must be a valid file.', 'give'), '{field}')); } } catch (\Throwable $e) { $fail($e->getMessage()); } } /** * @since 2.32.0 */ public static function fromString(string $options = null): ValidationRule { return new self(); } public function serializeOption() { return null; } }