diff options
author | Joas Schilling <coding@schilljs.com> | 2016-11-22 11:05:06 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-22 11:05:06 +0100 |
commit | b8732a1a534c49719f9f4e6fa4a6fc6b1e9e9090 (patch) | |
tree | 89876d52ea38043f220ffbd73016b2a35e599927 /apps/systemtags | |
parent | 08ef7356f67ff0d6c306633d55cb63183296ed57 (diff) | |
parent | 64b58d2321aa66bf1b39708ce04780da8145240e (diff) | |
download | nextcloud-server-b8732a1a534c49719f9f4e6fa4a6fc6b1e9e9090.tar.gz nextcloud-server-b8732a1a534c49719f9f4e6fa4a6fc6b1e9e9090.zip |
Merge pull request #2179 from nextcloud/update-systemtags-to-new-activity-api
Update systemtags activity to new API
Diffstat (limited to 'apps/systemtags')
-rw-r--r-- | apps/systemtags/appinfo/app.php | 8 | ||||
-rw-r--r-- | apps/systemtags/appinfo/info.xml | 10 | ||||
-rw-r--r-- | apps/systemtags/lib/Activity/Extension.php | 337 | ||||
-rw-r--r-- | apps/systemtags/lib/Activity/Listener.php | 37 | ||||
-rw-r--r-- | apps/systemtags/lib/Activity/Provider.php | 298 | ||||
-rw-r--r-- | apps/systemtags/lib/Activity/Setting.php | 98 |
6 files changed, 425 insertions, 363 deletions
diff --git a/apps/systemtags/appinfo/app.php b/apps/systemtags/appinfo/app.php index e3be0d7556e..039df2ac9f7 100644 --- a/apps/systemtags/appinfo/app.php +++ b/apps/systemtags/appinfo/app.php @@ -46,14 +46,6 @@ $eventDispatcher->addListener( } ); -$activityManager = \OC::$server->getActivityManager(); -$activityManager->registerExtension(function() { - $application = new \OCP\AppFramework\App('systemtags'); - /** @var \OCA\SystemTags\Activity\Extension $extension */ - $extension = $application->getContainer()->query('OCA\SystemTags\Activity\Extension'); - return $extension; -}); - $managerListener = function(ManagerEvent $event) use ($activityManager) { $application = new \OCP\AppFramework\App('systemtags'); /** @var \OCA\SystemTags\Activity\Listener $listener */ diff --git a/apps/systemtags/appinfo/info.xml b/apps/systemtags/appinfo/info.xml index 3ed01d3d8c0..1d5f33207a4 100644 --- a/apps/systemtags/appinfo/info.xml +++ b/apps/systemtags/appinfo/info.xml @@ -18,4 +18,14 @@ <settings> <admin>OCA\SystemTags\Settings\Admin</admin> </settings> + + <activity> + <settings> + <setting>OCA\SystemTags\Activity\Setting</setting> + </settings> + + <providers> + <provider>OCA\SystemTags\Activity\Provider</provider> + </providers> + </activity> </info> diff --git a/apps/systemtags/lib/Activity/Extension.php b/apps/systemtags/lib/Activity/Extension.php deleted file mode 100644 index 8937d916209..00000000000 --- a/apps/systemtags/lib/Activity/Extension.php +++ /dev/null @@ -1,337 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Joas Schilling <coding@schilljs.com> - * @author Vincent Petry <pvince81@owncloud.com> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * 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, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace OCA\SystemTags\Activity; - -use OCP\Activity\IExtension; -use OCP\Activity\IManager; -use OCP\IL10N; -use OCP\L10N\IFactory; - -/** - * Class Extension - * - * @package OCA\SystemTags\Activity - */ -class Extension implements IExtension { - const APP_NAME = 'systemtags'; - - const CREATE_TAG = 'create_tag'; - const UPDATE_TAG = 'update_tag'; - const DELETE_TAG = 'delete_tag'; - - const ASSIGN_TAG = 'assign_tag'; - const UNASSIGN_TAG = 'unassign_tag'; - - /** @var IFactory */ - protected $languageFactory; - - /** @var IManager */ - protected $activityManager; - - /** - * @param IFactory $languageFactory - * @param IManager $activityManager - */ - public function __construct(IFactory $languageFactory, IManager $activityManager) { - $this->languageFactory = $languageFactory; - $this->activityManager = $activityManager; - } - - protected function getL10N($languageCode = null) { - return $this->languageFactory->get(self::APP_NAME, $languageCode); - } - - /** - * The extension can return an array of additional notification types. - * If no additional types are to be added false is to be returned - * - * @param string $languageCode - * @return array|false - */ - public function getNotificationTypes($languageCode) { - $l = $this->getL10N($languageCode); - - return array( - self::APP_NAME => (string) $l->t('<strong>System tags</strong> for a file have been modified'), - ); - } - - /** - * For a given method additional types to be displayed in the settings can be returned. - * In case no additional types are to be added false is to be returned. - * - * @param string $method - * @return array|false - */ - public function getDefaultTypes($method) { - return $method === self::METHOD_STREAM ? [self::APP_NAME] : false; - } - - /** - * A string naming the css class for the icon to be used can be returned. - * If no icon is known for the given type false is to be returned. - * - * @param string $type - * @return string|false - */ - public function getTypeIcon($type) { - switch ($type) { - case self::APP_NAME: - return 'icon-tag'; - } - - return false; - } - - /** - * The extension can translate a given message to the requested languages. - * If no translation is available false is to be returned. - * - * @param string $app - * @param string $text - * @param array $params - * @param boolean $stripPath - * @param boolean $highlightParams - * @param string $languageCode - * @return string|false - */ - public function translate($app, $text, $params, $stripPath, $highlightParams, $languageCode) { - if ($app !== self::APP_NAME) { - return false; - } - - $l = $this->getL10N($languageCode); - - if ($this->activityManager->isFormattingFilteredObject()) { - $translation = $this->translateShort($text, $l, $params); - if ($translation !== false) { - return $translation; - } - } - - return $this->translateLong($text, $l, $params); - } - - /** - * @param string $text - * @param IL10N $l - * @param array $params - * @return bool|string - */ - protected function translateShort($text, IL10N $l, array $params) { - - switch ($text) { - case self::ASSIGN_TAG: - $params[2] = $this->convertParameterToTag($params[2], $l); - if ($this->actorIsCurrentUser($params[0])) { - return (string) $l->t('You added system tag %3$s', $params); - } - return (string) $l->t('%1$s added system tag %3$s', $params); - case self::UNASSIGN_TAG: - $params[2] = $this->convertParameterToTag($params[2], $l); - if ($this->actorIsCurrentUser($params[0])) { - return (string) $l->t('You removed system tag %3$s', $params); - } - return (string) $l->t('%1$s removed system tag %3$s', $params); - } - - return false; - } - - /** - * @param string $text - * @param IL10N $l - * @param array $params - * @return bool|string - */ - protected function translateLong($text, IL10N $l, array $params) { - - switch ($text) { - case self::CREATE_TAG: - $params[1] = $this->convertParameterToTag($params[1], $l); - if ($this->actorIsCurrentUser($params[0])) { - return (string) $l->t('You created system tag %2$s', $params); - } - return (string) $l->t('%1$s created system tag %2$s', $params); - case self::DELETE_TAG: - $params[1] = $this->convertParameterToTag($params[1], $l); - if ($this->actorIsCurrentUser($params[0])) { - return (string) $l->t('You deleted system tag %2$s', $params); - } - return (string) $l->t('%1$s deleted system tag %2$s', $params); - case self::UPDATE_TAG: - $params[1] = $this->convertParameterToTag($params[1], $l); - $params[2] = $this->convertParameterToTag($params[2], $l); - if ($this->actorIsCurrentUser($params[0])) { - return (string) $l->t('You updated system tag %3$s to %2$s', $params); - } - return (string) $l->t('%1$s updated system tag %3$s to %2$s', $params); - case self::ASSIGN_TAG: - $params[2] = $this->convertParameterToTag($params[2], $l); - if ($this->actorIsCurrentUser($params[0])) { - return (string) $l->t('You added system tag %3$s to %2$s', $params); - } - return (string) $l->t('%1$s added system tag %3$s to %2$s', $params); - case self::UNASSIGN_TAG: - $params[2] = $this->convertParameterToTag($params[2], $l); - if ($this->actorIsCurrentUser($params[0])) { - return (string) $l->t('You removed system tag %3$s from %2$s', $params); - } - return (string) $l->t('%1$s removed system tag %3$s from %2$s', $params); - } - - return false; - } - - /** - * Check if the author is the current user - * - * @param string $user Parameter e.g. `<user display-name="admin">admin</user>` - * @return bool - */ - protected function actorIsCurrentUser($user) { - try { - return strip_tags($user) === $this->activityManager->getCurrentUserId(); - } catch (\UnexpectedValueException $e) { - return false; - } - } - - /** - * The extension can define the type of parameters for translation - * - * Currently known types are: - * * file => will strip away the path of the file and add a tooltip with it - * * username => will add the avatar of the user - * - * @param string $app - * @param string $text - * @return array|false - */ - public function getSpecialParameterList($app, $text) { - if ($app === self::APP_NAME) { - switch ($text) { - case self::CREATE_TAG: - case self::DELETE_TAG: - return array( - 0 => 'username', - //1 => 'systemtag description', - ); - case self::UPDATE_TAG: - return array( - 0 => 'username', - //1 => 'systemtag description', - //2 => 'systemtag description', - ); - - case self::ASSIGN_TAG: - case self::UNASSIGN_TAG: - return array( - 0 => 'username', - 1 => 'file', - //2 => 'systemtag description', - ); - } - } - - return false; - } - - /** - * The extension can define the parameter grouping by returning the index as integer. - * In case no grouping is required false is to be returned. - * - * @param array $activity - * @return integer|false - */ - public function getGroupParameter($activity) { - return false; - } - - /** - * The extension can define additional navigation entries. The array returned has to contain two keys 'top' - * and 'apps' which hold arrays with the relevant entries. - * If no further entries are to be added false is no be returned. - * - * @return array|false - */ - public function getNavigation() { - return false; - } - - /** - * The extension can check if a custom filter (given by a query string like filter=abc) is valid or not. - * - * @param string $filterValue - * @return boolean - */ - public function isFilterValid($filterValue) { - return false; - } - - /** - * The extension can filter the types based on the filter if required. - * In case no filter is to be applied false is to be returned unchanged. - * - * @param array $types - * @param string $filter - * @return array|false - */ - public function filterNotificationTypes($types, $filter) { - return false; - } - - /** - * For a given filter the extension can specify the sql query conditions including parameters for that query. - * In case the extension does not know the filter false is to be returned. - * The query condition and the parameters are to be returned as array with two elements. - * E.g. return array('`app` = ? and `message` like ?', array('mail', 'ownCloud%')); - * - * @param string $filter - * @return array|false - */ - public function getQueryForFilter($filter) { - return false; - } - - /** - * @param string $parameter - * @param IL10N $l - * @return string - */ - protected function convertParameterToTag($parameter, IL10N $l) { - if (preg_match('/^\<parameter\>\{\{\{(.*)\|\|\|(.*)\}\}\}\<\/parameter\>$/', $parameter, $matches)) { - switch ($matches[2]) { - case 'assignable': - return '<parameter>' . $matches[1] . '</parameter>'; - case 'not-assignable': - return '<parameter>' . $l->t('%s (restricted)', $matches[1]) . '</parameter>'; - case 'invisible': - return '<parameter>' . $l->t('%s (invisible)', $matches[1]) . '</parameter>'; - } - } - - return $parameter; - } -} diff --git a/apps/systemtags/lib/Activity/Listener.php b/apps/systemtags/lib/Activity/Listener.php index 69ba888c4fb..dbddf3c38bc 100644 --- a/apps/systemtags/lib/Activity/Listener.php +++ b/apps/systemtags/lib/Activity/Listener.php @@ -92,24 +92,26 @@ class Listener { } else { $actor = ''; } + $tag = $event->getTag(); $activity = $this->activityManager->generateEvent(); - $activity->setApp(Extension::APP_NAME) - ->setType(Extension::APP_NAME) - ->setAuthor($actor); + $activity->setApp('systemtags') + ->setType('systemtags') + ->setAuthor($actor) + ->setObject('systemtag', $tag->getId(), $tag->getName()); if ($event->getEvent() === ManagerEvent::EVENT_CREATE) { - $activity->setSubject(Extension::CREATE_TAG, [ + $activity->setSubject(Provider::CREATE_TAG, [ $actor, $this->prepareTagAsParameter($event->getTag()), ]); } else if ($event->getEvent() === ManagerEvent::EVENT_UPDATE) { - $activity->setSubject(Extension::UPDATE_TAG, [ + $activity->setSubject(Provider::UPDATE_TAG, [ $actor, $this->prepareTagAsParameter($event->getTag()), $this->prepareTagAsParameter($event->getTagBefore()), ]); } else if ($event->getEvent() === ManagerEvent::EVENT_DELETE) { - $activity->setSubject(Extension::DELETE_TAG, [ + $activity->setSubject(Provider::DELETE_TAG, [ $actor, $this->prepareTagAsParameter($event->getTag()), ]); @@ -181,10 +183,10 @@ class Listener { } $activity = $this->activityManager->generateEvent(); - $activity->setApp(Extension::APP_NAME) - ->setType(Extension::APP_NAME) + $activity->setApp('systemtags') + ->setType('systemtags') ->setAuthor($actor) - ->setObject($event->getObjectType(), $event->getObjectId()); + ->setObject($event->getObjectType(), (int) $event->getObjectId()); foreach ($users as $user => $path) { $activity->setAffectedUser($user); @@ -195,13 +197,13 @@ class Listener { continue; } if ($event->getEvent() === MapperEvent::EVENT_ASSIGN) { - $activity->setSubject(Extension::ASSIGN_TAG, [ + $activity->setSubject(Provider::ASSIGN_TAG, [ $actor, $path, $this->prepareTagAsParameter($tag), ]); } else if ($event->getEvent() === MapperEvent::EVENT_UNASSIGN) { - $activity->setSubject(Extension::UNASSIGN_TAG, [ + $activity->setSubject(Provider::UNASSIGN_TAG, [ $actor, $path, $this->prepareTagAsParameter($tag), @@ -218,12 +220,11 @@ class Listener { * @return string */ protected function prepareTagAsParameter(ISystemTag $tag) { - if (!$tag->isUserVisible()) { - return '{{{' . $tag->getName() . '|||invisible}}}'; - } else if (!$tag->isUserAssignable()) { - return '{{{' . $tag->getName() . '|||not-assignable}}}'; - } else { - return '{{{' . $tag->getName() . '|||assignable}}}'; - } + return json_encode([ + 'id' => $tag->getId(), + 'name' => $tag->getName(), + 'assignable' => $tag->isUserAssignable(), + 'visible' => $tag->isUserVisible(), + ]); } } diff --git a/apps/systemtags/lib/Activity/Provider.php b/apps/systemtags/lib/Activity/Provider.php new file mode 100644 index 00000000000..9d85300d5be --- /dev/null +++ b/apps/systemtags/lib/Activity/Provider.php @@ -0,0 +1,298 @@ +<?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\SystemTags\Activity; + +use OCP\Activity\IEvent; +use OCP\Activity\IManager; +use OCP\Activity\IProvider; +use OCP\IL10N; +use OCP\IURLGenerator; + +class Provider implements IProvider { + + const CREATE_TAG = 'create_tag'; + const UPDATE_TAG = 'update_tag'; + const DELETE_TAG = 'delete_tag'; + + const ASSIGN_TAG = 'assign_tag'; + const UNASSIGN_TAG = 'unassign_tag'; + + /** @var IL10N */ + protected $l; + + /** @var IURLGenerator */ + protected $url; + + /** @var IManager */ + protected $activityManager; + + /** + * @param IL10N $l + * @param IURLGenerator $url + * @param IManager $activityManager + */ + public function __construct(IL10N $l, IURLGenerator $url, IManager $activityManager) { + $this->l = $l; + $this->url = $url; + $this->activityManager = $activityManager; + } + + /** + * @param IEvent $event + * @param IEvent|null $previousEvent + * @return IEvent + * @throws \InvalidArgumentException + * @since 11.0.0 + */ + public function parse(IEvent $event, IEvent $previousEvent = null) { + if ($event->getApp() !== 'systemtags') { + throw new \InvalidArgumentException(); + } + + 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 + */ + public function parseShortVersion(IEvent $event) { + $parsedParameters = $this->getParameters($event); + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/tag.svg'))); + + if ($event->getSubject() === self::ASSIGN_TAG) { + if ($parsedParameters['actor']['id'] === $this->activityManager->getCurrentUserId()) { + $event->setParsedSubject($this->l->t('Added system tag %1$s', [ + $this->generatePlainSystemTag($parsedParameters['systemtag']), + ])) + ->setRichSubject($this->l->t('Added system tag {systemtag}'), [ + 'systemtag' => $parsedParameters['systemtag'], + ]); + } else { + $event->setParsedSubject($this->l->t('%1$s added system tag %2$s', [ + $parsedParameters['actor']['name'], + $this->generatePlainSystemTag($parsedParameters['systemtag']), + ])) + ->setRichSubject($this->l->t('{actor} added system tag {systemtag}'), [ + 'actor' => $parsedParameters['actor'], + 'systemtag' => $parsedParameters['systemtag'], + ]); + } + } else if ($event->getSubject() === self::UNASSIGN_TAG) { + if ($parsedParameters['actor']['id'] === $this->activityManager->getCurrentUserId()) { + $event->setParsedSubject($this->l->t('Removed system tag %1$s', [ + $this->generatePlainSystemTag($parsedParameters['systemtag']), + ])) + ->setRichSubject($this->l->t('Removed system tag {systemtag}'), [ + 'systemtag' => $parsedParameters['systemtag'], + ]); + } else { + $event->setParsedSubject($this->l->t('%1$s removed system tag %2$s', [ + $parsedParameters['actor']['name'], + $this->generatePlainSystemTag($parsedParameters['systemtag']), + ])) + ->setRichSubject($this->l->t('{actor} removed system tag {systemtag}'), [ + 'actor' => $parsedParameters['actor'], + 'systemtag' => $parsedParameters['systemtag'], + ]); + } + } else { + throw new \InvalidArgumentException(); + } + + return $event; + } + + /** + * @param IEvent $event + * @return IEvent + * @throws \InvalidArgumentException + * @since 11.0.0 + */ + public function parseLongVersion(IEvent $event) { + $parsedParameters = $this->getParameters($event); + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/tag.svg'))); + + if ($event->getSubject() === self::CREATE_TAG) { + if ($parsedParameters['actor']['id'] === $this->activityManager->getCurrentUserId()) { + $event->setParsedSubject($this->l->t('You created system tag %1$s', [ + $this->generatePlainSystemTag($parsedParameters['systemtag']), + ])) + ->setRichSubject($this->l->t('You created system tag {systemtag}'), $parsedParameters); + } else { + $event->setParsedSubject($this->l->t('%1$s created system tag %2$s', [ + $parsedParameters['actor']['name'], + $this->generatePlainSystemTag($parsedParameters['systemtag']), + ])) + ->setRichSubject($this->l->t('{actor} created system tag {systemtag}'), $parsedParameters); + } + } else if ($event->getSubject() === self::DELETE_TAG) { + if ($parsedParameters['actor']['id'] === $this->activityManager->getCurrentUserId()) { + $event->setParsedSubject($this->l->t('You deleted system tag %1$s', [ + $this->generatePlainSystemTag($parsedParameters['systemtag']), + ])) + ->setRichSubject($this->l->t('You deleted system tag {systemtag}'), $parsedParameters); + } else { + $event->setParsedSubject($this->l->t('%1$s deleted system tag %2$s', [ + $parsedParameters['actor']['name'], + $this->generatePlainSystemTag($parsedParameters['systemtag']), + ])) + ->setRichSubject($this->l->t('{actor} deleted system tag {systemtag}'), $parsedParameters); + } + } else if ($event->getSubject() === self::UPDATE_TAG) { + if ($parsedParameters['actor']['id'] === $this->activityManager->getCurrentUserId()) { + $event->setParsedSubject($this->l->t('You updated system tag %2$s to %1$s', [ + $this->generatePlainSystemTag($parsedParameters['newsystemtag']), + $this->generatePlainSystemTag($parsedParameters['oldsystemtag']), + ])) + ->setRichSubject($this->l->t('You updated system tag {oldsystemtag} to {newsystemtag}'), $parsedParameters); + } else { + $event->setParsedSubject($this->l->t('%1$s updated system tag %3$s to %2$s', [ + $parsedParameters['actor']['name'], + $this->generatePlainSystemTag($parsedParameters['newsystemtag']), + $this->generatePlainSystemTag($parsedParameters['oldsystemtag']), + ])) + ->setRichSubject($this->l->t('{actor} updated system tag {oldsystemtag} to {newsystemtag}'), $parsedParameters); + } + } else if ($event->getSubject() === self::ASSIGN_TAG) { + if ($parsedParameters['actor']['id'] === $this->activityManager->getCurrentUserId()) { + $event->setParsedSubject($this->l->t('You added system tag %2$s to %1$s', [ + $parsedParameters['file']['path'], + $this->generatePlainSystemTag($parsedParameters['systemtag']), + ])) + ->setRichSubject($this->l->t('You added system tag {systemtag} to {file}'), $parsedParameters); + } else { + $event->setParsedSubject($this->l->t('%1$s added system tag %3$s to %2$s', [ + $parsedParameters['actor']['name'], + $parsedParameters['file']['path'], + $this->generatePlainSystemTag($parsedParameters['systemtag']), + ])) + ->setRichSubject($this->l->t('{actor} added system tag {systemtag} to {file}'), $parsedParameters); + } + } else if ($event->getSubject() === self::UNASSIGN_TAG) { + if ($parsedParameters['actor']['id'] === $this->activityManager->getCurrentUserId()) { + $event->setParsedSubject($this->l->t('You removed system tag %2$s from %1$s', [ + $parsedParameters['file']['path'], + $this->generatePlainSystemTag($parsedParameters['systemtag']), + ])) + ->setRichSubject($this->l->t('You removed system tag {systemtag} from {file}'), $parsedParameters); + } else { + $event->setParsedSubject($this->l->t('%1$s removed system tag %3$s from %2$s', [ + $parsedParameters['actor']['name'], + $parsedParameters['file']['path'], + $this->generatePlainSystemTag($parsedParameters['systemtag']), + ])) + ->setRichSubject($this->l->t('{actor} removed system tag {systemtag} from {file}'), $parsedParameters); + } + } else { + throw new \InvalidArgumentException(); + } + + return $event; + } + + protected function getParameters(IEvent $event) { + $subject = $event->getSubject(); + $parameters = $event->getSubjectParameters(); + + switch ($subject) { + case self::CREATE_TAG: + case self::DELETE_TAG: + return [ + 'actor' => $this->getUserParameter($parameters[0]), + 'systemtag' => $this->getSystemTagParameter($parameters[1]), + ]; + case self::UPDATE_TAG: + return [ + 'actor' => $this->getUserParameter($parameters[0]), + 'newsystemtag' => $this->getSystemTagParameter($parameters[1]), + 'oldsystemtag' => $this->getSystemTagParameter($parameters[2]), + ]; + case self::ASSIGN_TAG: + case self::UNASSIGN_TAG: + return [ + 'actor' => $this->getUserParameter($parameters[0]), + 'file' => $this->getFileParameter($event->getObjectId(), $parameters[1]), + 'systemtag' => $this->getSystemTagParameter($parameters[2]), + ]; + } + return []; + } + + protected function getFileParameter($id, $path) { + return [ + 'type' => 'file', + 'id' => $id, + 'name' => basename($path), + 'path' => trim($path, '/'), + ]; + } + + protected function getSystemTagParameter($parameter) { + $tagData = json_decode($parameter, true); + if ($tagData === null) { + list($name, $status) = explode('|||', substr($parameter, 3, -3)); + $tagData = [ + 'id' => 0,// No way to recover the ID + 'name' => $name, + 'assignable' => $status === 'assignable', + 'visible' => $status !== 'invisible', + ]; + } + + return [ + 'type' => 'systemtag', + 'id' => (int) $tagData['id'], + 'name' => $tagData['name'], + 'assignable' => $tagData['assignable'] ? '1' : '0', + 'visibility' => $tagData['visible'] ? '1' : '0', + ]; + } + + protected function getUserParameter($parameter) { + return [ + 'type' => 'user', + 'id' => $parameter, + 'name' => $parameter,// FIXME Use display name + ]; + } + + protected function generatePlainSystemTag(array $parameter) { + if ($parameter['assignable'] === '1') { + return $parameter['name']; + } else if ($parameter['visibility'] === '1') { + return $this->l->t('%s (restricted)', $parameter['name']); + } else { + return $this->l->t('%s (invisible)', $parameter['name']); + } + } +} diff --git a/apps/systemtags/lib/Activity/Setting.php b/apps/systemtags/lib/Activity/Setting.php new file mode 100644 index 00000000000..4cdb11b9c84 --- /dev/null +++ b/apps/systemtags/lib/Activity/Setting.php @@ -0,0 +1,98 @@ +<?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\SystemTags\Activity; + + +use OCP\Activity\ISetting; +use OCP\IL10N; + +class Setting implements ISetting { + + /** @var IL10N */ + protected $l; + + /** + * @param IL10N $l + */ + public function __construct(IL10N $l) { + $this->l = $l; + } + + /** + * @return string Lowercase a-z and underscore only identifier + * @since 11.0.0 + */ + public function getIdentifier() { + return 'systemtags'; + } + + /** + * @return string A translated string + * @since 11.0.0 + */ + public function getName() { + return $this->l->t('<strong>System tags</strong> for a file have been modified'); + } + + /** + * @return int whether the filter should be rather on the top or bottom of + * the admin section. The filters are arranged in ascending order of the + * priority values. It is required to return a value between 0 and 100. + * @since 11.0.0 + */ + public function getPriority() { + return 50; + } + + /** + * @return bool True when the option can be changed for the stream + * @since 11.0.0 + */ + public function canChangeStream() { + return true; + } + + /** + * @return bool True when the option can be changed for the stream + * @since 11.0.0 + */ + public function isDefaultEnabledStream() { + return true; + } + + /** + * @return bool True when the option can be changed for the mail + * @since 11.0.0 + */ + public function canChangeMail() { + return true; + } + + /** + * @return bool True when the option can be changed for the stream + * @since 11.0.0 + */ + public function isDefaultEnabledMail() { + return false; + } +} + |