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