From 7ae7ce696172a485c17a18b5beb026262442840b Mon Sep 17 00:00:00 2001 From: Louis Chemineau Date: Thu, 31 Mar 2022 12:08:42 +0200 Subject: [PATCH] Change share owner when moving share out of share Signed-off-by: Louis Chemineau --- apps/files_sharing/lib/Updater.php | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/apps/files_sharing/lib/Updater.php b/apps/files_sharing/lib/Updater.php index b110b2045f9d9..bf580504ab8c2 100644 --- a/apps/files_sharing/lib/Updater.php +++ b/apps/files_sharing/lib/Updater.php @@ -38,7 +38,7 @@ class Updater { */ public static function renameHook($params) { self::renameChildren($params['oldpath'], $params['newpath']); - self::moveShareToShare($params['newpath']); + self::moveShareInOrOutOfShare($params['newpath']); } /** @@ -51,7 +51,7 @@ public static function renameHook($params) { * * @param string $path */ - private static function moveShareToShare($path) { + private static function moveShareInOrOutOfShare($path) { $userFolder = \OC::$server->getUserFolder(); // If the user folder can't be constructed (e.g. link share) just return. @@ -85,11 +85,12 @@ private static function moveShareToShare($path) { // Check if the destination is inside a share $mountManager = \OC::$server->getMountManager(); $dstMount = $mountManager->find($src->getPath()); - if (!($dstMount instanceof \OCA\Files_Sharing\SharedMount)) { - return; + if ($dstMount instanceof \OCA\Files_Sharing\SharedMount) { + $newOwner = $dstMount->getShare()->getShareOwner(); + } else { + $newOwner = $userFolder->getOwner()->getUID(); } - $newOwner = $dstMount->getShare()->getShareOwner(); //Ownership is moved over foreach ($shares as $share) { @@ -101,13 +102,18 @@ private static function moveShareToShare($path) { continue; } - /** @var IShare $share */ - if (!($dstMount->getShare()->getPermissions() & Constants::PERMISSION_SHARE)) { - $shareManager->deleteShare($share); - continue; + if ($dstMount instanceof \OCA\Files_Sharing\SharedMount) { + if (!($dstMount->getShare()->getPermissions() & Constants::PERMISSION_SHARE)) { + $shareManager->deleteShare($share); + continue; + } + $newPermissions = $share->getPermissions() & $dstMount->getShare()->getPermissions(); + } else { + $newPermissions = $share->getPermissions(); } + $share->setShareOwner($newOwner); - $share->setPermissions($share->getPermissions() & $dstMount->getShare()->getPermissions()); + $share->setPermissions($newPermissions); $shareManager->updateShare($share); } }