diff options
author | blizzz <blizzz@arthur-schiwon.de> | 2022-09-06 22:29:59 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-06 22:29:59 +0200 |
commit | 72aa4f51d7d25cc5ae72cf7d20072f5e8cd74b6d (patch) | |
tree | 53e3049cc65a28ea8d25cdbbf011f619c9d38c64 /apps/files_versions | |
parent | 2a59d48d0c7d920a7ce2bc5b8c56a0fffd17141f (diff) | |
parent | 7be578899590a053026c01d347717a5446f36124 (diff) | |
download | nextcloud-server-72aa4f51d7d25cc5ae72cf7d20072f5e8cd74b6d.tar.gz nextcloud-server-72aa4f51d7d25cc5ae72cf7d20072f5e8cd74b6d.zip |
Merge pull request #33804 from nextcloud/version-store-user
always use the default fs owner when storing versions
Diffstat (limited to 'apps/files_versions')
-rw-r--r-- | apps/files_versions/lib/Storage.php | 41 |
1 files changed, 27 insertions, 14 deletions
diff --git a/apps/files_versions/lib/Storage.php b/apps/files_versions/lib/Storage.php index 3f91e32ef95..4673b4850fa 100644 --- a/apps/files_versions/lib/Storage.php +++ b/apps/files_versions/lib/Storage.php @@ -46,6 +46,7 @@ use OC\Files\Search\SearchQuery; use OC_User; use OC\Files\Filesystem; use OC\Files\View; +use OCA\Files_Sharing\SharedMount; use OCA\Files_Versions\AppInfo\Application; use OCA\Files_Versions\Command\Expire; use OCA\Files_Versions\Events\CreateVersionEvent; @@ -188,33 +189,45 @@ class Storage { return false; } - [$uid, $filename] = self::getUidAndFilename($filename); + // since hook paths are always relative to the "default filesystem view" + // we always use the owner from there to get the full node + $uid = Filesystem::getView()->getOwner(''); - $files_view = new View('/'.$uid .'/files'); + /** @var IRootFolder $rootFolder */ + $rootFolder = \OC::$server->get(IRootFolder::class); + $userFolder = $rootFolder->getUserFolder($uid); $eventDispatcher = \OC::$server->get(IEventDispatcher::class); - $fileInfo = $files_view->getFileInfo($filename); - $id = $fileInfo->getId(); - $nodes = \OC::$server->get(IRootFolder::class)->getUserFolder($uid)->getById($id); - foreach ($nodes as $node) { - $event = new CreateVersionEvent($node); - $eventDispatcher->dispatch('OCA\Files_Versions::createVersion', $event); - if ($event->shouldCreateVersion() === false) { - return false; + try { + $file = $userFolder->get($filename); + } catch (NotFoundException $e) { + return false; + } + + $mount = $file->getMountPoint(); + if ($mount instanceof SharedMount) { + $ownerFolder = $rootFolder->getUserFolder($mount->getShare()->getShareOwner()); + $ownerNodes = $ownerFolder->getById($file->getId()); + if (count($ownerNodes)) { + $file = current($ownerNodes); } } // no use making versions for empty files - if ($fileInfo->getSize() === 0) { + if ($file->getSize() === 0) { + return false; + } + + $event = new CreateVersionEvent($file); + $eventDispatcher->dispatch('OCA\Files_Versions::createVersion', $event); + if ($event->shouldCreateVersion() === false) { return false; } /** @var IVersionManager $versionManager */ $versionManager = \OC::$server->get(IVersionManager::class); - $userManager = \OC::$server->get(IUserManager::class); - $user = $userManager->get($uid); - $versionManager->createVersion($user, $fileInfo); + $versionManager->createVersion($file->getOwner(), $file); } |