- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/classes/general/im_disk.php
- Класс: CIMDisk
- Вызов: CIMDisk::GetFileParams
static function GetFileParams($chatId, $fileModel, $options = [])
{
if (!self::Enabled())
{
return false;
}
$skipViewer = isset($options['SKIP_VIEWER']) && ($options['SKIP_VIEWER'] === true);
if ($fileModel instanceof BitrixDiskFile)
{
}
elseif ((int)$fileModel > 0)
{
$fileModel = BitrixDiskFile::getById($fileModel);
}
else
{
return false;
}
if (!$fileModel || $fileModel->getId() <= 0)
{
return false;
}
/** @var BitrixDiskFile $fileModel */
$contentType = 'file';
$imageParams = false;
if ($fileModel->getCode() === IMV2LinkFileFileItem::MEDIA_ORIGINAL_CODE)
{
// skip
}
else if (BitrixDiskTypeFile::isImage($fileModel))
{
$contentType = 'image';
$params = $fileModel->getFile();
$width = isset($params['WIDTH']) ? (int)$params['WIDTH'] : 0;
$height = isset($params['HEIGHT']) ? (int)$params['HEIGHT'] : 0;
$imageParams = Array(
'width' => $width,
'height' => $height,
);
}
else if (BitrixDiskTypeFile::isVideo($fileModel->getName()))
{
$contentType = 'video';
$params = $fileModel->getView()->getPreviewData();
$width = isset($params['WIDTH']) ? (int)$params['WIDTH'] : 0;
$height = isset($params['HEIGHT']) ? (int)$params['HEIGHT'] : 0;
$imageParams = Array(
'width' => $width,
'height' => $height,
);
}
else if (BitrixDiskTypeFile::isAudio($fileModel->getName()))
{
$contentType = 'audio';
}
$fileData = Array(
'id' => (int)$fileModel->getId(),
'chatId' => (int)$chatId,
'date' => $fileModel->getCreateTime(),
'type' => $contentType,
'name' => $fileModel->getName(),
'extension' => mb_strtolower($fileModel->getExtension()),
'size' => (int)$fileModel->getSize(),
'image' => $imageParams,
'status' => $fileModel->getGlobalContentVersion() > 1? 'done': 'upload',
'progress' => $fileModel->getGlobalContentVersion() > 1? 100: -1,
'authorId' => (int)$fileModel->getCreatedBy(),
'authorName' => BitrixImUser::formatFullNameFromDatabase($fileModel->getCreateUser()),
'urlPreview' => self::GetPublicPath(self::PATH_TYPE_PREVIEW, $fileModel),
'urlShow' => self::GetPublicPath(self::PATH_TYPE_SHOW, $fileModel),
'urlDownload' => self::GetPublicPath(self::PATH_TYPE_DOWNLOAD, $fileModel),
);
if ($skipViewer)
{
$fileData['viewerAttrs'] = null;
}
else
{
try
{
$viewerType = DiskUiFileAttributes::buildByFileId($fileModel->getFileId(), $fileData['urlDownload'])
->setObjectId($fileModel->getId())
->setGroupBy($chatId)
->setAttribute('data-im-chat-id', $chatId)
->setTitle($fileModel->getName())
->addAction([
'type' => 'download',
])
->addAction([
'type' => 'copyToMe',
'text' => Loc::getMessage('IM_DISK_ACTION_SAVE_TO_OWN_FILES'),
'action' => 'BXIM.disk.saveToDiskAction',
'params' => [
'fileId' => $fileModel->getId(),
],
'extension' => 'disk.viewer.actions',
'buttonIconClass' => 'ui-btn-icon-cloud',
])
;
if ($viewerType->getTypeClass() === DiskUiFileAttributes::JS_TYPE_CLASS_ONLYOFFICE)
{
$viewerType->setTypeClass('BX.Messenger.Integration.Viewer.OnlyOfficeChatItem');
if (
$fileModel->getCode() === CreateDocumentByCallTemplateScenario::CODE_RESUME
|| $fileModel->getRealObject()->getCode() === CreateDocumentByCallTemplateScenario::CODE_RESUME
)
{
$viewerType->setTypeClass('BX.Messenger.Integration.Viewer.OnlyOfficeResumeItem');
}
$viewerType->setExtension('im.integration.viewer');
}
if ($viewerType->getViewerType() !== BitrixMainUIViewerRendererRenderer::JS_TYPE_UNKNOWN)
{
$fileData['viewerAttrs'] = $viewerType->toDataSet();
}
else
{
$fileData['viewerAttrs'] = null;
}
}
catch (BitrixMainArgumentException $exception)
{
$fileData['viewerAttrs'] = null;
}
}
return $fileData;
}