%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/main/lib/ui/viewer/transformation/ |
| Current File : /home/bitrix/www/bitrix/modules/main/lib/ui/viewer/transformation/callbackhandler.php |
<?php
namespace Bitrix\Main\UI\Viewer\Transformation;
use Bitrix\Main\Event;
use Bitrix\Main\Loader;
use Bitrix\Main\UI\Viewer\FilePreviewTable;
use Bitrix\Main\Web\MimeType;
use Bitrix\Transformer;
if (Loader::includeModule('transformer'))
{
final class CallbackHandler implements Transformer\InterfaceCallback
{
/**
* Function to process results after transformation.
*
* @param int $status Status of the command.
* @param string $command Name of the command.
* @param array $params Input parameters of the command.
* @param array $result Result of the command from controller
* Here keys are identifiers to result information. If result is file it will be in 'files' array.
* 'files' - array of the files, where key is extension, and value is absolute path to the result file.
*
* This method should return true on success or string on error.
*
* @return bool|string
* @throws \Bitrix\Main\ArgumentException
* @throws \Bitrix\Main\ObjectPropertyException
* @throws \Bitrix\Main\SystemException
*/
public static function call($status, $command, $params, $result = array())
{
if (isset($params['fileId']) && $params['fileId'] > 0)
{
Transformer\FileTransformer::clearInfoCache($params['fileId']);
}
if ($status == Transformer\Command::STATUS_ERROR && isset($params['id']))
{
return true;
}
if (!isset($params['id']) || !isset($params['fileId']) || !isset($result['files']))
{
return 'wrong parameters';
}
if ($status != Transformer\Command::STATUS_UPLOAD)
{
return 'wrong command status';
}
$previewLogId = $previewId = $previewImageId = 0;
$previewLog = FilePreviewTable::getList([
'select' => ['ID'],
'filter' => ['FILE_ID' => $params['fileId']],
'limit' => 1,
])->fetch();
if (isset($previewLog['ID']))
{
$previewLogId = $previewLog['ID'];
}
foreach ($result['files'] as $ext => $filePath)
{
if ($ext === 'jpg')
{
$previewImageId = self::saveFile($filePath, 'image/jpeg');
if ($previewImageId)
{
if ($previewLogId)
{
FilePreviewTable::update($previewLogId, [
'PREVIEW_IMAGE_ID' => $previewImageId,
]);
}
else
{
$resultAdd = FilePreviewTable::add([
'FILE_ID' => $params['fileId'],
'PREVIEW_IMAGE_ID' => $previewImageId,
]);
if ($resultAdd->getId())
{
$previewLogId = $resultAdd->getId();
}
}
}
}
else
{
$previewId = self::saveFile($filePath, MimeType::getByFileExtension($ext));
if ($previewLogId)
{
FilePreviewTable::update($previewLogId, [
'PREVIEW_ID' => $previewId,
]);
}
else
{
FilePreviewTable::add([
'FILE_ID' => $params['fileId'],
'PREVIEW_ID' => $previewId,
]);
}
self::sendNotifyAboutTransformation($params['fileId']);
}
}
(new Event('main', 'onFileTransformationComplete', [
'fileId' => $params['fileId'],
]))->send();
return true;
}
protected static function sendNotifyAboutTransformation($fileId)
{
if (Loader::includeModule('pull'))
{
\CPullWatch::addToStack(
TransformerManager::getPullTag($fileId),
[
'module_id' => 'main',
'command' => 'transformationComplete',
'params' => [
'fileId' => $fileId,
],
]
);
}
}
protected static function saveFile($file, $type)
{
$fileArray = \CFile::makeFileArray($file, $type);
$fileArray['MODULE_ID'] = 'main';
$fileId = \CFile::saveFile($fileArray, 'main_preview');
if ($fileId)
{
return $fileId;
}
return false;
}
}
}