- Модуль: webdav
- Путь к файлу: ~/bitrix/modules/webdav/classes/diskdispatcher.php
- Класс: CWebDavDiskDispatcher
- Вызов: CWebDavDiskDispatcher::processActionDirectory
public function processActionDirectory(array $params)
{
$this->checkRequiredParams($params, array('name', 'storageExtra', 'storageId'));
$folderName = $params['name'];
$inRoot = (bool)$params['inRoot'];
$isUpdate = (bool)$params['update'];
$storage = $this->getStorageObject($params['storageExtra'], $params['storageId']);
if(!$storage->isCorrectName($folderName, $msg))
{
return $this->sendResponse(array(
'status' => static::STATUS_DENIED,
'message' => $msg,
));
}
$parentFolderId = null;
if(!$inRoot)
{
$parentFolderExtra = $storage->parseElementExtra($params['parentExtra']);
$parentFolderId = $parentFolderExtra['id'];
//$parentFolderVersion = $_POST['version'];
}
if($isUpdate)
{
$this->checkRequiredParams($params, array('id', 'version'));
$id = $params['id'];
$version = $params['version'];
$folderExtra = $storage->parseElementExtra($params['extra']);
$targetFolder = $storage->getDirectory($id, $folderExtra);
if(empty($targetFolder))
{
return $this->sendError('Not found directory to update');
}
$storageKey = $storage->getStorageId();
//it is the same directory todo this logic $storage->moveDirectory, but ....we have many query. Or refactor signature
if($targetFolder['extra']['sectionId'] == $parentFolderId && $folderName == $targetFolder['name'])
{
return $this->sendSuccess($targetFolder);
}
if($folderName != $targetFolder['name'])
{
$item = $storage->renameDirectory($folderName, $targetFolder['extra']['id'], $parentFolderId);
}
else
{
$item = $storage->moveDirectory($folderName, $targetFolder['extra']['id'], $parentFolderId);
}
if(!$item)
{
return $this->sendError('Error in action move');
}
CWebDavTools::runEvent(static::ON_AFTER_DISK_FOLDER_UPDATE, array($item['extra']['id'], $item));
return $this->sendSuccess($item);
}
else
{
//todo folder may make in storage root, but parentFolder not exist
$item = $storage->addDirectory($folderName, $parentFolderId);
}
if(empty($item))
{
return $this->sendError('Error in makeDirectory');
}
CWebDavTools::runEvent(static::ON_AFTER_DISK_FOLDER_ADD, array($item['extra']['id'], $item));
return $this->sendSuccess($item);
}