- Модуль: disk
- Путь к файлу: ~/bitrix/modules/disk/lib/document/documentcontroller.php
- Класс: BitrixDiskDocumentDocumentController
- Вызов: DocumentController::processActionSaveBlank
protected function processActionSaveBlank()
{
$this->checkRequiredGetParams(array(
'type'
));
$this->checkRequiredPostParams(array(
'editSessionId'
));
if($this->errorCollection->hasErrors())
{
$this->sendJsonErrorResponse();
}
$currentSession = $this->getEditSessionByCurrentUser((int)$this->request->getPost('editSessionId'));
if(!$currentSession)
{
$this->errorCollection->add(array(new Error(Loc::getMessage('DISK_DOC_CONTROLLER_ERROR_COULD_NOT_FIND_EDIT_SESSION'), self::ERROR_COULD_NOT_FIND_EDIT_SESSION)));
$this->sendJsonErrorResponse();
}
$tmpFile = CTempFile::getFileName(uniqid('_wd'));
checkDirPath($tmpFile);
$fileData = new BlankFileData($this->request->getQuery('type'));
$fileData->setId($currentSession->getServiceFileId());
$fileData->setSrc($tmpFile);
$fileData = $this->documentHandler->downloadFile($fileData);
if(!$fileData)
{
if($this->documentHandler->isRequiredAuthorization())
{
$this->sendNeedAuth();
}
$this->errorCollection->add($this->documentHandler->getErrors());
$this->sendJsonErrorResponse();
}
$fileArray = CFile::makeFileArray($tmpFile);
$fileArray['name'] = $fileData->getName();
$fileArray['type'] = $fileData->getMimeType();
$fileArray['MODULE_ID'] = Driver::INTERNAL_MODULE_ID;
$fileId = CFile::saveFile($fileArray, Driver::INTERNAL_MODULE_ID, true, true);
if(!$fileId)
{
$this->errorCollection->add(array(new Error(Loc::getMessage('DISK_DOC_CONTROLLER_ERROR_COULD_NOT_SAVE_FILE'), self::ERROR_COULD_NOT_SAVE_FILE)));
$this->sendJsonErrorResponse();
}
$folder = null;
if(!empty($_REQUEST['targetFolderId']))
{
$folder = $this->getFolderToSaveFile((int)$_REQUEST['targetFolderId']);
}
if(!$folder)
{
$userStorage = Driver::getInstance()->getStorageByUserId($this->getUser()->getId());
if(!$userStorage)
{
CFile::delete($fileId);
$this->errorCollection->add(array(new Error(Loc::getMessage('DISK_DOC_CONTROLLER_ERROR_COULD_NOT_FIND_STORAGE'), self::ERROR_COULD_NOT_FIND_STORAGE)));
$this->sendJsonErrorResponse();
}
$folder = $userStorage->getFolderForCreatedFiles();
}
if(!$folder)
{
CFile::delete($fileId);
$this->errorCollection->add(array(new Error(Loc::getMessage('DISK_DOC_CONTROLLER_ERROR_COULD_NOT_FIND_FOLDER_FOR_CREATED_FILES'), self::ERROR_COULD_NOT_FIND_FOLDER_FOR_CREATED_FILES)));
$this->sendJsonErrorResponse();
}
if(!$folder->canAdd($folder->getStorage()->getCurrentUserSecurityContext()))
{
CFile::delete($fileId);
$this->errorCollection->add(array(new Error(Loc::getMessage('DISK_DOC_CONTROLLER_ERROR_BAD_RIGHTS'), self::ERROR_BAD_RIGHTS)));
$this->sendJsonErrorResponse();
}
$newFile = $folder->addFile(array(
'NAME' => UiText::correctFilename($fileData->getName()),
'FILE_ID' => $fileId,
'SIZE' => $fileArray['size'],
'CREATED_BY' => $this->getUser()->getId()
), array(), true);
if(!$newFile)
{
CFile::delete($fileId);
$this->errorCollection->add(array(new Error(Loc::getMessage('DISK_DOC_CONTROLLER_ERROR_COULD_NOT_CREATE_FILE'), self::ERROR_COULD_NOT_CREATE_FILE)));
$this->errorCollection->add($folder->getErrors());
$this->sendJsonErrorResponse();
}
$defaultHandlerForView = Driver::getInstance()->getDocumentHandlersManager()->getDefaultHandlerForView();
if($this->documentHandler instanceof GoogleHandler && $defaultHandlerForView instanceof GoogleViewerHandler)
{
$fileDataNew = $this->documentHandler->repackDocument($fileData);
if($fileDataNew)
{
$fileArray = CFile::makeFileArray($fileDataNew->getSrc());
$fileArray['name'] = $fileData->getName();
$fileArray['type'] = $fileData->getMimeType();
$fileArray['MODULE_ID'] = Driver::INTERNAL_MODULE_ID;
$fileId = CFile::saveFile($fileArray, Driver::INTERNAL_MODULE_ID, true, true);
if($fileId && !$newFile->addVersion(array(
'ID' => $fileId,
'FILE_SIZE' => $fileArray['size'],
), $this->getUser()->getId())
)
{
CFile::delete($fileId);
}
}
}
$this->deleteEditSession($currentSession);
$this->deleteFile($currentSession, $fileData);
$this->sendJsonSuccessResponse(array(
'folderName' => $folder->getName(),
'objectId' => $newFile->getId(),
'sizeInt' => $newFile->getSize(),
'size' => CFile::formatSize($newFile->getSize()),
'name' => $newFile->getName(),
'extension' => $newFile->getExtension(),
'nameWithoutExtension' => getFileNameWithoutExtension($newFile->getName()),
));
}