diff options
-rw-r--r-- | apps/files/lib/Activity/Provider.php | 61 | ||||
-rw-r--r-- | apps/files/tests/Activity/ProviderTest.php | 208 | ||||
-rw-r--r-- | apps/files_sharing/lib/Activity/Providers/Base.php | 184 | ||||
-rw-r--r-- | apps/files_sharing/lib/Activity/Providers/Downloads.php | 108 | ||||
-rw-r--r-- | apps/files_sharing/lib/Activity/Providers/Groups.php | 188 | ||||
-rw-r--r-- | apps/files_sharing/lib/Activity/Providers/PublicLinks.php | 206 | ||||
-rw-r--r-- | apps/files_sharing/lib/Activity/Providers/RemoteShares.php | 134 | ||||
-rw-r--r-- | apps/files_sharing/lib/Activity/Providers/Users.php | 220 |
8 files changed, 541 insertions, 768 deletions
diff --git a/apps/files/lib/Activity/Provider.php b/apps/files/lib/Activity/Provider.php index ae303034610..3efab382640 100644 --- a/apps/files/lib/Activity/Provider.php +++ b/apps/files/lib/Activity/Provider.php @@ -103,7 +103,7 @@ class Provider implements IProvider { * @since 11.0.0 */ public function parseShortVersion(IEvent $event, IEvent $previousEvent = null) { - $parsedParameters = $this->getParameters($event->getSubject(), $event->getSubjectParameters()); + $parsedParameters = $this->getParameters($event); if ($event->getSubject() === 'created_by') { $subject = $this->l->t('Created by {user}'); @@ -128,9 +128,7 @@ class Provider implements IProvider { $this->setSubjects($event, $subject, $parsedParameters); - $event = $this->eventMerger->mergeEvents('user', $event, $previousEvent); - - return $event; + return $this->eventMerger->mergeEvents('user', $event, $previousEvent); } /** @@ -141,7 +139,7 @@ class Provider implements IProvider { * @since 11.0.0 */ public function parseLongVersion(IEvent $event, IEvent $previousEvent = null) { - $parsedParameters = $this->getParameters($event->getSubject(), $event->getSubjectParameters()); + $parsedParameters = $this->getParameters($event); if ($event->getSubject() === 'created_self') { $subject = $this->l->t('You created {file}'); @@ -211,44 +209,65 @@ class Provider implements IProvider { ->setRichSubject($subject, $parameters); } - protected function getParameters($subject, array $parameters) { - switch ($subject) { + /** + * @param IEvent $event + * @return array + * @throws \InvalidArgumentException + */ + protected function getParameters(IEvent $event) { + $parameters = $event->getSubjectParameters(); + switch ($event->getSubject()) { case 'created_self': case 'created_public': case 'changed_self': case 'deleted_self': case 'restored_self': return [ - 'file' => $this->getRichFileParameter($parameters[0]), + 'file' => $this->getFile($parameters[0], $event), ]; case 'created_by': case 'changed_by': case 'deleted_by': case 'restored_by': return [ - 'file' => $this->getRichFileParameter($parameters[0]), - 'user' => $this->getRichUserParameter($parameters[1]), + 'file' => $this->getFile($parameters[0], $event), + 'user' => $this->getUser($parameters[1]), ]; case 'renamed_self': case 'moved_self': return [ - 'newfile' => $this->getRichFileParameter($parameters[0]), - 'oldfile' => $this->getRichFileParameter($parameters[1]), + 'newfile' => $this->getFile($parameters[0]), + 'oldfile' => $this->getFile($parameters[1]), ]; case 'renamed_by': case 'moved_by': return [ - 'newfile' => $this->getRichFileParameter($parameters[0]), - 'user' => $this->getRichUserParameter($parameters[1]), - 'oldfile' => $this->getRichFileParameter($parameters[2]), + 'newfile' => $this->getFile($parameters[0]), + 'user' => $this->getUser($parameters[1]), + 'oldfile' => $this->getFile($parameters[2]), ]; } return []; } - protected function getRichFileParameter($parameter) { - $path = reset($parameter); - $id = key($parameter); + /** + * @param array|string $parameter + * @param IEvent|null $event + * @return array + * @throws \InvalidArgumentException + */ + protected function getFile($parameter, IEvent $event = null) { + if (is_array($parameter)) { + $path = reset($parameter); + $id = (string) key($parameter); + } else if ($event !== null) { + // Legacy from before ownCloud 8.2 + $path = $parameter; + $id = $event->getObjectId(); + } else { + throw new \InvalidArgumentException('Could not generate file parameter'); + } + return [ 'type' => 'file', 'id' => $id, @@ -258,7 +277,11 @@ class Provider implements IProvider { ]; } - protected function getRichUserParameter($uid) { + /** + * @param string $uid + * @return array + */ + protected function getUser($uid) { if (!isset($this->displayNames[$uid])) { $this->displayNames[$uid] = $this->getDisplayName($uid); } diff --git a/apps/files/tests/Activity/ProviderTest.php b/apps/files/tests/Activity/ProviderTest.php new file mode 100644 index 00000000000..6cb89961a1b --- /dev/null +++ b/apps/files/tests/Activity/ProviderTest.php @@ -0,0 +1,208 @@ +<?php +/** + * @copyright Copyright (c) 2017 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\Files\Tests\Activity; + + +use OCA\Files\Activity\Provider; +use OCP\Activity\IEvent; +use OCP\Activity\IEventMerger; +use OCP\Activity\IManager; +use OCP\IURLGenerator; +use OCP\IUser; +use OCP\IUserManager; +use OCP\L10N\IFactory; +use Test\TestCase; + +/** + * Class ProviderTest + * + * @package OCA\Files\Tests\Activity + */ +class ProviderTest extends TestCase { + + /** @var IFactory|\PHPUnit_Framework_MockObject_MockObject */ + protected $l10nFactory; + /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */ + protected $url; + /** @var IManager|\PHPUnit_Framework_MockObject_MockObject */ + protected $activityManager; + /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */ + protected $userManager; + /** @var IEventMerger|\PHPUnit_Framework_MockObject_MockObject */ + protected $eventMerger; + + public function setUp() { + parent::setUp(); + + $this->l10nFactory = $this->createMock(IFactory::class); + $this->url = $this->createMock(IURLGenerator::class); + $this->activityManager = $this->createMock(IManager::class); + $this->userManager = $this->createMock(IUserManager::class); + $this->eventMerger = $this->createMock(IEventMerger::class); + } + + /** + * @param string[] $methods + * @return Provider|\PHPUnit_Framework_MockObject_MockObject + */ + protected function getProvider(array $methods = []) { + if (!empty($methods)) { + return $this->getMockBuilder(Provider::class) + ->setConstructorArgs([ + $this->l10nFactory, + $this->url, + $this->activityManager, + $this->userManager, + $this->eventMerger, + ]) + ->setMethods($methods) + ->getMock(); + } + return new Provider( + $this->l10nFactory, + $this->url, + $this->activityManager, + $this->userManager, + $this->eventMerger + ); + } + + public function dataGetFile() { + return [ + [[42 => '/FortyTwo.txt'], null, '42', 'FortyTwo.txt', 'FortyTwo.txt'], + [['23' => '/Twenty/Three.txt'], null, '23', 'Three.txt', 'Twenty/Three.txt'], + ['/Foo/Bar.txt', '128', '128', 'Bar.txt', 'Foo/Bar.txt'], // Legacy from ownCloud 8.2 and before + ]; + } + + /** + * @dataProvider dataGetFile + * @param mixed $parameter + * @param mixed $eventId + * @param int $id + * @param string $name + * @param string $path + */ + public function testGetFile($parameter, $eventId, $id, $name, $path) { + $provider = $this->getProvider(); + + if ($eventId !== null) { + $event = $this->createMock(IEvent::class); + $event->expects($this->once()) + ->method('getObjectId') + ->willReturn($eventId); + } else { + $event = null; + } + + $this->url->expects($this->once()) + ->method('linkToRouteAbsolute') + ->with('files.viewcontroller.showFile', ['fileid' => $id]) + ->willReturn('link-' . $id); + + $result = self::invokePrivate($provider, 'getFile', [$parameter, $event]); + + $this->assertSame('file', $result['type']); + $this->assertSame($id, $result['id']); + $this->assertSame($name, $result['name']); + $this->assertSame($path, $result['path']); + $this->assertSame('link-' . $id, $result['link']); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testGetFileThrows() { + $provider = $this->getProvider(); + self::invokePrivate($provider, 'getFile', ['/Foo/Bar.txt', null]); + } + + public function dataGetUser() { + return [ + ['test', [], false, 'Test'], + ['foo', ['admin' => 'Admin'], false, 'Bar'], + ['admin', ['admin' => 'Administrator'], true, 'Administrator'], + ]; + } + + /** + * @dataProvider dataGetUser + * @param string $uid + * @param array $cache + * @param bool $cacheHit + * @param string $name + */ + public function testGetUser($uid, $cache, $cacheHit, $name) { + $provider = $this->getProvider(['getDisplayName']); + + self::invokePrivate($provider, 'displayNames', [$cache]); + + if (!$cacheHit) { + $provider->expects($this->once()) + ->method('getDisplayName') + ->with($uid) + ->willReturn($name); + } else { + $provider->expects($this->never()) + ->method('getDisplayName'); + } + + $result = self::invokePrivate($provider, 'getUser', [$uid]); + $this->assertSame('user', $result['type']); + $this->assertSame($uid, $result['id']); + $this->assertSame($name, $result['name']); + } + + public function dataGetDisplayName() { + return [ + ['test', true, 'Test'], + ['foo', false, 'foo'], + ]; + } + + /** + * @dataProvider dataGetDisplayName + * @param string $uid + * @param string $name + */ + public function testGetDisplayNamer($uid, $validUser, $name) { + $provider = $this->getProvider(); + + if ($validUser) { + $user = $this->createMock(IUser::class); + $user->expects($this->once()) + ->method('getDisplayName') + ->willReturn($name); + $this->userManager->expects($this->once()) + ->method('get') + ->with($uid) + ->willReturn($user); + } else { + $this->userManager->expects($this->once()) + ->method('get') + ->with($uid) + ->willReturn(null); + } + + $this->assertSame($name, self::invokePrivate($provider, 'getDisplayName', [$uid])); + } +} diff --git a/apps/files_sharing/lib/Activity/Providers/Base.php b/apps/files_sharing/lib/Activity/Providers/Base.php new file mode 100644 index 00000000000..3b73c23786e --- /dev/null +++ b/apps/files_sharing/lib/Activity/Providers/Base.php @@ -0,0 +1,184 @@ +<?php +/** + * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\Files_Sharing\Activity\Providers; + +use OCP\Activity\IEvent; +use OCP\Activity\IManager; +use OCP\Activity\IProvider; +use OCP\IL10N; +use OCP\IURLGenerator; +use OCP\IUser; +use OCP\IUserManager; +use OCP\L10N\IFactory; + +abstract class Base implements IProvider { + + /** @var IFactory */ + protected $languageFactory; + + /** @var IL10N */ + protected $l; + + /** @var IURLGenerator */ + protected $url; + + /** @var IManager */ + protected $activityManager; + + /** @var IUserManager */ + protected $userManager; + + /** @var array */ + protected $displayNames = []; + + /** + * @param IFactory $languageFactory + * @param IURLGenerator $url + * @param IManager $activityManager + * @param IUserManager $userManager + */ + public function __construct(IFactory $languageFactory, IURLGenerator $url, IManager $activityManager, IUserManager $userManager) { + $this->languageFactory = $languageFactory; + $this->url = $url; + $this->activityManager = $activityManager; + $this->userManager = $userManager; + } + + /** + * @param string $language + * @param IEvent $event + * @param IEvent|null $previousEvent + * @return IEvent + * @throws \InvalidArgumentException + * @since 11.0.0 + */ + public function parse($language, IEvent $event, IEvent $previousEvent = null) { + if ($event->getApp() !== 'files_sharing') { + throw new \InvalidArgumentException(); + } + + $this->l = $this->languageFactory->get('files_sharing', $language); + + if ($this->activityManager->isFormattingFilteredObject()) { + try { + return $this->parseShortVersion($event); + } catch (\InvalidArgumentException $e) { + // Ignore and simply use the long version... + } + } + + return $this->parseLongVersion($event); + } + + /** + * @param IEvent $event + * @return IEvent + * @throws \InvalidArgumentException + * @since 11.0.0 + */ + abstract protected function parseShortVersion(IEvent $event); + + /** + * @param IEvent $event + * @return IEvent + * @throws \InvalidArgumentException + * @since 11.0.0 + */ + abstract protected function parseLongVersion(IEvent $event); + + /** + * @param IEvent $event + * @param string $subject + * @param array $parameters + * @throws \InvalidArgumentException + */ + protected function setSubjects(IEvent $event, $subject, array $parameters) { + $placeholders = $replacements = []; + foreach ($parameters as $placeholder => $parameter) { + $placeholders[] = '{' . $placeholder . '}'; + if ($parameter['type'] === 'file') { + $replacements[] = $parameter['path']; + } else { + $replacements[] = $parameter['name']; + } + } + + $event->setParsedSubject(str_replace($placeholders, $replacements, $subject)) + ->setRichSubject($subject, $parameters); + } + + /** + * @param array|string $parameter + * @param IEvent|null $event + * @return array + * @throws \InvalidArgumentException + */ + protected function getFile($parameter, IEvent $event = null) { + if (is_array($parameter)) { + $path = reset($parameter); + $id = (string) key($parameter); + } else if ($event !== null) { + // Legacy from before ownCloud 8.2 + $path = $parameter; + $id = $event->getObjectId(); + } else { + throw new \InvalidArgumentException('Could not generate file parameter'); + } + + return [ + 'type' => 'file', + 'id' => $id, + 'name' => basename($path), + 'path' => trim($path, '/'), + 'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]), + ]; + } + + /** + * @param string $uid + * @return array + */ + protected function getUser($uid) { + if (!isset($this->displayNames[$uid])) { + $this->displayNames[$uid] = $this->getDisplayName($uid); + } + + return [ + 'type' => 'user', + 'id' => $uid, + 'name' => $this->displayNames[$uid], + ]; + } + + /** + * @param string $uid + * @return string + */ + protected function getDisplayName($uid) { + $user = $this->userManager->get($uid); + if ($user instanceof IUser) { + return $user->getDisplayName(); + } else { + return $uid; + } + } +} diff --git a/apps/files_sharing/lib/Activity/Providers/Downloads.php b/apps/files_sharing/lib/Activity/Providers/Downloads.php index 01012e4785b..eb14c16266c 100644 --- a/apps/files_sharing/lib/Activity/Providers/Downloads.php +++ b/apps/files_sharing/lib/Activity/Providers/Downloads.php @@ -22,25 +22,9 @@ namespace OCA\Files_Sharing\Activity\Providers; use OCP\Activity\IEvent; -use OCP\Activity\IManager; -use OCP\Activity\IProvider; -use OCP\IL10N; -use OCP\IURLGenerator; -use OCP\L10N\IFactory; -class Downloads implements IProvider { +class Downloads extends Base { - /** @var IFactory */ - protected $languageFactory; - - /** @var IL10N */ - protected $l; - - /** @var IURLGenerator */ - protected $url; - - /** @var IManager */ - protected $activityManager; const SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED = 'public_shared_file_downloaded'; const SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED = 'public_shared_folder_downloaded'; @@ -49,43 +33,6 @@ class Downloads implements IProvider { const SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED = 'folder_shared_with_email_downloaded'; /** - * @param IFactory $languageFactory - * @param IURLGenerator $url - * @param IManager $activityManager - */ - public function __construct(IFactory $languageFactory, IURLGenerator $url, IManager $activityManager) { - $this->languageFactory = $languageFactory; - $this->url = $url; - $this->activityManager = $activityManager; - } - - /** - * @param string $language - * @param IEvent $event - * @param IEvent|null $previousEvent - * @return IEvent - * @throws \InvalidArgumentException - * @since 11.0.0 - */ - public function parse($language, IEvent $event, IEvent $previousEvent = null) { - if ($event->getApp() !== 'files_sharing') { - throw new \InvalidArgumentException(); - } - - $this->l = $this->languageFactory->get('files_sharing', $language); - - if ($this->activityManager->isFormattingFilteredObject()) { - try { - return $this->parseShortVersion($event); - } catch (\InvalidArgumentException $e) { - // Ignore and simply use the long version... - } - } - - return $this->parseLongVersion($event); - } - - /** * @param IEvent $event * @return IEvent * @throws \InvalidArgumentException @@ -96,19 +43,17 @@ class Downloads implements IProvider { if ($event->getSubject() === self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED || $event->getSubject() === self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED) { - $event->setParsedSubject($this->l->t('Downloaded via public link')) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/download.svg'))); + $subject = $this->l->t('Downloaded via public link'); } else if ($event->getSubject() === self::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED || $event->getSubject() === self::SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED) { - $event->setParsedSubject($this->l->t('Downloaded by %1$s', $parsedParameters['email']['name'])) - ->setRichSubject($this->l->t('Downloaded by {email}'), [ - 'email' => $parsedParameters['email'], - ]) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/download.svg'))); + $subject = $this->l->t('Downloaded by {email}'); } else { throw new \InvalidArgumentException(); } + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/download.svg'))); + $this->setSubjects($event, $subject, $parsedParameters); + return $event; } @@ -123,34 +68,24 @@ class Downloads implements IProvider { if ($event->getSubject() === self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED || $event->getSubject() === self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED) { - $event->setParsedSubject($this->l->t('%1$s downloaded via public link', [ - $parsedParameters['file']['path'], - ])) - ->setRichSubject($this->l->t('{file} downloaded via public link'), [ - 'file' => $parsedParameters['file'], - ]) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/download.svg'))); + $subject = $this->l->t('{file} downloaded via public link'); } else if ($event->getSubject() === self::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED || $event->getSubject() === self::SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED) { - $event->setParsedSubject($this->l->t('%1$s downloaded %2$s', [ - $parsedParameters['email']['name'], - $parsedParameters['file']['path'], - ])) - ->setRichSubject($this->l->t('{email} downloaded {file}'), [ - 'email' => $parsedParameters['email'], - 'file' => $parsedParameters['file'], - ]) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/download.svg'))); + $subject = $this->l->t('{email} downloaded {file}'); } else { throw new \InvalidArgumentException(); } + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/download.svg'))); + $this->setSubjects($event, $subject, $parsedParameters); + return $event; } /** * @param IEvent $event * @return array + * @throws \InvalidArgumentException */ protected function getParsedParameters(IEvent $event) { $subject = $event->getSubject(); @@ -160,12 +95,12 @@ class Downloads implements IProvider { case self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED: case self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED: return [ - 'file' => $this->generateFileParameter($event->getObjectId(), $parameters[0]), + 'file' => $this->getFile($parameters[0], $event), ]; case self::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED: case self::SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED: return [ - 'file' => $this->generateFileParameter($event->getObjectId(), $parameters[0]), + 'file' => $this->getFile($parameters[0], $event), 'email' => [ 'type' => 'email', 'id' => $parameters[1], @@ -176,19 +111,4 @@ class Downloads implements IProvider { throw new \InvalidArgumentException(); } - - /** - * @param int $id - * @param string $path - * @return array - */ - protected function generateFileParameter($id, $path) { - return [ - 'type' => 'file', - 'id' => $id, - 'name' => basename($path), - 'path' => trim($path, '/'), - 'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]), - ]; - } } diff --git a/apps/files_sharing/lib/Activity/Providers/Groups.php b/apps/files_sharing/lib/Activity/Providers/Groups.php index 6c25572d0d4..06ccdaa98b3 100644 --- a/apps/files_sharing/lib/Activity/Providers/Groups.php +++ b/apps/files_sharing/lib/Activity/Providers/Groups.php @@ -22,79 +22,14 @@ namespace OCA\Files_Sharing\Activity\Providers; use OCP\Activity\IEvent; -use OCP\Activity\IManager; -use OCP\Activity\IProvider; -use OCP\IL10N; -use OCP\IURLGenerator; -use OCP\IUser; -use OCP\IUserManager; -use OCP\L10N\IFactory; -class Groups implements IProvider { - - /** @var IFactory */ - protected $languageFactory; - - /** @var IL10N */ - protected $l; - - /** @var IURLGenerator */ - protected $url; - - /** @var IManager */ - protected $activityManager; - - /** @var IUserManager */ - protected $userManager; - - /** @var array */ - protected $displayNames = []; +class Groups extends Base { const SUBJECT_SHARED_GROUP_SELF = 'shared_group_self'; const SUBJECT_RESHARED_GROUP_BY = 'reshared_group_by'; const SUBJECT_UNSHARED_GROUP_SELF = 'unshared_group_self'; const SUBJECT_UNSHARED_GROUP_BY = 'unshared_group_by'; - - /** - * @param IFactory $languageFactory - * @param IURLGenerator $url - * @param IManager $activityManager - * @param IUserManager $userManager - */ - public function __construct(IFactory $languageFactory, IURLGenerator $url, IManager $activityManager, IUserManager $userManager) { - $this->languageFactory = $languageFactory; - $this->url = $url; - $this->activityManager = $activityManager; - $this->userManager = $userManager; - } - - /** - * @param string $language - * @param IEvent $event - * @param IEvent|null $previousEvent - * @return IEvent - * @throws \InvalidArgumentException - * @since 11.0.0 - */ - public function parse($language, IEvent $event, IEvent $previousEvent = null) { - if ($event->getApp() !== 'files_sharing') { - throw new \InvalidArgumentException(); - } - - $this->l = $this->languageFactory->get('files_sharing', $language); - - if ($this->activityManager->isFormattingFilteredObject()) { - try { - return $this->parseShortVersion($event); - } catch (\InvalidArgumentException $e) { - // Ignore and simply use the long version... - } - } - - return $this->parseLongVersion($event); - } - /** * @param IEvent $event * @return IEvent @@ -105,42 +40,20 @@ class Groups implements IProvider { $parsedParameters = $this->getParsedParameters($event); if ($event->getSubject() === self::SUBJECT_SHARED_GROUP_SELF) { - $event->setParsedSubject($this->l->t('Shared with group %1$s', [$parsedParameters['group']['name']])) - ->setRichSubject($this->l->t('Shared with group {group}'), [ - 'group' => $parsedParameters['group'], - ]) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('Shared with group {group}'); } else if ($event->getSubject() === self::SUBJECT_UNSHARED_GROUP_SELF) { - $event->setParsedSubject($this->l->t('Removed share for group %1$s', [$parsedParameters['group']['name']])) - ->setRichSubject($this->l->t('Removed share for group {group}'), [ - 'group' => $parsedParameters['group'], - ]) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('Removed share for group {group}'); } else if ($event->getSubject() === self::SUBJECT_RESHARED_GROUP_BY) { - $event->setParsedSubject($this->l->t('%2$s shared with group %1$s', [ - $parsedParameters['group']['name'], - $parsedParameters['actor']['name'], - ])) - ->setRichSubject($this->l->t('{actor} shared with group {group}'), [ - 'group' => $parsedParameters['group'], - 'actor' => $parsedParameters['actor'], - ]) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('{actor} shared with group {group}'); } else if ($event->getSubject() === self::SUBJECT_UNSHARED_GROUP_BY) { - $event->setParsedSubject($this->l->t('%2$s removed share for group %1$s', [ - $parsedParameters['group']['name'], - $parsedParameters['actor']['name'], - ])) - ->setRichSubject($this->l->t('{actor} removed share for group {group}'), [ - 'group' => $parsedParameters['group'], - 'actor' => $parsedParameters['actor'], - ]) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); - + $subject = $this->l->t('{actor} removed share for group {group}'); } else { throw new \InvalidArgumentException(); } + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $this->setSubjects($event, $subject, $parsedParameters); + return $event; } @@ -154,39 +67,20 @@ class Groups implements IProvider { $parsedParameters = $this->getParsedParameters($event); if ($event->getSubject() === self::SUBJECT_SHARED_GROUP_SELF) { - $event->setParsedSubject($this->l->t('You shared %1$s with group %2$s', [ - $parsedParameters['file']['path'], - $parsedParameters['group']['name'], - ])) - ->setRichSubject($this->l->t('You shared {file} with group {group}'), $parsedParameters) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('You shared {file} with group {group}'); } else if ($event->getSubject() === self::SUBJECT_UNSHARED_GROUP_SELF) { - $event->setParsedSubject($this->l->t('You removed group %2$s from %1$s', [ - $parsedParameters['file']['path'], - $parsedParameters['group']['name'], - ])) - ->setRichSubject($this->l->t('You removed group {group} from {file}'), $parsedParameters) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('You removed group {group} from {file}'); } else if ($event->getSubject() === self::SUBJECT_RESHARED_GROUP_BY) { - $event->setParsedSubject($this->l->t('%3$s shared %1$s with group %2$s', [ - $parsedParameters['file']['path'], - $parsedParameters['group']['name'], - $parsedParameters['actor']['name'], - ])) - ->setRichSubject($this->l->t('{actor} shared {file} with group {group}'), $parsedParameters) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('{actor} shared {file} with group {group}'); } else if ($event->getSubject() === self::SUBJECT_UNSHARED_GROUP_BY) { - $event->setParsedSubject($this->l->t('%3$s removed group %2$s from %1$s', [ - $parsedParameters['file']['path'], - $parsedParameters['group']['name'], - $parsedParameters['actor']['name'], - ])) - ->setRichSubject($this->l->t('{actor} removed group {group} from {file}'), $parsedParameters) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('{actor} removed group {group} from {file}'); } else { throw new \InvalidArgumentException(); } + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $this->setSubjects($event, $subject, $parsedParameters); + return $event; } @@ -197,21 +91,19 @@ class Groups implements IProvider { switch ($subject) { case self::SUBJECT_RESHARED_GROUP_BY: case self::SUBJECT_UNSHARED_GROUP_BY: - $id = key($parameters[0]); return [ - 'file' => $this->generateFileParameter($id, $parameters[0][$id]), + 'file' => $this->getFile($parameters[0], $event), 'group' => [ 'type' => 'group', 'id' => $parameters[2], 'name' => $parameters[2], ], - 'actor' => $this->generateUserParameter($parameters[1]), + 'actor' => $this->getUser($parameters[1]), ]; case self::SUBJECT_SHARED_GROUP_SELF: case self::SUBJECT_UNSHARED_GROUP_SELF: - $id = key($parameters[0]); return [ - 'file' => $this->generateFileParameter($id, $parameters[0][$id]), + 'file' => $this->getFile($parameters[0], $event), 'group' => [ 'type' => 'group', 'id' => $parameters[1], @@ -221,48 +113,4 @@ class Groups implements IProvider { } return []; } - - /** - * @param int $id - * @param string $path - * @return array - */ - protected function generateFileParameter($id, $path) { - return [ - 'type' => 'file', - 'id' => $id, - 'name' => basename($path), - 'path' => trim($path, '/'), - 'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]), - ]; - } - - /** - * @param string $uid - * @return array - */ - protected function generateUserParameter($uid) { - if (!isset($this->displayNames[$uid])) { - $this->displayNames[$uid] = $this->getDisplayName($uid); - } - - return [ - 'type' => 'user', - 'id' => $uid, - 'name' => $this->displayNames[$uid], - ]; - } - - /** - * @param string $uid - * @return string - */ - protected function getDisplayName($uid) { - $user = $this->userManager->get($uid); - if ($user instanceof IUser) { - return $user->getDisplayName(); - } else { - return $uid; - } - } } diff --git a/apps/files_sharing/lib/Activity/Providers/PublicLinks.php b/apps/files_sharing/lib/Activity/Providers/PublicLinks.php index 20070970bca..b22ae0aa9b5 100644 --- a/apps/files_sharing/lib/Activity/Providers/PublicLinks.php +++ b/apps/files_sharing/lib/Activity/Providers/PublicLinks.php @@ -22,33 +22,8 @@ namespace OCA\Files_Sharing\Activity\Providers; use OCP\Activity\IEvent; -use OCP\Activity\IManager; -use OCP\Activity\IProvider; -use OCP\IL10N; -use OCP\IURLGenerator; -use OCP\IUser; -use OCP\IUserManager; -use OCP\L10N\IFactory; -class PublicLinks implements IProvider { - - /** @var IFactory */ - protected $languageFactory; - - /** @var IL10N */ - protected $l; - - /** @var IURLGenerator */ - protected $url; - - /** @var IManager */ - protected $activityManager; - - /** @var IUserManager */ - protected $userManager; - - /** @var array */ - protected $displayNames = []; +class PublicLinks extends Base { const SUBJECT_SHARED_LINK_SELF = 'shared_link_self'; const SUBJECT_RESHARED_LINK_BY = 'reshared_link_by'; @@ -57,46 +32,6 @@ class PublicLinks implements IProvider { const SUBJECT_LINK_EXPIRED = 'link_expired'; const SUBJECT_LINK_BY_EXPIRED = 'link_by_expired'; - - /** - * @param IFactory $languageFactory - * @param IURLGenerator $url - * @param IManager $activityManager - * @param IUserManager $userManager - */ - public function __construct(IFactory $languageFactory, IURLGenerator $url, IManager $activityManager, IUserManager $userManager) { - $this->languageFactory = $languageFactory; - $this->url = $url; - $this->activityManager = $activityManager; - $this->userManager = $userManager; - } - - /** - * @param string $language - * @param IEvent $event - * @param IEvent|null $previousEvent - * @return IEvent - * @throws \InvalidArgumentException - * @since 11.0.0 - */ - public function parse($language, IEvent $event, IEvent $previousEvent = null) { - if ($event->getApp() !== 'files_sharing') { - throw new \InvalidArgumentException(); - } - - $this->l = $this->languageFactory->get('files_sharing', $language); - - if ($this->activityManager->isFormattingFilteredObject()) { - try { - return $this->parseShortVersion($event); - } catch (\InvalidArgumentException $e) { - // Ignore and simply use the long version... - } - } - - return $this->parseLongVersion($event); - } - /** * @param IEvent $event * @return IEvent @@ -107,46 +42,25 @@ class PublicLinks implements IProvider { $parsedParameters = $this->getParsedParameters($event); if ($event->getSubject() === self::SUBJECT_SHARED_LINK_SELF) { - $event->setParsedSubject($this->l->t('Shared as public link')) - ->setRichSubject($this->l->t('Shared as public link')) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('Shared as public link'); } else if ($event->getSubject() === self::SUBJECT_UNSHARED_LINK_SELF) { - $event->setParsedSubject($this->l->t('Removed public link')) - ->setRichSubject($this->l->t('Removed public link')) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); -// } else if ($event->getSubject() === self::SUBJECT_LINK_EXPIRED) { -// $event->setParsedSubject($this->l->t('Public link expired')) -// ->setRichSubject($this->l->t('Public link expired')) -// ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('Removed public link'); + } else if ($event->getSubject() === self::SUBJECT_LINK_EXPIRED) { + $subject = $this->l->t('Public link expired'); } else if ($event->getSubject() === self::SUBJECT_RESHARED_LINK_BY) { - $event->setParsedSubject($this->l->t('%1$s shared as public link', [ - $parsedParameters['actor']['name'], - ])) - ->setRichSubject($this->l->t('{actor} shared as public link'), [ - 'actor' => $parsedParameters['actor'], - ]) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('{actor} shared as public link'); } else if ($event->getSubject() === self::SUBJECT_UNSHARED_LINK_BY) { - $event->setParsedSubject($this->l->t('%1$s removed public link', [ - $parsedParameters['actor']['name'], - ])) - ->setRichSubject($this->l->t('{actor} removed public link'), [ - 'actor' => $parsedParameters['actor'], - ]) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); -// } else if ($event->getSubject() === self::SUBJECT_LINK_BY_EXPIRED) { -// $event->setParsedSubject($this->l->t('Public link of %1$s expired', [ -// $parsedParameters['actor']['name'], -// ])) -// ->setRichSubject($this->l->t('Public link of {actor} expired',[ -// 'actor' => $parsedParameters['actor'], -// ])) -// ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('{actor} removed public link'); + } else if ($event->getSubject() === self::SUBJECT_LINK_BY_EXPIRED) { + $subject = $this->l->t('Public link of {actor} expired'); } else { throw new \InvalidArgumentException(); } + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $this->setSubjects($event, $subject, $parsedParameters); + return $event; } @@ -160,48 +74,25 @@ class PublicLinks implements IProvider { $parsedParameters = $this->getParsedParameters($event); if ($event->getSubject() === self::SUBJECT_SHARED_LINK_SELF) { - $event->setParsedSubject($this->l->t('You shared %1$s as public link', [ - $parsedParameters['file']['path'], - ])) - ->setRichSubject($this->l->t('You shared {file} as public link'), $parsedParameters) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('You shared {file} as public link'); } else if ($event->getSubject() === self::SUBJECT_UNSHARED_LINK_SELF) { - $event->setParsedSubject($this->l->t('You removed public link for %1$s', [ - $parsedParameters['file']['path'], - ])) - ->setRichSubject($this->l->t('You removed public link for {file}'), $parsedParameters) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); -// } else if ($event->getSubject() === self::SUBJECT_LINK_EXPIRED) { -// $event->setParsedSubject($this->l->t('Public link expired')) -// ->setRichSubject($this->l->t('Public link expired')) -// ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('You removed public link for {file}'); + } else if ($event->getSubject() === self::SUBJECT_LINK_EXPIRED) { + $subject = $this->l->t('Public link expired for {file}'); } else if ($event->getSubject() === self::SUBJECT_RESHARED_LINK_BY) { - $event->setParsedSubject($this->l->t('%2$s shared %1$s as public link', [ - $parsedParameters['file']['path'], - $parsedParameters['actor']['name'], - ])) - ->setRichSubject($this->l->t('{actor} shared {file} as public link'), $parsedParameters) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('{actor} shared {file} as public link'); } else if ($event->getSubject() === self::SUBJECT_UNSHARED_LINK_BY) { - $event->setParsedSubject($this->l->t('%2$s removed public link for %1$s', [ - $parsedParameters['file']['path'], - $parsedParameters['actor']['name'], - ])) - ->setRichSubject($this->l->t('{actor} removed public link for {file}'), $parsedParameters) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); -// } else if ($event->getSubject() === self::SUBJECT_LINK_BY_EXPIRED) { -// $event->setParsedSubject($this->l->t('Public link of %1$s expired', [ -// $parsedParameters['actor']['name'], -// ])) -// ->setRichSubject($this->l->t('Public link of {actor} expired',[ -// 'actor' => $parsedParameters['actor'], -// ])) -// ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('{actor} removed public link for {file}'); + } else if ($event->getSubject() === self::SUBJECT_LINK_BY_EXPIRED) { + $subject = $this->l->t('Public link of {actor} for {file} expired'); } else { throw new \InvalidArgumentException(); } + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $this->setSubjects($event, $subject, $parsedParameters); + return $event; } @@ -213,63 +104,18 @@ class PublicLinks implements IProvider { case self::SUBJECT_SHARED_LINK_SELF: case self::SUBJECT_UNSHARED_LINK_SELF: case self::SUBJECT_LINK_EXPIRED: - $id = key($parameters[0]); return [ - 'file' => $this->generateFileParameter($id, $parameters[0][$id]), + 'file' => $this->getFile($parameters[0], $event), ]; case self::SUBJECT_RESHARED_LINK_BY: case self::SUBJECT_UNSHARED_LINK_BY: case self::SUBJECT_LINK_BY_EXPIRED: - $id = key($parameters[0]); return [ - 'file' => $this->generateFileParameter($id, $parameters[0][$id]), - 'actor' => $this->generateUserParameter($parameters[1]), + 'file' => $this->getFile($parameters[0], $event), + 'actor' => $this->getUser($parameters[1]), ]; } return []; } - /** - * @param int $id - * @param string $path - * @return array - */ - protected function generateFileParameter($id, $path) { - return [ - 'type' => 'file', - 'id' => $id, - 'name' => basename($path), - 'path' => trim($path, '/'), - 'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]), - ]; - } - - /** - * @param string $uid - * @return array - */ - protected function generateUserParameter($uid) { - if (!isset($this->displayNames[$uid])) { - $this->displayNames[$uid] = $this->getDisplayName($uid); - } - - return [ - 'type' => 'user', - 'id' => $uid, - 'name' => $this->displayNames[$uid], - ]; - } - - /** - * @param string $uid - * @return string - */ - protected function getDisplayName($uid) { - $user = $this->userManager->get($uid); - if ($user instanceof IUser) { - return $user->getDisplayName(); - } else { - return $uid; - } - } } diff --git a/apps/files_sharing/lib/Activity/Providers/RemoteShares.php b/apps/files_sharing/lib/Activity/Providers/RemoteShares.php index 3ee5d82e932..425defe57e4 100644 --- a/apps/files_sharing/lib/Activity/Providers/RemoteShares.php +++ b/apps/files_sharing/lib/Activity/Providers/RemoteShares.php @@ -28,19 +28,7 @@ use OCP\IL10N; use OCP\IURLGenerator; use OCP\L10N\IFactory; -class RemoteShares implements IProvider { - - /** @var IFactory */ - protected $languageFactory; - - /** @var IL10N */ - protected $l; - - /** @var IURLGenerator */ - protected $url; - - /** @var IManager */ - protected $activityManager; +class RemoteShares extends Base { const SUBJECT_REMOTE_SHARE_ACCEPTED = 'remote_share_accepted'; const SUBJECT_REMOTE_SHARE_DECLINED = 'remote_share_declined'; @@ -48,43 +36,6 @@ class RemoteShares implements IProvider { const SUBJECT_REMOTE_SHARE_UNSHARED = 'remote_share_unshared'; /** - * @param IFactory $languageFactory - * @param IURLGenerator $url - * @param IManager $activityManager - */ - public function __construct(IFactory $languageFactory, IURLGenerator $url, IManager $activityManager) { - $this->languageFactory = $languageFactory; - $this->url = $url; - $this->activityManager = $activityManager; - } - - /** - * @param string $language - * @param IEvent $event - * @param IEvent|null $previousEvent - * @return IEvent - * @throws \InvalidArgumentException - * @since 11.0.0 - */ - public function parse($language, IEvent $event, IEvent $previousEvent = null) { - if ($event->getApp() !== 'files_sharing') { - throw new \InvalidArgumentException(); - } - - $this->l = $this->languageFactory->get('files_sharing', $language); - - if ($this->activityManager->isFormattingFilteredObject()) { - try { - return $this->parseShortVersion($event); - } catch (\InvalidArgumentException $e) { - // Ignore and simply use the long version... - } - } - - return $this->parseLongVersion($event); - } - - /** * @param IEvent $event * @return IEvent * @throws \InvalidArgumentException @@ -94,25 +45,16 @@ class RemoteShares implements IProvider { $parsedParameters = $this->getParsedParameters($event); if ($event->getSubject() === self::SUBJECT_REMOTE_SHARE_ACCEPTED) { - $event->setParsedSubject($this->l->t('%1$s accepted the remote share', [ - $parsedParameters['user']['name'], - ])) - ->setRichSubject($this->l->t('{user} accepted the remote share'), [ - 'user' => $parsedParameters['user'] - ]) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('{user} accepted the remote share'); } else if ($event->getSubject() === self::SUBJECT_REMOTE_SHARE_DECLINED) { - $event->setParsedSubject($this->l->t('%1$s declined the remote share', [ - $parsedParameters['user']['name'], - ])) - ->setRichSubject($this->l->t('{user} declined the remote share'), [ - 'user' => $parsedParameters['user'] - ]) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('{user} declined the remote share'); } else { throw new \InvalidArgumentException(); } + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $this->setSubjects($event, $subject, $parsedParameters); + return $event; } @@ -126,37 +68,20 @@ class RemoteShares implements IProvider { $parsedParameters = $this->getParsedParameters($event); if ($event->getSubject() === self::SUBJECT_REMOTE_SHARE_RECEIVED) { - $event->setParsedSubject($this->l->t('You received a new remote share %1$s from %2$s', [ - $parsedParameters['file']['name'], - $parsedParameters['user']['name'], - ])) - ->setRichSubject($this->l->t('You received a new remote share {file} from {user}'), $parsedParameters) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('You received a new remote share {file} from {user}'); } else if ($event->getSubject() === self::SUBJECT_REMOTE_SHARE_ACCEPTED) { - $event->setParsedSubject($this->l->t('%2$s accepted the remote share of %1$s', [ - $parsedParameters['file']['name'], - $parsedParameters['user']['name'], - ])) - ->setRichSubject($this->l->t('{user} accepted the remote share of {file}'), $parsedParameters) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('{user} accepted the remote share of {file}'); } else if ($event->getSubject() === self::SUBJECT_REMOTE_SHARE_DECLINED) { - $event->setParsedSubject($this->l->t('%2$s declined the remote share of %1$s', [ - $parsedParameters['file']['name'], - $parsedParameters['user']['name'], - ])) - ->setRichSubject($this->l->t('{user} declined the remote share of {file}'), $parsedParameters) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('{user} declined the remote share of {file}'); } else if ($event->getSubject() === self::SUBJECT_REMOTE_SHARE_UNSHARED) { - $event->setParsedSubject($this->l->t('%2$s unshared %1$s from you', [ - $parsedParameters['file']['name'], - $parsedParameters['user']['name'], - ])) - ->setRichSubject($this->l->t('{user} unshared {file} from you'), $parsedParameters) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('{user} unshared {file} from you'); } else { throw new \InvalidArgumentException(); } + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $this->setSubjects($event, $subject, $parsedParameters); + return $event; } @@ -167,48 +92,35 @@ class RemoteShares implements IProvider { switch ($subject) { case self::SUBJECT_REMOTE_SHARE_RECEIVED: case self::SUBJECT_REMOTE_SHARE_UNSHARED: - $remoteUser = explode('@', $parameters[0], 2); return [ 'file' => [ 'type' => 'pending-federated-share', 'id' => $parameters[1], 'name' => $parameters[1], ], - 'user' => [ - 'type' => 'user', - 'id' => $remoteUser[0], - 'name' => $parameters[0],// Todo display name from contacts - 'server' => $remoteUser[1], - ], + 'user' => $this->getFederatedUser($parameters[0]), ]; case self::SUBJECT_REMOTE_SHARE_ACCEPTED: case self::SUBJECT_REMOTE_SHARE_DECLINED: - $remoteUser = explode('@', $parameters[0], 2); return [ - 'file' => $this->generateFileParameter($event->getObjectId(), $event->getObjectName()), - 'user' => [ - 'type' => 'user', - 'id' => $remoteUser[0], - 'name' => $parameters[0],// Todo display name from contacts - 'server' => $remoteUser[1], - ], + 'file' => $this->getFile([$event->getObjectId() => $event->getObjectName()]), + 'user' => $this->getFederatedUser($parameters[0]), ]; } throw new \InvalidArgumentException(); } /** - * @param int $id - * @param string $path + * @param string $cloudId * @return array */ - protected function generateFileParameter($id, $path) { + protected function getFederatedUser($cloudId) { + $remoteUser = explode('@', $cloudId, 2); return [ - 'type' => 'file', - 'id' => $id, - 'name' => basename($path), - 'path' => $path, - 'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]), + 'type' => 'user', + 'id' => $remoteUser[0], + 'name' => $cloudId,// Todo display name from contacts + 'server' => $remoteUser[1], ]; } } diff --git a/apps/files_sharing/lib/Activity/Providers/Users.php b/apps/files_sharing/lib/Activity/Providers/Users.php index 4db72136a85..f5cd4e8bfe3 100644 --- a/apps/files_sharing/lib/Activity/Providers/Users.php +++ b/apps/files_sharing/lib/Activity/Providers/Users.php @@ -22,33 +22,9 @@ namespace OCA\Files_Sharing\Activity\Providers; use OCP\Activity\IEvent; -use OCP\Activity\IManager; -use OCP\Activity\IProvider; -use OCP\IL10N; -use OCP\IURLGenerator; -use OCP\IUser; -use OCP\IUserManager; -use OCP\L10N\IFactory; -class Users implements IProvider { +class Users extends Base { - /** @var IFactory */ - protected $languageFactory; - - /** @var IL10N */ - protected $l; - - /** @var IURLGenerator */ - protected $url; - - /** @var IManager */ - protected $activityManager; - - /** @var IUserManager */ - protected $userManager; - - /** @var array */ - protected $displayNames = []; const SUBJECT_SHARED_USER_SELF = 'shared_user_self'; const SUBJECT_RESHARED_USER_BY = 'reshared_user_by'; @@ -59,45 +35,6 @@ class Users implements IProvider { const SUBJECT_UNSHARED_BY = 'unshared_by'; /** - * @param IFactory $languageFactory - * @param IURLGenerator $url - * @param IManager $activityManager - * @param IUserManager $userManager - */ - public function __construct(IFactory $languageFactory, IURLGenerator $url, IManager $activityManager, IUserManager $userManager) { - $this->languageFactory = $languageFactory; - $this->url = $url; - $this->activityManager = $activityManager; - $this->userManager = $userManager; - } - - /** - * @param string $language - * @param IEvent $event - * @param IEvent|null $previousEvent - * @return IEvent - * @throws \InvalidArgumentException - * @since 11.0.0 - */ - public function parse($language, IEvent $event, IEvent $previousEvent = null) { - if ($event->getApp() !== 'files_sharing') { - throw new \InvalidArgumentException(); - } - - $this->l = $this->languageFactory->get('files_sharing', $language); - - if ($this->activityManager->isFormattingFilteredObject()) { - try { - return $this->parseShortVersion($event); - } catch (\InvalidArgumentException $e) { - // Ignore and simply use the long version... - } - } - - return $this->parseLongVersion($event); - } - - /** * @param IEvent $event * @return IEvent * @throws \InvalidArgumentException @@ -107,54 +44,25 @@ class Users implements IProvider { $parsedParameters = $this->getParsedParameters($event); if ($event->getSubject() === self::SUBJECT_SHARED_USER_SELF) { - $event->setParsedSubject($this->l->t('Shared with %1$s', [$parsedParameters['user']['name']])) - ->setRichSubject($this->l->t('Shared with {user}'), [ - 'user' => $parsedParameters['user'], - ]) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('Shared with {user}'); } else if ($event->getSubject() === self::SUBJECT_UNSHARED_USER_SELF) { - $event->setParsedSubject($this->l->t('Removed share for %1$s', [$parsedParameters['user']['name']])) - ->setRichSubject($this->l->t('Removed share for {user}'), [ - 'user' => $parsedParameters['user'], - ]) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('Removed share for {user}'); } else if ($event->getSubject() === self::SUBJECT_RESHARED_USER_BY) { - $event->setParsedSubject($this->l->t('%2$s shared with %1$s', [ - $parsedParameters['user']['name'], - $parsedParameters['actor']['name'], - ])) - ->setRichSubject($this->l->t('{actor} shared with {user}'), [ - 'user' => $parsedParameters['user'], - 'actor' => $parsedParameters['actor'], - ]) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('{actor} shared with {user}'); } else if ($event->getSubject() === self::SUBJECT_UNSHARED_USER_BY) { - $event->setParsedSubject($this->l->t('%2$s removed share for %1$s', [ - $parsedParameters['user']['name'], - $parsedParameters['actor']['name'], - ])) - ->setRichSubject($this->l->t('{actor} removed share for {user}'), [ - 'user' => $parsedParameters['user'], - 'actor' => $parsedParameters['actor'], - ]) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('{actor} removed share for {user}'); } else if ($event->getSubject() === self::SUBJECT_SHARED_WITH_BY) { - $event->setParsedSubject($this->l->t('Shared by %1$s', [$parsedParameters['actor']['name']])) - ->setRichSubject($this->l->t('Shared by {actor}'), [ - 'actor' => $parsedParameters['actor'], - ]) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('Shared by {actor}'); } else if ($event->getSubject() === self::SUBJECT_UNSHARED_BY) { - $event->setParsedSubject($this->l->t('%1$s removed share', [$parsedParameters['actor']['name']])) - ->setRichSubject($this->l->t('{actor} removed share'), [ - 'actor' => $parsedParameters['actor'], - ]) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('{actor} removed share'); } else { throw new \InvalidArgumentException(); } + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $this->setSubjects($event, $subject, $parsedParameters); + return $event; } @@ -168,54 +76,25 @@ class Users implements IProvider { $parsedParameters = $this->getParsedParameters($event); if ($event->getSubject() === self::SUBJECT_SHARED_USER_SELF) { - $event->setParsedSubject($this->l->t('You shared %1$s with %2$s', [ - $parsedParameters['file']['path'], - $parsedParameters['user']['name'], - ])) - ->setRichSubject($this->l->t('You shared {file} with {user}'), $parsedParameters) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('You shared {file} with {user}'); } else if ($event->getSubject() === self::SUBJECT_UNSHARED_USER_SELF) { - $event->setParsedSubject($this->l->t('You removed %2$s from %1$s', [ - $parsedParameters['file']['path'], - $parsedParameters['user']['name'], - ])) - ->setRichSubject($this->l->t('You removed {user} from {file}'), $parsedParameters) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('You removed {user} from {file}'); } else if ($event->getSubject() === self::SUBJECT_RESHARED_USER_BY) { - $event->setParsedSubject($this->l->t('%3$s shared %1$s with %2$s', [ - $parsedParameters['file']['path'], - $parsedParameters['user']['name'], - $parsedParameters['actor']['name'], - ])) - ->setRichSubject($this->l->t('{actor} removed {user} from {file}'), $parsedParameters) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('{actor} removed {user} from {file}'); } else if ($event->getSubject() === self::SUBJECT_UNSHARED_USER_BY) { - $event->setParsedSubject($this->l->t('%3$s removed %2$s from %1$s', [ - $parsedParameters['file']['path'], - $parsedParameters['user']['name'], - $parsedParameters['actor']['name'], - ])) - ->setRichSubject($this->l->t('{actor} removed {user} from {file}'), $parsedParameters) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('{actor} removed {user} from {file}'); } else if ($event->getSubject() === self::SUBJECT_SHARED_WITH_BY) { - $event->setParsedSubject($this->l->t('%2$s shared %1$s with you', [ - $parsedParameters['file']['path'], - $parsedParameters['actor']['name'], - ])) - ->setRichSubject($this->l->t('{actor} shared {file} with you'), $parsedParameters) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('{actor} shared {file} with you'); } else if ($event->getSubject() === self::SUBJECT_UNSHARED_BY) { - $event->setParsedSubject($this->l->t('%2$s removed you from %1$s', [ - $parsedParameters['file']['path'], - $parsedParameters['actor']['name'], - ])) - ->setRichSubject($this->l->t('{actor} removed you from {file}'), $parsedParameters) - ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $subject = $this->l->t('{actor} removed you from {file}'); } else { throw new \InvalidArgumentException(); } + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + $this->setSubjects($event, $subject, $parsedParameters); + return $event; } @@ -226,71 +105,24 @@ class Users implements IProvider { switch ($subject) { case self::SUBJECT_SHARED_USER_SELF: case self::SUBJECT_UNSHARED_USER_SELF: - $id = key($parameters[0]); return [ - 'file' => $this->generateFileParameter($id, $parameters[0][$id]), - 'user' => $this->generateUserParameter($parameters[1]), + 'file' => $this->getFile($parameters[0], $event), + 'user' => $this->getUser($parameters[1]), ]; case self::SUBJECT_SHARED_WITH_BY: case self::SUBJECT_UNSHARED_BY: - $id = key($parameters[0]); return [ - 'file' => $this->generateFileParameter($id, $parameters[0][$id]), - 'actor' => $this->generateUserParameter($parameters[1]), + 'file' => $this->getFile($parameters[0], $event), + 'actor' => $this->getUser($parameters[1]), ]; case self::SUBJECT_RESHARED_USER_BY: case self::SUBJECT_UNSHARED_USER_BY: - $id = key($parameters[0]); return [ - 'file' => $this->generateFileParameter($id, $parameters[0][$id]), - 'user' => $this->generateUserParameter($parameters[2]), - 'actor' => $this->generateUserParameter($parameters[1]), + 'file' => $this->getFile($parameters[0], $event), + 'user' => $this->getUser($parameters[2]), + 'actor' => $this->getUser($parameters[1]), ]; } return []; } - - /** - * @param int $id - * @param string $path - * @return array - */ - protected function generateFileParameter($id, $path) { - return [ - 'type' => 'file', - 'id' => $id, - 'name' => basename($path), - 'path' => trim($path, '/'), - 'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]), - ]; - } - - /** - * @param string $uid - * @return array - */ - protected function generateUserParameter($uid) { - if (!isset($this->displayNames[$uid])) { - $this->displayNames[$uid] = $this->getDisplayName($uid); - } - - return [ - 'type' => 'user', - 'id' => $uid, - 'name' => $this->displayNames[$uid], - ]; - } - - /** - * @param string $uid - * @return string - */ - protected function getDisplayName($uid) { - $user = $this->userManager->get($uid); - if ($user instanceof IUser) { - return $user->getDisplayName(); - } else { - return $uid; - } - } } |