diff options
author | Anna Larch <anna@nextcloud.com> | 2024-12-12 15:53:11 +0100 |
---|---|---|
committer | Anna Larch <anna@nextcloud.com> | 2024-12-17 14:54:44 +0100 |
commit | a39a5c672a7c78b5f77213235cdee727f2b26ce6 (patch) | |
tree | 313859111568f31ab165c4cd9959188dbc99aac5 | |
parent | 4f74901edabe14c400931db6f431ca6ee5ceb24b (diff) | |
download | nextcloud-server-fix/noid/empty-path-for-files-versions.tar.gz nextcloud-server-fix/noid/empty-path-for-files-versions.zip |
fix: add owner fallbackfix/noid/empty-path-for-files-versions
Signed-off-by: Anna Larch <anna@nextcloud.com>
-rw-r--r-- | apps/files_versions/lib/Listener/FileEventsListener.php | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/apps/files_versions/lib/Listener/FileEventsListener.php b/apps/files_versions/lib/Listener/FileEventsListener.php index 3273f1f9c40..145c572160f 100644 --- a/apps/files_versions/lib/Listener/FileEventsListener.php +++ b/apps/files_versions/lib/Listener/FileEventsListener.php @@ -384,16 +384,7 @@ class FileEventsListener implements IEventListener { $owner = $node->getOwner()?->getUid(); - // If no owner, extract it from the path. - // e.g. /user/files/foobar.txt - if (!$owner) { - $parts = explode('/', $node->getPath(), 4); - if (count($parts) === 4) { - $owner = $parts[1]; - } - } - - if ($owner) { + if ($owner !== null) { $path = $this->rootFolder ->getUserFolder($owner) ->getRelativePath($node->getPath()); @@ -403,6 +394,22 @@ class FileEventsListener implements IEventListener { } } - return null; + // If no owner, or didn't find a path for the owner, + // extract the owner name from the path and try again + // Happens when a file version is owned by a different user than the owner of + // the original file + // @see https://github.com/nextcloud/server/issues/40090 + $parts = explode('/', $node->getPath(), 4); + if (count($parts) === 4) { + $owner = $parts[1]; + } + + if ($owner === '' || $owner === null) { + return null; + } + + return $this->rootFolder + ->getUserFolder($owner) + ->getRelativePath($node->getPath()); } } |