File: /var/www/html/wpmuhibbah_err/wp-content/plugins/give/src/Framework/ValidationRules/Rules/File.php
<?php
declare(strict_types=1);
namespace Give\Framework\ValidationRules\Rules;
use Closure;
use Give\Framework\Http\Types\UploadedFile;
use Give\Vendors\StellarWP\Validation\Contracts\ValidatesOnFrontEnd;
use Give\Vendors\StellarWP\Validation\Contracts\ValidationRule;
/**
* @since 2.32.0
*/
class File implements ValidationRule, ValidatesOnFrontEnd
{
/**
* The size, in bytes, of the uploaded file
*
* @var int
*/
protected $maxSize;
/**
* @var string[]
*/
protected $allowedMimeTypes;
/**
* @since 2.32.0
*/
public static function id(): string
{
return 'file';
}
/**
* @since 2.32.0
*/
public function maxSize(int $maxSize): ValidationRule
{
$this->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;
}
}