Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorblizzz <blizzz@arthur-schiwon.de>2022-09-06 23:29:59 +0300
committerGitHub <noreply@github.com>2022-09-06 23:29:59 +0300
commit72aa4f51d7d25cc5ae72cf7d20072f5e8cd74b6d (patch)
tree53e3049cc65a28ea8d25cdbbf011f619c9d38c64
parent2a59d48d0c7d920a7ce2bc5b8c56a0fffd17141f (diff)
parent7be578899590a053026c01d347717a5446f36124 (diff)
Merge pull request #33804 from nextcloud/version-store-user
always use the default fs owner when storing versions
-rw-r--r--apps/files_versions/lib/Storage.php41
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);
}