forked from yiisoft/yii2
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
211 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,209 @@ | ||
<?php | ||
/** | ||
* Image validator class file. | ||
* | ||
* @link http://www.yiiframework.com/ | ||
* @copyright Copyright (c) 2008 Yii Software LLC | ||
* @license http://www.yiiframework.com/license/ | ||
*/ | ||
|
||
namespace yii\validators; | ||
|
||
use Yii; | ||
use yii\web\UploadedFile; | ||
use yii\helpers\FileHelper; | ||
|
||
/** | ||
* ImageValidator verifies if an attribute is receiving a valid image. | ||
* | ||
* @author Taras Gudz <[email protected]> | ||
* @since 2.0 | ||
*/ | ||
class ImageValidator extends FileValidator | ||
{ | ||
/** | ||
* @var string the error message used when the uploaded file is not an image. | ||
* You may use the following tokens in the message: | ||
* | ||
* - {attribute}: the attribute name | ||
* - {file}: the uploaded file name | ||
*/ | ||
public $notImage; | ||
/** | ||
* @var integer the minimum width in pixels. | ||
* Defaults to null, meaning no limit. | ||
* @see underWidth | ||
*/ | ||
public $minWidth; | ||
/** | ||
* @var integer the maximum width in pixels. | ||
* Defaults to null, meaning no limit. | ||
* @see overWidth | ||
*/ | ||
public $maxWidth; | ||
/** | ||
* @var integer the minimum height in pixels. | ||
* Defaults to null, meaning no limit. | ||
* @see underHeight | ||
*/ | ||
public $minHeight; | ||
/** | ||
* @var integer the maximum width in pixels. | ||
* Defaults to null, meaning no limit. | ||
* @see overWidth | ||
*/ | ||
public $maxHeight; | ||
/** | ||
* @var array|string a list of file mime types that are allowed to be uploaded. | ||
* This can be either an array or a string consisting of file mime types | ||
* separated by space or comma (e.g. "image/jpeg, image/png"). | ||
* Mime type names are case-insensitive. Defaults to null, meaning all mime types | ||
* are allowed. | ||
* @see wrongMimeType | ||
*/ | ||
public $mimeTypes; | ||
/** | ||
* @var string the error message used when the image is under [[minWidth]]. | ||
* You may use the following tokens in the message: | ||
* | ||
* - {attribute}: the attribute name | ||
* - {file}: the uploaded file name | ||
* - {limit}: the value of [[minWidth]] | ||
*/ | ||
public $underWidth; | ||
/** | ||
* @var string the error message used when the image is over [[maxWidth]]. | ||
* You may use the following tokens in the message: | ||
* | ||
* - {attribute}: the attribute name | ||
* - {file}: the uploaded file name | ||
* - {limit}: the value of [[maxWidth]] | ||
*/ | ||
public $overWidth; | ||
/** | ||
* @var string the error message used when the image is under [[minHeight]]. | ||
* You may use the following tokens in the message: | ||
* | ||
* - {attribute}: the attribute name | ||
* - {file}: the uploaded file name | ||
* - {limit}: the value of [[minHeight]] | ||
*/ | ||
public $underHeight; | ||
/** | ||
* @var string the error message used when the image is over [[maxHeight]]. | ||
* You may use the following tokens in the message: | ||
* | ||
* - {attribute}: the attribute name | ||
* - {file}: the uploaded file name | ||
* - {limit}: the value of [[maxHeight]] | ||
*/ | ||
public $overHeight; | ||
/** | ||
* @var string the error message used when the file has an mime type | ||
* that is not listed in [[mimeTypes]]. | ||
* You may use the following tokens in the message: | ||
* | ||
* - {attribute}: the attribute name | ||
* - {file}: the uploaded file name | ||
* - {mimeTypes}: the value of [[mimeTypes]] | ||
*/ | ||
public $wrongMimeType; | ||
|
||
/** | ||
* Initializes the validator. | ||
*/ | ||
public function init() | ||
{ | ||
parent::init(); | ||
|
||
if ($this->notImage === null) { | ||
$this->notImage = Yii::t('yii', 'The file "{file}" is not an image.'); | ||
} | ||
if ($this->underWidth === null) { | ||
$this->underWidth = Yii::t('yii', 'The file "{file}" is too small. The width cannot be smaller than {limit} pixels.'); | ||
} | ||
if ($this->underHeight === null) { | ||
$this->underHeight = Yii::t('yii', 'The file "{file}" is too small. The height cannot be smaller than {limit} px.'); | ||
} | ||
if ($this->overWidth === null) { | ||
$this->overWidth = Yii::t('yii', 'The file "{file}" is too large. The width cannot be larger than {limit} px.'); | ||
} | ||
if ($this->overHeight === null) { | ||
$this->overHeight = Yii::t('yii', 'The file "{file}" is too large. The height cannot be larger than {limit} px.'); | ||
} | ||
if ($this->wrongMimeType === null) { | ||
$this->wrongMimeType = Yii::t('yii', 'Only files with these mimeTypes are allowed: {mimeTypes}.'); | ||
} | ||
if (!is_array($this->mimeTypes)) { | ||
$this->mimeTypes = preg_split('/[\s,]+/', strtolower($this->mimeTypes), -1, PREG_SPLIT_NO_EMPTY); | ||
} | ||
} | ||
|
||
/** | ||
* Validates the attribute of the object using {@link validateImage}. | ||
* If there is any error, the error message is added to the object. | ||
* @param \yii\base\Model $object the object being validated | ||
* @param string $attribute the attribute being validated | ||
*/ | ||
public function validateAttribute($object, $attribute) | ||
{ | ||
parent::validateAttribute($object, $attribute); | ||
|
||
if ($object->hasErrors()) { | ||
return; | ||
} | ||
|
||
if ($this->maxFiles > 1) { | ||
$files = $object->$attribute; | ||
$object->$attribute = array_values($files); | ||
|
||
foreach ($files as $file) { | ||
$this->validateImage($object, $attribute, $file); | ||
} | ||
} else { | ||
$file = $object->$attribute; | ||
$this->validateImage($object, $attribute, $file); | ||
} | ||
} | ||
|
||
/** | ||
* Internally validates a file object. | ||
* @param \yii\base\Model $object the object being validated | ||
* @param string $attribute the attribute being validated | ||
* @param UploadedFile $image uploaded file passed to check against a set of rules | ||
*/ | ||
public function validateImage($object, $attribute, $image) | ||
{ | ||
if (!empty($this->mimeTypes) && !in_array(FileHelper::getMimeType($image->tempName), $this->mimeTypes, true)) { | ||
$this->addError($object, $attribute, $this->wrongMimeType, ['file' => $image->name, 'mimeTypes' => implode(', ', $this->mimeTypes)]); | ||
} | ||
|
||
if (false === ($imageInfo = getimagesize($image->tempName))) { | ||
$this->addError($object, $attribute, $this->notImage, ['file' => $image->name]); | ||
return; | ||
} | ||
|
||
list($width, $height, $type) = $imageInfo; | ||
|
||
if ($width == 0 || $height == 0) { | ||
$this->addError($object, $attribute, $this->notImage, ['file' => $image->name]); | ||
return; | ||
} | ||
|
||
if ($this->minWidth !== null && $width < $this->minWidth) { | ||
$this->addError($object, $attribute, $this->underWidth, ['file' => $image->name, 'limit' => $this->minWidth]); | ||
} | ||
|
||
if ($this->minHeight !== null && $height < $this->minHeight) { | ||
$this->addError($object, $attribute, $this->underHeight, ['file' => $image->name, 'limit' => $this->minHeight]); | ||
} | ||
|
||
if ($this->maxWidth !== null && $width > $this->maxWidth) { | ||
$this->addError($object, $attribute, $this->overWidth, ['file' => $image->name, 'limit' => $this->maxWidth]); | ||
} | ||
|
||
if ($this->maxHeight !== null && $height > $this->maxHeight) { | ||
$this->addError($object, $attribute, $this->overHeight, ['file' => $image->name, 'limit' => $this->maxHeight]); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters