• Модуль: disk
  • Путь к файлу: ~/bitrix/modules/disk/lib/controller/onlyoffice.php
  • Класс: BitrixDiskControllerOnlyOffice
  • Вызов: OnlyOffice::loadDocumentEditor
protected function loadDocumentEditor(
	?DiskFile $object,
	?DiskVersion $version,
	?DiskAttachedObject $attachedObject,
	int $type,
	int $editorMode = DocumentOnlyOfficeEditorConfigBuilder::VISUAL_MODE_USUAL
): ?HttpResponse
{
	if (!$object && !$attachedObject && !$version)
	{
		$this->addError(new Error('There is no file to preview.'));

		return null;
	}

	$file = $object;
	if ($version)
	{
		$file = $version->getObject();
	}
	elseif ($attachedObject)
	{
		$file = $attachedObject->getFile();
	}
	if (!($file instanceof BitrixDiskFile))
	{
		$this->addError(new Error('Could not find the file (content).'));

		return null;
	}

	$trackedObjectManager = Driver::getInstance()->getTrackedObjectManager();
	if ($attachedObject)
	{
		$trackedObjectManager->pushAttachedObject($this->getCurrentUser()->getId(), $attachedObject, true);
	}
	else
	{
		$trackedObjectManager->pushFile($this->getCurrentUser()->getId(), $file, true);
	}

	$documentSessionContext = ModelsDocumentSessionContext::tryBuildByAttachedObject($attachedObject, $file);

	$sessionManager = new DocumentOnlyOfficeDocumentSessionManager();
	$sessionManager
		->setUserId($this->getCurrentUser()->getId())
		->setSessionType($type)
		->setSessionContext($documentSessionContext)
		->setFile($object)
		->setVersion($version)
		->setAttachedObject($attachedObject)
	;

	if (!$sessionManager->lock())
	{
		$this->addError(new Error('Could not getting lock for the session.'));

		return null;
	}
	$documentSession = $sessionManager->findOrCreateSession();
	if (!$documentSession)
	{
		$this->addErrors($documentSession->getErrors());

		return null;
	}
	$sessionManager->unlock();

	/** @see DiskFileEditorOnlyOfficeController::getSliderContentAction */
	$link = UrlManager::getInstance()->create('getSliderContent', [
		'c' => 'bitrix:disk.file.editor-onlyoffice',
		'mode' => Router::COMPONENT_MODE_AJAX,
		'documentSessionId' => $documentSession->getId(),
		'documentSessionHash' => $documentSession->getExternalHash(),
		'editorMode' => $editorMode,
	]);

	return $this->redirectTo($link);
}