130 lines
4.3 KiB
PHP
130 lines
4.3 KiB
PHP
|
<?php
|
|||
|
|
|||
|
namespace dominion\file\console;
|
|||
|
|
|||
|
use yii\console\ExitCode;
|
|||
|
use dominion\file\Config;
|
|||
|
use dominion\file\File;
|
|||
|
|
|||
|
/**
|
|||
|
* пересоздание миниатю
|
|||
|
*
|
|||
|
*/
|
|||
|
class ResizeController extends \yii\console\Controller
|
|||
|
{
|
|||
|
/**
|
|||
|
* @var integer начать ресайз не с начала указанного смешения
|
|||
|
*/
|
|||
|
public $beginFrom = 0;
|
|||
|
|
|||
|
/**
|
|||
|
* @var tring стисок id файлов через запятую
|
|||
|
* По умочанию все afqks. Пример 25760,25762,25761
|
|||
|
*/
|
|||
|
public $onlyFile = '';
|
|||
|
|
|||
|
public function options($actionID)
|
|||
|
{
|
|||
|
$output = parent::options($actionID);
|
|||
|
$output[] = 'beginFrom';
|
|||
|
$output[] = 'onlyFile';
|
|||
|
return $output;
|
|||
|
}
|
|||
|
|
|||
|
public function optionAliases()
|
|||
|
{
|
|||
|
$output = parent::optionAliases();
|
|||
|
$output['begin_from'] = 'beginFrom';
|
|||
|
$output['only_file'] = 'onlyFile';
|
|||
|
return $output;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* обязательно id конфига миниатьры
|
|||
|
* @param int $id
|
|||
|
* @return type
|
|||
|
*/
|
|||
|
public function actionIndex(int $id)
|
|||
|
{
|
|||
|
$config = Config::findOne(['id' => $id]);
|
|||
|
if ($config)
|
|||
|
{
|
|||
|
$fileTemplate = $config->file ? [
|
|||
|
'filePatch' => $config->file->getFilePath(false, true),
|
|||
|
'border_top' => $config->border_top,
|
|||
|
'border_right' => $config->border_right,
|
|||
|
'border_left' => $config->border_left,
|
|||
|
'border_bottom' => $config->border_bottom,
|
|||
|
] : [];
|
|||
|
if ($config->file)
|
|||
|
{
|
|||
|
$config->file->downloadOriginal();
|
|||
|
}
|
|||
|
|
|||
|
$flag = true;
|
|||
|
$offset = $this->beginFrom;
|
|||
|
$limit = 100;//000;
|
|||
|
while ($flag)
|
|||
|
{
|
|||
|
$query = File::find()->andWhere(['module' => $config->module])->orderBy(['id'=>SORT_ASC])->offset($offset)->limit($limit);
|
|||
|
if(!empty($this->onlyFile))
|
|||
|
{
|
|||
|
$query->andWhere(['id' => explode(',', $this->onlyFile)]);
|
|||
|
}
|
|||
|
$files = (array) $query->all();
|
|||
|
$offset = $offset + count($files);
|
|||
|
$flag = empty($files) || count($files) < $limit ? false :true;
|
|||
|
$fileDelete = [];
|
|||
|
|
|||
|
foreach ($files as $file)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
$file->downloadOriginal();
|
|||
|
$file->resize($config->type, $config->height, $config->width, $config->crop, $config->cut, $config->addBorder, true, $fileTemplate, $config->quality);
|
|||
|
if ($file->cropFile)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
unlink($file->cropFile);
|
|||
|
}
|
|||
|
catch (\Exception $ex)
|
|||
|
{
|
|||
|
$fileDelete[] = $file->cropFile;
|
|||
|
}
|
|||
|
}
|
|||
|
if (\Yii::$app->has('s3'))
|
|||
|
{
|
|||
|
$s3 = \Yii::$app->get('s3');
|
|||
|
if (file_exists($file->getFilePath($config->type, true)))
|
|||
|
{
|
|||
|
$s3->upload($file->getFilePath($config->type), $file->getFilePath($config->type, true));
|
|||
|
try
|
|||
|
{
|
|||
|
unlink($file->getFilePath($config->type, true));
|
|||
|
}
|
|||
|
catch (\Exception $ex)
|
|||
|
{
|
|||
|
|
|||
|
$fileDelete[] = $file->getFilePath($config->type, true);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
} catch (\Exception | \ValueError $ex)
|
|||
|
{
|
|||
|
echo "fileId {$file->id}; Exception: {$ex->getMessage()} \n";
|
|||
|
}
|
|||
|
}
|
|||
|
echo "обработано: {$offset} \n";
|
|||
|
foreach ($fileDelete as $value)
|
|||
|
{
|
|||
|
@unlink($value);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
return ExitCode::OK;
|
|||
|
}
|
|||
|
}
|