From 6d554022ef436e478369dd09a7434ccf31146302 Mon Sep 17 00:00:00 2001 From: Sujith Haridasan Date: Mon, 5 Oct 2020 21:34:15 +0530 Subject: [PATCH] Fix the deletion error in public links When user tries to delete the files in a public link, the files don't get deleted. The tagManager gets null and there was no check to handle this. Added check for this. Signed-off-by: Sujith Haridasan --- lib/FilesHooks.php | 16 ++++++++++------ tests/FilesHooksTest.php | 11 +++++++++-- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/lib/FilesHooks.php b/lib/FilesHooks.php index f29def7d1..40d3b53b6 100755 --- a/lib/FilesHooks.php +++ b/lib/FilesHooks.php @@ -190,16 +190,20 @@ private function getFileChangeActivitySettings(int $fileId, array $users): array $filteredEmailUsers = $this->userSettings->filterUsersBySetting($users, 'email', Files::TYPE_FILE_CHANGED); $filteredNotificationUsers = $this->userSettings->filterUsersBySetting($users, 'notification', Files::TYPE_FILE_CHANGED); - $favoriteUsers = $this->tagManager->getUsersFavoritingObject($fileId); - if (!empty($favoriteUsers)) { - $favoriteUsers = array_intersect($users, $favoriteUsers); + if ($this->tagManager !== null) { + $favoriteUsers = $this->tagManager->getUsersFavoritingObject($fileId); if (!empty($favoriteUsers)) { - $filteredEmailUsers = array_merge($filteredEmailUsers, $this->userSettings->filterUsersBySetting($favoriteUsers, 'email', Files::TYPE_FAVORITE_CHANGED)); - $filteredNotificationUsers = array_merge($filteredNotificationUsers, $this->userSettings->filterUsersBySetting($favoriteUsers, 'notification', Files::TYPE_FAVORITE_CHANGED)); + $favoriteUsers = array_intersect($users, $favoriteUsers); + if (!empty($favoriteUsers)) { + $filteredEmailUsers = array_merge($filteredEmailUsers, $this->userSettings->filterUsersBySetting($favoriteUsers, 'email', Files::TYPE_FAVORITE_CHANGED)); + $filteredNotificationUsers = array_merge($filteredNotificationUsers, $this->userSettings->filterUsersBySetting($favoriteUsers, 'notification', Files::TYPE_FAVORITE_CHANGED)); + } } + + return [$filteredEmailUsers, $filteredNotificationUsers]; } - return [$filteredEmailUsers, $filteredNotificationUsers]; + return [[null], [null]]; } /** diff --git a/tests/FilesHooksTest.php b/tests/FilesHooksTest.php index 6b0017a59..fbb49a716 100755 --- a/tests/FilesHooksTest.php +++ b/tests/FilesHooksTest.php @@ -143,7 +143,7 @@ protected function getFilesHooks(array $mockedMethods = [], string $user = 'user $this->notificationGenerator, $this->tagManager ]) - ->onlyMethods($mockedMethods) + ->setMethods($mockedMethods) ->getMock(); } @@ -891,7 +891,7 @@ public function testShareNotificationForOriginalOwners(bool $validMountPoint, bo if ($validMountPoint) { $storage = $this->getMockBuilder(SharedStorage::class) ->disableOriginalConstructor() - ->onlyMethods([ + ->setMethods([ 'instanceOfStorage', 'getSharedFrom', ]) @@ -1066,4 +1066,11 @@ public function testAddNotificationsForUser(string $user, string $subject, array self::invokePrivate($this->filesHooks, 'addNotificationsForUser', [$user, $subject, $parameter, $fileId, $path, $isFile, $email, $notification, $type]); } + + public function testPublicLinkActivity() { + $fileHooks = $this->getFilesHooks(); + $result = $this->invokePrivate($fileHooks, 'getFileChangeActivitySettings', [12, ['user']]); + + $this->assertEquals([null, null], $result); + } }