]> source.dussan.org Git - nextcloud-server.git/commitdiff
Change share owner when moving share out of share
authorLouis Chemineau <louis@chmn.me>
Thu, 31 Mar 2022 10:08:42 +0000 (12:08 +0200)
committerLouis (Rebase PR Action) <artonge@users.noreply.github.com>
Tue, 26 Jul 2022 12:17:46 +0000 (12:17 +0000)
Signed-off-by: Louis Chemineau <louis@chmn.me>
apps/files_sharing/lib/Updater.php

index b110b2045f9d9827c3de997a82851ca0669cedf7..a1159cc3f581606c4d475044b15f33fbc4ce15d3 100644 (file)
@@ -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 @@ class Updater {
         *
         * @param string $path
         */
-       private static function moveShareToShare($path) {
+       private static function moveShareInOrOutOfShare($path): void {
                $userFolder = \OC::$server->getUserFolder();
 
                // If the user folder can't be constructed (e.g. link share) just return.
@@ -85,11 +85,6 @@ class Updater {
                // 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;
-               }
-
-               $newOwner = $dstMount->getShare()->getShareOwner();
 
                //Ownership is moved over
                foreach ($shares as $share) {
@@ -101,13 +96,20 @@ class Updater {
                                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;
+                               }
+                               $newOwner = $dstMount->getShare()->getShareOwner();
+                               $newPermissions = $share->getPermissions() & $dstMount->getShare()->getPermissions();
+                       } else {
+                               $newOwner = $userFolder->getOwner()->getUID();
+                               $newPermissions = $share->getPermissions();
                        }
+
                        $share->setShareOwner($newOwner);
-                       $share->setPermissions($share->getPermissions() & $dstMount->getShare()->getPermissions());
+                       $share->setPermissions($newPermissions);
                        $shareManager->updateShare($share);
                }
        }