|
|
|
|
@ -71,7 +71,7 @@ class ObjectTree extends \Sabre\DAV\Tree {
|
|
|
|
|
* is present.
|
|
|
|
|
*
|
|
|
|
|
* @param string $path chunk file path to convert
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* @return string path to real file
|
|
|
|
|
*/
|
|
|
|
|
private function resolveChunkFile($path) {
|
|
|
|
|
@ -186,9 +186,13 @@ class ObjectTree extends \Sabre\DAV\Tree {
|
|
|
|
|
*
|
|
|
|
|
* @param string $sourcePath The path to the file which should be moved
|
|
|
|
|
* @param string $destinationPath The full destination path, so not just the destination parent node
|
|
|
|
|
* @throws \Sabre\DAV\Exception\BadRequest
|
|
|
|
|
* @throws \Sabre\DAV\Exception\ServiceUnavailable
|
|
|
|
|
* @throws FileLocked
|
|
|
|
|
* @throws Forbidden
|
|
|
|
|
* @throws InvalidPath
|
|
|
|
|
* @throws \Sabre\DAV\Exception\Forbidden
|
|
|
|
|
* @throws \Sabre\DAV\Exception\Locked
|
|
|
|
|
* @throws \Sabre\DAV\Exception\NotFound
|
|
|
|
|
* @throws \Sabre\DAV\Exception\ServiceUnavailable
|
|
|
|
|
* @return int
|
|
|
|
|
*/
|
|
|
|
|
public function move($sourcePath, $destinationPath) {
|
|
|
|
|
@ -196,6 +200,15 @@ class ObjectTree extends \Sabre\DAV\Tree {
|
|
|
|
|
throw new \Sabre\DAV\Exception\ServiceUnavailable('filesystem not setup');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$infoDestination = $this->fileView->getFileInfo(dirname($destinationPath));
|
|
|
|
|
$infoSource = $this->fileView->getFileInfo($sourcePath);
|
|
|
|
|
$destinationPermission = $infoDestination && $infoDestination->isUpdateable();
|
|
|
|
|
$sourcePermission = $infoSource && $infoSource->isDeletable();
|
|
|
|
|
|
|
|
|
|
if (!$destinationPermission || !$sourcePermission) {
|
|
|
|
|
throw new Forbidden('No permissions to move object.');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$targetNodeExists = $this->nodeExists($destinationPath);
|
|
|
|
|
$sourceNode = $this->getNodeForPath($sourcePath);
|
|
|
|
|
if ($sourceNode instanceof \Sabre\DAV\ICollection && $targetNodeExists) {
|
|
|
|
|
@ -265,6 +278,13 @@ class ObjectTree extends \Sabre\DAV\Tree {
|
|
|
|
|
*
|
|
|
|
|
* @param string $source
|
|
|
|
|
* @param string $destination
|
|
|
|
|
* @throws FileLocked
|
|
|
|
|
* @throws Forbidden
|
|
|
|
|
* @throws InvalidPath
|
|
|
|
|
* @throws \Exception
|
|
|
|
|
* @throws \Sabre\DAV\Exception\Forbidden
|
|
|
|
|
* @throws \Sabre\DAV\Exception\Locked
|
|
|
|
|
* @throws \Sabre\DAV\Exception\NotFound
|
|
|
|
|
* @throws \Sabre\DAV\Exception\ServiceUnavailable
|
|
|
|
|
* @return void
|
|
|
|
|
*/
|
|
|
|
|
@ -273,6 +293,12 @@ class ObjectTree extends \Sabre\DAV\Tree {
|
|
|
|
|
throw new \Sabre\DAV\Exception\ServiceUnavailable('filesystem not setup');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$info = $this->fileView->getFileInfo(dirname($destination));
|
|
|
|
|
if ($info && !$info->isUpdateable()) {
|
|
|
|
|
throw new Forbidden('No permissions to copy object.');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// this will trigger existence check
|
|
|
|
|
$this->getNodeForPath($source);
|
|
|
|
|
|
|
|
|
|
|