194 lines
6.3 KiB
PHP
194 lines
6.3 KiB
PHP
<?php
|
|
|
|
namespace dominion\file;
|
|
|
|
/**
|
|
* This is the model class for table "file_config".
|
|
*
|
|
* @property int $id
|
|
* @property string $module
|
|
* @property string $type
|
|
* @property int $height
|
|
* @property int $width
|
|
* @property string $name
|
|
* @property int $crop
|
|
* @property int $cut
|
|
* @property int $addBorder
|
|
* @property int $fileId Шаблон изображения
|
|
* @property int $border_top отступы для окна внутри шаблона (сверху)
|
|
* @property int $border_right отступы для окна внутри шаблона (справа)
|
|
* @property int $border_left отступы для окна внутри шаблона (слева)
|
|
* @property int $border_bottom отступы для окна внутри шаблона (снизу)
|
|
* @property int $quality качество (степень сжатия)
|
|
*/
|
|
class Config extends \yii\db\ActiveRecord
|
|
{
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public static function tableName()
|
|
{
|
|
return 'file_config';
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function rules()
|
|
{
|
|
return [
|
|
[['module', 'type'], 'required'],
|
|
[['height', 'width', 'cut', 'crop', 'addBorder', 'fileId', 'border_top', 'border_right', 'border_left', 'border_bottom', 'quality'], 'integer'],
|
|
[['module', 'type'], 'string', 'max' => 50],
|
|
[['name'], 'string', 'max' => 500],
|
|
[['fileId'], 'formatImg'],
|
|
];
|
|
}
|
|
public function formatImg($attribute, $params)
|
|
{
|
|
File::validateFormat($this, $attribute, ['extensions' => 'png, jpg']);
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
/*public function attributeLabels()
|
|
{
|
|
return [
|
|
'id' => Module::t('app', 'ID'),
|
|
'module' => Module::t('app', 'Module'),
|
|
'type' => Module::t('app', 'Type'),
|
|
'height' => Module::t('app', 'Height'),
|
|
'width' => Module::t('app', 'Width'),
|
|
'name' => Module::t('app', 'Name'),
|
|
'crop' => Module::t('app', 'Crop'),
|
|
'cut' => Module::t('app', 'Cut'),
|
|
'addBorder' => Module::t('app', 'Add Border'),
|
|
'fileId' => Module::t('app', 'File'),
|
|
'border_right' => Module::t('app', 'Border Right'),
|
|
'border_top' => Module::t('app', 'Border Top'),
|
|
'border_left' => Module::t('app', 'Border Left'),
|
|
'border_bottom' => Module::t('app', 'Border Bottom'),
|
|
'quality' => Module::t('app', 'Quality'),
|
|
];
|
|
}*/
|
|
|
|
/*public function beforeSave($insert)
|
|
{
|
|
$this->fileId = File::formSave('config', $this->fileId);
|
|
return parent::beforeSave($insert);
|
|
}*/
|
|
|
|
public function getFile()
|
|
{
|
|
return $this->hasOne(File::className(), ['id' => 'fileId']);
|
|
}
|
|
|
|
public static function getData($params, $root)
|
|
{
|
|
$query = self::find();
|
|
$root->andWhere($query, $params, ['id', 'module', 'type']);
|
|
$root->andWhereLike($query, $params, ['name']);
|
|
|
|
$root->setMetaByQuery($query);
|
|
$root->orderBy($query, $params, ['id', 'module', 'type', 'height', 'width', 'name', 'crop', 'cut', 'addBorder']);
|
|
return $root->getItemsByPage($query);
|
|
}
|
|
|
|
public function beforeDelete()
|
|
{
|
|
if($this->file)
|
|
{
|
|
$this->file->delete();
|
|
}
|
|
return parent::beforeDelete();
|
|
}
|
|
|
|
public function customSave($args)
|
|
{
|
|
if((isset($args['fileDelete']) && $args['fileDelete']) || (isset($args['file'], $args['fileName']) && !empty($args['file'])))
|
|
{
|
|
if($this->file)
|
|
{
|
|
$this->file->delete();
|
|
}
|
|
}
|
|
foreach(['name', 'module', 'type', 'height', 'width', 'cut', 'crop', 'addBorder', 'border_top', 'border_right', 'border_left', 'border_bottom', 'quality'] as $item)
|
|
{
|
|
if(isset($args[$item]))
|
|
{
|
|
$this->$item = is_bool($args[$item]) ? (int) $args[$item] : $args[$item];
|
|
}
|
|
}
|
|
|
|
if((isset($args['file'], $args['fileName']) && !empty($args['file'])))
|
|
{
|
|
$this->fileId = File::saveBase64File('file', $args['file'], $args['fileName'], '', false);
|
|
}
|
|
$this->fileId = (int)$this->fileId;
|
|
$this->save();
|
|
return $this->id;
|
|
}
|
|
|
|
public function resize($args)
|
|
{
|
|
$time = time() + 5;
|
|
$all = isset($args['all']) && $args['all'];
|
|
$fileId = isset($args['fileId']) ? $args['fileId'] : 0;
|
|
$files = File::find()->andWhere(['module'=> $this->module])->andWhere(['>', 'id', $fileId])->limit(200)->all();
|
|
$output = ['count' => 0];
|
|
$fileTemplate = $this->file ? [
|
|
'filePatch' => $this->file->getFilePath(false, true),
|
|
'border_top' => $this->border_top,
|
|
'border_right' => $this->border_right,
|
|
'border_left' => $this->border_left,
|
|
'border_bottom' => $this->border_bottom,
|
|
] : [];
|
|
if($this->file)
|
|
{
|
|
$this->file->downloadOriginal();
|
|
}
|
|
|
|
|
|
if(!empty($files))
|
|
{
|
|
$output['step'] = 'procccess';
|
|
foreach ($files as $file)
|
|
{
|
|
try{
|
|
$file->downloadOriginal();
|
|
$file->resize($this->type, $this->height, $this->width, $this->crop, $this->cut, $this->addBorder, $all, $fileTemplate, $this->quality);
|
|
if($file->cropFile)
|
|
{
|
|
@unlink($file->cropFile);
|
|
}
|
|
if(\Yii::$app->has('s3'))
|
|
{
|
|
$s3 = \Yii::$app->get('s3');
|
|
if(file_exists($file->getFilePath($this->type, true)))
|
|
{
|
|
$s3->upload($file->getFilePath($this->type), $file->getFilePath($this->type, true));
|
|
@unlink($file->getFilePath($this->type, true));
|
|
}
|
|
}
|
|
}
|
|
catch (\Exception $ex)
|
|
{
|
|
}
|
|
$output['fileId'] = $file->id;
|
|
$output['count'] ++;
|
|
if($time < time())
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$output['step'] = 'finish';
|
|
}
|
|
return $output;
|
|
|
|
}
|
|
}
|