• Модуль: 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;
}