diff --git a/lib/Share/Listener.php b/lib/Share/Listener.php index 5d091cace7e..442a553bd33 100644 --- a/lib/Share/Listener.php +++ b/lib/Share/Listener.php @@ -52,7 +52,6 @@ protected function overwriteShareTarget(BeforeShareCreatedEvent $event): void { protected function overwriteMountPoint(VerifyMountPointEvent $event): void { $share = $event->getShare(); - $view = $event->getView(); if ($share->getShareType() !== IShare::TYPE_ROOM && $share->getShareType() !== RoomShareProvider::SHARE_TYPE_USERROOM) { @@ -60,22 +59,31 @@ protected function overwriteMountPoint(VerifyMountPointEvent $event): void { } if ($event->getParent() === RoomShareProvider::TALK_FOLDER_PLACEHOLDER) { - // If we fail to get the owner of the view from the cache, - // e.g. because the user never logged in but a cron job runs - // We fall back to calculating the owner from the root of the view: - if (substr_count($view->getRoot(), '/') >= 2) { - // /37c09aa0-1b92-4cf6-8c66-86d8cac8c1d0/files - [, $userId, ] = explode('/', $view->getRoot(), 3); + if (method_exists($event, 'getUser')) { + $userId = $event->getUser()->getUID(); } else { - // Something weird is going on, we can't fall back more - // so for now we don't overwrite the share path ¯\_(ツ)_/¯ - return; + $view = $event->getView(); + // If we fail to get the owner of the view from the cache, + // e.g. because the user never logged in but a cron job runs + // We fall back to calculating the owner from the root of the view: + if (substr_count($view->getRoot(), '/') >= 2) { + // /37c09aa0-1b92-4cf6-8c66-86d8cac8c1d0/files + [, $userId, ] = explode('/', $view->getRoot(), 3); + } else { + // Something weird is going on, we can't fall back more + // so for now we don't overwrite the share path ¯\_(ツ)_/¯ + return; + } } $parent = $this->config->getAttachmentFolder($userId); $event->setParent($parent); - if (!$event->getView()->is_dir($parent)) { - $event->getView()->mkdir($parent); + if (method_exists($event, 'setCreateParent')) { + $event->setCreateParent(true); + } else { + if (!$event->getView()->is_dir($parent)) { + $event->getView()->mkdir($parent); + } } } } diff --git a/tests/integration/features/sharing-2/get.feature b/tests/integration/features/sharing-2/get.feature index 9aa4f6f0d75..597d7722028 100644 --- a/tests/integration/features/sharing-2/get.feature +++ b/tests/integration/features/sharing-2/get.feature @@ -1315,6 +1315,7 @@ Feature: get And user "participant2" gets the DAV properties for "/" And the list of returned files for "participant2" is | / | + | /Talk/ | | /welcome.txt | Scenario: get files after deleting a received share @@ -1347,6 +1348,7 @@ Feature: get And user "participant2" gets the DAV properties for "/" And the list of returned files for "participant2" is | / | + | /Talk/ | | /welcome.txt |