%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/file/validators/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/file/validators/FileValidator.php |
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2016 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\modules\file\validators;
use humhub\modules\file\Module;
use Yii;
use yii\web\UploadedFile;
use humhub\modules\file\models\File;
use humhub\modules\file\libs\FileHelper;
/**
* FileValidator
*
* @inheritdoc
* @since 1.2
* @author Luke
*/
class FileValidator extends \yii\validators\FileValidator
{
/**
* @var boolean allow only file extensions which are specified in administration section
*/
public $useDefaultExtensionRestriction = true;
/**
* @var boolean deny double file extensions
*/
public $denyDoubleFileExtensions;
/**
* @inheritdoc
*/
public function init()
{
/** @var Module $module */
$module = Yii::$app->getModule('file');
if ($this->extensions === null && $this->useDefaultExtensionRestriction) {
$this->extensions = $module->settings->get('allowedExtensions');
}
if ($this->maxSize === null) {
$this->maxSize = $module->settings->get('maxFileSize');
}
if ($this->denyDoubleFileExtensions === null) {
$this->denyDoubleFileExtensions = $module->denyDoubleFileExtensions;
}
parent::init();
}
/**
* @inheritdoc
*/
protected function validateValue($file)
{
$errors = parent::validateValue($file);
if ($errors !== null) {
return $errors;
}
}
/**
* @inheritdoc
*/
public function validateAttribute($model, $attribute)
{
$this->validateFileName($model, $attribute);
parent::validateAttribute($model, $attribute);
}
public function validateFileName($model, $attribute)
{
if ($model instanceof File) {
$pattern = Yii::$app->moduleManager->getModule('file')->fileNameValidationPattern;
if (empty($pattern)) {
return;
}
$model->file_name = preg_replace($pattern, '_', $model->file_name);
if($this->denyDoubleFileExtensions && preg_match('/\.\w{2,3}\.\w{2,3}$/', $model->file_name)) {
$this->addError($model, $attribute, Yii::t('FileModule.base', 'Double file extensions are not allowed!'));
}
}
}
/**
* Checks if given uploaded file have correct type (extension) according current validator settings.
* @param UploadedFile $file
* @return bool
* @throws \yii\base\InvalidConfigException
*/
protected function validateExtension($file)
{
$extension = mb_strtolower($file->extension, 'UTF-8');
if (FileHelper::getMimeTypeByExtension('test.' . $extension) !== null && $this->checkExtensionByMimeType) {
$mimeType = FileHelper::getMimeType($file->tempName, null, false);
if ($mimeType === null) {
return false;
}
$extensionsByMimeType = FileHelper::getExtensionsByMimeType($mimeType);
if (!in_array($extension, $extensionsByMimeType, true)) {
return false;
}
}
if (!in_array($extension, $this->extensions, true)) {
return false;
}
return true;
}
}