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;
|
||
}
|
||
}
|