• Модуль: disk
  • Путь к файлу: ~/bitrix/modules/disk/lib/uf/integration/diskuploadercontroller.php
  • Класс: BitrixDiskUfIntegrationDiskUploaderController
  • Вызов: DiskUploaderController::createFileInfo
private function createFileInfo($fileModel): ?FileInfo
{
	$fileInfo = FileInfo::createFromBFile($fileModel->getFileId());
	if ($fileInfo === null)
	{
		return null;
	}

	$id =
		$fileModel instanceof DiskFile
			? FileUserType::NEW_FILE_PREFIX . $fileModel->getId()
			: (int)$fileModel->getId()
	;

	$fileInfo->setId($id);
	$fileInfo->setName($fileModel->getName());

	$customData = [
		'fileId' => (int)$fileModel->getId(),
		'fileType' => null,
		'canRename' => false,
		'canMove' => false,
		'storage' => null,
		'objectId' => null,
		'isEditable' => false,
	];

	if ($fileModel instanceof DiskFile)
	{
		// File Model
		$customData['canRename'] = true;
		$customData['canMove'] = true;
		$customData['objectId'] = (int)$fileModel->getId();
		$customData['allowEdit'] = BitrixDiskConfiguration::isEnabledDefaultEditInUf();
		$customData['isEditable'] = DocumentHandler::isEditable($fileModel->getExtension());

		$downloadUrl = EngineUrlManager::getInstance()->create(
			'disk.file.download',
			['fileId' => $fileModel->getId()]
		);

		$fileInfo->setDownloadUrl($downloadUrl);

		$storage = $fileModel->getStorage();
		$customData['canUpdate'] = $storage && $fileModel->canUpdate($storage->getCurrentUserSecurityContext());
	}
	else
	{
		// Attached Object
		$customData['objectId'] = (int)$fileModel->getObjectId();
		$customData['allowEdit'] = (bool)$fileModel->getAllowEdit();
		$customData['isEditable'] =
			$fileModel->getFile() && DocumentHandler::isEditable($fileModel->getFile()->getExtension())
		;

		$downloadUrl = EngineUrlManager::getInstance()->create(
			'disk.attachedObject.download',
			['attachedObjectId' => $id]
		);

		$fileInfo->setDownloadUrl($downloadUrl);

		$user = CurrentUser::get();
		$userId = $user ? $user->getId() : BitrixDiskSecuritySecurityContext::GUEST_USER;
		$customData['canUpdate'] = $fileModel->canUpdate($userId);
	}

	$file = $fileModel instanceof DiskFile ? $fileModel : $fileModel->getFile();
	if ($file)
	{
		$customData['fileType'] = $file->getView()->getEditorTypeFile() ?: null;

		$storage = $file->getStorage();
		$folder = $file->getParent();
		if ($storage && $folder)
		{
			$currentUserId = (int)CurrentUser::get()->getId();
			$isMyDisk =
				$storage->getProxyType() instanceof BitrixDiskProxyTypeUser
				&& (int)$storage->getEntityId() === $currentUserId
			;

			$storageName =
				$isMyDisk
					? $storage->getProxyType()->getTitleForCurrentUser()
					: $storage->getProxyType()->getEntityTitle()
			;

			$customData['storage'] = $storageName . ' / ' . ($folder->isRoot() ? '' : $folder->getName());
		}
	}

	$fileInfo->setCustomData($customData);

	if ($fileInfo->isImage())
	{
		$config = $this->getConfiguration();
		if ($config->shouldTreatImageAsFile($fileInfo))
		{
			$fileInfo->setTreatImageAsFile(true);
		}
		else
		{
			$previewOptions = ['width' => 1200, 'height' => 1200]; // double size (see edit.php and html-parser.js)
			if ($fileModel instanceof DiskFile)
			{
				$urlManager = BitrixDiskDriver::getInstance()->getUrlManager();
				$previewUrl = $urlManager->getUrlForShowFile($fileModel, $previewOptions);
			}
			else
			{
				$previewUrl = BitrixDiskUrlManager::getUrlToActionShowUfFile($fileModel->getId(), $previewOptions);
			}

			$rectangle = PreviewImage::getSize($fileInfo, new PreviewImageOptions($previewOptions));
			$fileInfo->setPreviewUrl($previewUrl, $rectangle->getWidth(), $rectangle->getHeight());
		}
	}

	return $fileInfo;
}