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