]> source.dussan.org Git - nextcloud-server.git/commitdiff
fix: Properly fetch version from shared files by accessing the owner storage version 41944/head
authorJulius Härtl <jus@bitgrid.net>
Thu, 30 Nov 2023 19:31:52 +0000 (20:31 +0100)
committerJulius Härtl <jus@bitgrid.net>
Wed, 6 Dec 2023 15:01:53 +0000 (16:01 +0100)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
apps/files_versions/lib/Versions/LegacyVersionsBackend.php

index 36faf893d66aa5c03f8aa4126ede6e33d052cf2e..784bc0e54499e81ce72f99b41939bd60a472e2f9 100644 (file)
@@ -27,6 +27,7 @@ declare(strict_types=1);
 namespace OCA\Files_Versions\Versions;
 
 use OC\Files\View;
+use OCA\Files_Sharing\ISharedStorage;
 use OCA\Files_Sharing\SharedStorage;
 use OCA\Files_Versions\Db\VersionEntity;
 use OCA\Files_Versions\Db\VersionsMapper;
@@ -196,6 +197,21 @@ class LegacyVersionsBackend implements IVersionBackend, INameableVersionBackend,
 
        public function getVersionFile(IUser $user, FileInfo $sourceFile, $revision): File {
                $userFolder = $this->rootFolder->getUserFolder($user->getUID());
+               $owner = $sourceFile->getOwner();
+               $storage = $sourceFile->getStorage();
+
+               // Shared files have their versions in the owners root folder so we need to obtain them from there
+               if ($storage->instanceOfStorage(ISharedStorage::class) && $owner) {
+                       /** @var SharedStorage $storage */
+                       $userFolder = $this->rootFolder->getUserFolder($owner->getUID());
+                       $user = $owner;
+                       $ownerPathInStorage = $sourceFile->getInternalPath();
+                       $sourceFile = $storage->getShare()->getNode();
+                       if ($sourceFile instanceof Folder) {
+                               $sourceFile = $sourceFile->get($ownerPathInStorage);
+                       }
+               }
+
                $versionFolder = $this->getVersionFolder($user);
                /** @var File $file */
                $file = $versionFolder->get($userFolder->getRelativePath($sourceFile->getPath()) . '.v' . $revision);