Skip to content

Commit

Permalink
Validator: do not require UploadControl instance for file upload rela…
Browse files Browse the repository at this point in the history
…ted validations
  • Loading branch information
xificurk committed Apr 10, 2020
1 parent b55d3c2 commit 7d534d8
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 3 deletions.
9 changes: 6 additions & 3 deletions src/Forms/Validator.php
Original file line number Diff line number Diff line change
Expand Up @@ -323,9 +323,10 @@ public static function validateFloat(IControl $control): bool
/**
* Is file size in limit?
*/
public static function validateFileSize(Controls\UploadControl $control, $limit): bool
public static function validateFileSize(IControl $control, $limit): bool
{
foreach (static::toArray($control->getValue()) as $file) {
Validators::assert($file, Nette\Http\FileUpload::class, 'control value');
if ($file->getSize() > $limit || $file->getError() === UPLOAD_ERR_INI_SIZE) {
return false;
}
Expand All @@ -338,10 +339,11 @@ public static function validateFileSize(Controls\UploadControl $control, $limit)
* Has file specified mime type?
* @param string|string[] $mimeType
*/
public static function validateMimeType(Controls\UploadControl $control, $mimeType): bool
public static function validateMimeType(IControl $control, $mimeType): bool
{
$mimeTypes = is_array($mimeType) ? $mimeType : explode(',', $mimeType);
foreach (static::toArray($control->getValue()) as $file) {
Validators::assert($file, Nette\Http\FileUpload::class, 'control value');
$type = strtolower($file->getContentType());
if (!in_array($type, $mimeTypes, true) && !in_array(preg_replace('#/.*#', '/*', $type), $mimeTypes, true)) {
return false;
Expand All @@ -354,9 +356,10 @@ public static function validateMimeType(Controls\UploadControl $control, $mimeTy
/**
* Is file image?
*/
public static function validateImage(Controls\UploadControl $control): bool
public static function validateImage(IControl $control): bool
{
foreach (static::toArray($control->getValue()) as $file) {
Validators::assert($file, Nette\Http\FileUpload::class, 'control value');
if (!$file->isImage()) {
return false;
}
Expand Down
24 changes: 24 additions & 0 deletions tests/Forms/Validator.customControl.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ declare(strict_types=1);

use Nette\Forms\Form;
use Nette\Forms\Validator;
use Nette\Http\FileUpload;
use Tester\Assert;


Expand Down Expand Up @@ -74,3 +75,26 @@ test(function () { // filled, blank
Assert::true(Validator::validateFilled($input));
Assert::false(Validator::validateBlank($input));
});


test(function () { // file upload related validators
$input = new CustomControl(new FileUpload([
'name' => 'foo',
'size' => 1,
'tmp_name' => __FILE__,
'error' => UPLOAD_ERR_OK
]));
Assert::true(Validator::validateFileSize($input, 42));
Assert::true(Validator::validateMimeType($input, ['text/x-php']));
Assert::false(Validator::validateImage($input));

$input = new CustomControl(new FileUpload([
'name' => 'foo',
'size' => 100,
'tmp_name' => __DIR__ . '/files/logo.gif',
'error' => UPLOAD_ERR_OK
]));
Assert::false(Validator::validateFileSize($input, 42));
Assert::false(Validator::validateMimeType($input, ['text/x-php']));
Assert::true(Validator::validateImage($input));
});

0 comments on commit 7d534d8

Please sign in to comment.