diff --git a/apps/files_versions/lib/Listener/FileEventsListener.php b/apps/files_versions/lib/Listener/FileEventsListener.php index fe638364b9d0d..5db556e4dad06 100644 --- a/apps/files_versions/lib/Listener/FileEventsListener.php +++ b/apps/files_versions/lib/Listener/FileEventsListener.php @@ -58,11 +58,13 @@ use OCP\Files\IMimeTypeLoader; use OCP\Files\IRootFolder; use OCP\Files\Node; +use OCP\IUserSession; use Psr\Log\LoggerInterface; class FileEventsListener implements IEventListener { private IRootFolder $rootFolder; private VersionsMapper $versionsMapper; + private IUserSession $userSession; /** * @var array */ @@ -83,11 +85,13 @@ public function __construct( VersionsMapper $versionsMapper, IMimeTypeLoader $mimeTypeLoader, LoggerInterface $logger, + IUserSession $userSession, ) { $this->rootFolder = $rootFolder; $this->versionsMapper = $versionsMapper; $this->mimeTypeLoader = $mimeTypeLoader; $this->logger = $logger; + $this->userSession = $userSession; } public function handle(Event $event): void { @@ -352,14 +356,28 @@ public function pre_renameOrCopy_hook(Node $source, Node $target): void { * If no user is connected, use the node's owner. */ private function getPathForNode(Node $node): ?string { - try { - return $this->rootFolder - ->getUserFolder(\OC_User::getUser()) + $user = $this->userSession->getUser()?->getUID(); + if ($user) { + $path = $this->rootFolder + ->getUserFolder($user) ->getRelativePath($node->getPath()); - } catch (\Throwable $ex) { - return $this->rootFolder - ->getUserFolder($node->getOwner()->getUid()) + + if ($path !== null) { + return $path; + } + } + + $owner = $node->getOwner()?->getUid(); + if ($owner) { + $path = $this->rootFolder + ->getUserFolder($owner) ->getRelativePath($node->getPath()); + + if ($path !== null) { + return $path; + } } + + return null; } }