• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/V2/Entity/File/FileItem.php
  • Класс: BitrixImV2EntityFileFileItem
  • Вызов: FileItem::getViewerAttributes
private function getViewerAttributes(): ?array
{
	$diskFile = $this->getDiskFile();
	try
	{
		$viewerType = FileAttributes::buildByFileData($diskFile->getFile() ?? [], $this->getDownloadLink())
			->setObjectId($diskFile->getId())
			->setGroupBy($this->getChatId() ?? $diskFile->getParentId())
			->setAttribute('data-im-chat-id', $this->getChatId())
			->setTitle($diskFile->getName())
			->addAction([
				'type' => 'download',
			])
			->addAction([
				'type' => 'copyToMe',
				'text' => Loc::getMessage('IM_FILE_ITEM_ACTION_SAVE_TO_OWN_FILES'),
				'action' => 'BXIM.disk.saveToDiskAction',
				'params' => [
					'fileId' => $diskFile->getId(),
				],
				'extension' => 'disk.viewer.actions',
				'buttonIconClass' => 'ui-btn-icon-cloud',
			])
		;

		if ($viewerType->getTypeClass() === FileAttributes::JS_TYPE_CLASS_ONLYOFFICE)
		{
			$viewerType->setTypeClass('BX.Messenger.Integration.Viewer.OnlyOfficeChatItem');
			if (
				$diskFile->getCode() === CreateDocumentByCallTemplateScenario::CODE_RESUME
				|| $diskFile->getRealObject()->getCode() === CreateDocumentByCallTemplateScenario::CODE_RESUME
			)
			{
				$viewerType->setTypeClass('BX.Messenger.Integration.Viewer.OnlyOfficeResumeItem');
			}

			$viewerType->setExtension('im.integration.viewer');
		}
		if ($viewerType->getViewerType() !== BitrixMainUIViewerRendererRenderer::JS_TYPE_UNKNOWN)
		{
			return $viewerType->toDataSet();
		}
	}
	catch (BitrixMainArgumentException $exception)
	{
		return null;
	}

	return null;
}