diff --git a/apps/files_sharing/lib/Listener/BeforeZipCreatedListener.php b/apps/files_sharing/lib/Listener/BeforeZipCreatedListener.php index 1fc62bfe0fa58..e638a088fbe1b 100644 --- a/apps/files_sharing/lib/Listener/BeforeZipCreatedListener.php +++ b/apps/files_sharing/lib/Listener/BeforeZipCreatedListener.php @@ -32,12 +32,17 @@ public function handle(Event $event): void { return; } + /** @psalm-suppress DeprecatedMethod should be migrated to getFolder but for now it would just duplicate code */ $dir = $event->getDirectory(); $files = $event->getFiles(); - $pathsToCheck = []; - foreach ($files as $file) { - $pathsToCheck[] = $dir . '/' . $file; + if (empty($files)) { + $pathsToCheck = [$dir]; + } else { + $pathsToCheck = []; + foreach ($files as $file) { + $pathsToCheck[] = $dir . '/' . $file; + } } // Check only for user/group shares. Don't restrict e.g. share links diff --git a/apps/files_sharing/lib/ViewOnly.php b/apps/files_sharing/lib/ViewOnly.php index e075677248abe..382eb190a8936 100644 --- a/apps/files_sharing/lib/ViewOnly.php +++ b/apps/files_sharing/lib/ViewOnly.php @@ -24,7 +24,7 @@ public function __construct( } /** - * @param string[] $pathsToCheck + * @param string[] $pathsToCheck paths to check, relative to the user folder * @return bool */ public function check(array $pathsToCheck): bool { diff --git a/lib/public/Files/Events/BeforeZipCreatedEvent.php b/lib/public/Files/Events/BeforeZipCreatedEvent.php index 0363d385d364c..ea84da64a1d4b 100644 --- a/lib/public/Files/Events/BeforeZipCreatedEvent.php +++ b/lib/public/Files/Events/BeforeZipCreatedEvent.php @@ -21,12 +21,13 @@ * @since 25.0.0 */ class BeforeZipCreatedEvent extends Event { - private string $directory; + private string $directory = ''; private bool $successful = true; private ?string $errorMessage = null; private ?Folder $folder = null; /** + * @param string|Folder $directory Folder instance, or (deprecated) string path relative to user folder * @param list $files * @since 25.0.0 * @since 31.0.0 support `OCP\Files\Folder` as `$directory` parameter - passing a string is deprecated now @@ -37,7 +38,6 @@ public function __construct( ) { parent::__construct(); if ($directory instanceof Folder) { - $this->directory = $directory->getPath(); $this->folder = $directory; } else { $this->directory = $directory; @@ -53,8 +53,13 @@ public function getFolder(): ?Folder { /** * @since 25.0.0 + * @deprecated 33.0.0 Use getFolder instead and use node API + * @return string returns folder path relative to user folder */ public function getDirectory(): string { + if ($this->folder instanceof Folder) { + return preg_replace('|^/[^/]+/files/|', '/', $this->folder->getPath()); + } return $this->directory; }