summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoas Schilling <coding@schilljs.com>2016-11-24 15:46:38 +0100
committerJoas Schilling <coding@schilljs.com>2016-11-24 16:15:51 +0100
commit5c2ec584400207308241f4e64bf1b2c563c7340a (patch)
tree3ebf65d3304b8f2f296ed7ec298d35fb06a324fc
parentd6ade509cf33849edb10b33fb2490b2428f9091b (diff)
downloadnextcloud-server-5c2ec584400207308241f4e64bf1b2c563c7340a.tar.gz
nextcloud-server-5c2ec584400207308241f4e64bf1b2c563c7340a.zip
Move ShareByMail activities to new API
Signed-off-by: Joas Schilling <coding@schilljs.com>
-rw-r--r--apps/sharebymail/appinfo/app.php7
-rw-r--r--apps/sharebymail/appinfo/info.xml6
-rw-r--r--apps/sharebymail/lib/Activity.php336
3 files changed, 154 insertions, 195 deletions
diff --git a/apps/sharebymail/appinfo/app.php b/apps/sharebymail/appinfo/app.php
index 0723b2dcc5f..5ef7b6f18cb 100644
--- a/apps/sharebymail/appinfo/app.php
+++ b/apps/sharebymail/appinfo/app.php
@@ -22,10 +22,3 @@
$settings = new \OCA\ShareByMail\Settings();
\OCP\Util::connectHook('\OCP\Config', 'js', $settings, 'announceShareProvider');
-
-\OC::$server->getActivityManager()->registerExtension(function() {
- return new \OCA\ShareByMail\Activity(
- \OC::$server->query('L10NFactory'),
- \OC::$server->getActivityManager()
- );
-});
diff --git a/apps/sharebymail/appinfo/info.xml b/apps/sharebymail/appinfo/info.xml
index 6c4882d349f..1b3aa01bc67 100644
--- a/apps/sharebymail/appinfo/info.xml
+++ b/apps/sharebymail/appinfo/info.xml
@@ -12,4 +12,10 @@
<nextcloud min-version="11" max-version="11" />
</dependencies>
<default_enable/>
+
+ <activity>
+ <providers>
+ <provider>OCA\ShareByMail\Activity</provider>
+ </providers>
+ </activity>
</info>
diff --git a/apps/sharebymail/lib/Activity.php b/apps/sharebymail/lib/Activity.php
index 0b73d73c04c..d80c49fc375 100644
--- a/apps/sharebymail/lib/Activity.php
+++ b/apps/sharebymail/lib/Activity.php
@@ -1,6 +1,6 @@
<?php
/**
- * @copyright Copyright (c) 2016 Bjoern Schiessle <bjoern@schiessle.org>
+ * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
*
* @license GNU AGPL version 3 or any later version
*
@@ -19,251 +19,211 @@
*
*/
-
namespace OCA\ShareByMail;
-
-use OCP\Activity\IExtension;
+use OCP\Activity\IEvent;
use OCP\Activity\IManager;
+use OCP\Activity\IProvider;
use OCP\IL10N;
-use OCP\L10N\IFactory;
-
-class Activity implements IExtension {
+use OCP\IURLGenerator;
+use OCP\IUser;
+use OCP\IUserManager;
- const SHARE_BY_MAIL_APP = 'sharebymail';
+class Activity implements IProvider {
- const SUBJECT_SHARED_EMAIL_SELF = 'shared_with_email_self';
- const SUBJECT_SHARED_EMAIL_BY = 'shared_with_email_by';
+ /** @var IL10N */
+ protected $l;
- /** @var IFactory */
- private $languageFactory;
+ /** @var IURLGenerator */
+ protected $url;
/** @var IManager */
- private $activityManager;
+ protected $activityManager;
- /**
- * @param IFactory $languageFactory
- * @param IManager $activityManager
- */
- public function __construct(IFactory $languageFactory, IManager $activityManager) {
- $this->languageFactory = $languageFactory;
- $this->activityManager = $activityManager;
- }
+ /** @var IUserManager */
+ protected $userManager;
- /**
- * 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 Array "stringID of the type" => "translated string description for the setting"
- * or Array "stringID of the type" => [
- * 'desc' => "translated string description for the setting"
- * 'methods' => [self::METHOD_*],
- * ]
- * @since 8.0.0 - 8.2.0: Added support to allow limiting notifications to certain methods
- */
- public function getNotificationTypes($languageCode) {
- return false;
- }
+ /** @var array */
+ protected $displayNames = [];
- /**
- * 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
- * @since 8.0.0
- */
- public function getDefaultTypes($method) {
- return false;
- }
+ const SUBJECT_SHARED_EMAIL_SELF = 'shared_with_email_self';
+ const SUBJECT_SHARED_EMAIL_BY = 'shared_with_email_by';
/**
- * 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
- * @since 8.0.0
+ * @param IL10N $l
+ * @param IURLGenerator $url
+ * @param IManager $activityManager
+ * @param IUserManager $userManager
*/
- public function getTypeIcon($type) {
- return false;
+ public function __construct(IL10N $l, IURLGenerator $url, IManager $activityManager, IUserManager $userManager) {
+ $this->l = $l;
+ $this->url = $url;
+ $this->activityManager = $activityManager;
+ $this->userManager = $userManager;
}
/**
- * 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
- * @since 8.0.0
+ * @param IEvent $event
+ * @param IEvent|null $previousEvent
+ * @return IEvent
+ * @throws \InvalidArgumentException
+ * @since 11.0.0
*/
- public function translate($app, $text, $params, $stripPath, $highlightParams, $languageCode) {
- if ($app !== self::SHARE_BY_MAIL_APP) {
- return false;
+ public function parse(IEvent $event, IEvent $previousEvent = null) {
+ if ($event->getApp() !== 'sharebymail') {
+ throw new \InvalidArgumentException();
}
- $l = $this->getL10N($languageCode);
-
if ($this->activityManager->isFormattingFilteredObject()) {
- $translation = $this->translateShort($text, $l, $params);
- if ($translation !== false) {
- return $translation;
+ try {
+ return $this->parseShortVersion($event);
+ } catch (\InvalidArgumentException $e) {
+ // Ignore and simply use the long version...
}
}
- return $this->translateLong($text, $l, $params);
+ return $this->parseLongVersion($event);
}
-
/**
- * 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
- * @since 8.0.0
+ * @param IEvent $event
+ * @return IEvent
+ * @throws \InvalidArgumentException
+ * @since 11.0.0
*/
- public function getSpecialParameterList($app, $text) {
- if ($app === self::SHARE_BY_MAIL_APP) {
- switch ($text) {
- case self::SUBJECT_SHARED_EMAIL_BY:
- return [
- 0 => 'file',
- 1 => 'email',
- 2 => 'user',
- ];
- case self::SUBJECT_SHARED_EMAIL_SELF:
- return [
- 0 => 'file',
- 1 => 'email',
- ];
- }
+ public function parseShortVersion(IEvent $event) {
+ $parsedParameters = $this->getParsedParameters($event);
+
+ if ($event->getSubject() === self::SUBJECT_SHARED_EMAIL_SELF) {
+ $event->setParsedSubject($this->l->t('Shared with %1$s', [
+ $parsedParameters['email']['name'],
+ ]))
+ ->setRichSubject($this->l->t('Shared with {email}'), [
+ 'email' => $parsedParameters['email'],
+ ])
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_SHARED_EMAIL_BY) {
+ $event->setParsedSubject($this->l->t('Shared with %1$s by %2$s', [
+ $parsedParameters['email']['name'],
+ $parsedParameters['actor']['name'],
+ ]))
+ ->setRichSubject($this->l->t('Shared with {email} by {actor}'), [
+ 'email' => $parsedParameters['email'],
+ 'actor' => $parsedParameters['actor'],
+ ])
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+
+ } else {
+ throw new \InvalidArgumentException();
}
- return false;
+ return $event;
}
/**
- * 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
- * @since 8.0.0
+ * @param IEvent $event
+ * @return IEvent
+ * @throws \InvalidArgumentException
+ * @since 11.0.0
*/
- public function getGroupParameter($activity) {
- if ($activity['app'] === self::SHARE_BY_MAIL_APP) {
- switch ($activity['subject']) {
- case self::SUBJECT_SHARED_EMAIL_BY:
- // Group by file name
- return 1;
- case self::SUBJECT_SHARED_EMAIL_SELF:
- // Group by user/group
- return 1;
- }
+ public function parseLongVersion(IEvent $event) {
+ $parsedParameters = $this->getParsedParameters($event);
+
+ if ($event->getSubject() === self::SUBJECT_SHARED_EMAIL_SELF) {
+ $event->setParsedSubject($this->l->t('You shared %1$s with %2$s by mail', [
+ $parsedParameters['file']['path'],
+ $parsedParameters['email']['name'],
+ ]))
+ ->setRichSubject($this->l->t('You shared {file} with {email} by mail'), $parsedParameters)
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else if ($event->getSubject() === self::SUBJECT_SHARED_EMAIL_BY) {
+ $event->setParsedSubject($this->l->t('%3$s shared %1$s with %2$s by mail', [
+ $parsedParameters['file']['path'],
+ $parsedParameters['email']['name'],
+ $parsedParameters['actor']['name'],
+ ]))
+ ->setRichSubject($this->l->t('{actor} shared {file} with {email} by mail'), $parsedParameters)
+ ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
+ } else {
+ throw new \InvalidArgumentException();
}
- return false;
-
+ return $event;
}
- /**
- * 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
- * @since 8.0.0
- */
- public function getNavigation() {
- return false;
- }
+ protected function getParsedParameters(IEvent $event) {
+ $subject = $event->getSubject();
+ $parameters = $event->getSubjectParameters();
- /**
- * The extension can check if a customer filter (given by a query string like filter=abc) is valid or not.
- *
- * @param string $filterValue
- * @return boolean
- * @since 8.0.0
- */
- public function isFilterValid($filterValue) {
- return false;
+ switch ($subject) {
+ case self::SUBJECT_SHARED_EMAIL_BY:
+ return [
+ 'file' => $this->generateFileParameter((int) $event->getObjectId(), $parameters[0]),
+ 'email' => $this->generateEmailParameter($parameters[1]),
+ ];
+ case self::SUBJECT_SHARED_EMAIL_SELF:
+ return [
+ 'file' => $this->generateFileParameter((int) $event->getObjectId(), $parameters[0]),
+ 'email' => $this->generateEmailParameter($parameters[1]),
+ 'actor' => $this->generateUserParameter($parameters[2]),
+ ];
+ }
+ throw new \InvalidArgumentException();
}
/**
- * 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
- * @since 8.0.0
+ * @param int $id
+ * @param string $path
+ * @return array
*/
- public function filterNotificationTypes($types, $filter) {
- return false;
+ protected function generateFileParameter($id, $path) {
+ return [
+ 'type' => 'file',
+ 'id' => $id,
+ 'name' => basename($path),
+ 'path' => $path,
+ 'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
+ ];
}
/**
- * 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
- * @since 8.0.0
+ * @param string $email
+ * @return array
*/
- public function getQueryForFilter($filter) {
- return false;
- }
-
- protected function getL10N($languageCode = null) {
- return $this->languageFactory->get(self::SHARE_BY_MAIL_APP, $languageCode);
+ protected function generateEmailParameter($email) {
+ return [
+ 'type' => 'email',
+ 'id' => $email,
+ 'name' => $email, // TODO ask contacts
+ ];
}
/**
- * @param string $text
- * @param IL10N $l
- * @param array $params
- * @return bool|string
+ * @param string $uid
+ * @return array
*/
- protected function translateLong($text, IL10N $l, array $params) {
-
- switch ($text) {
- case self::SUBJECT_SHARED_EMAIL_SELF:
- return (string) $l->t('You shared %1$s with %2$s by mail', $params);
- case self::SUBJECT_SHARED_EMAIL_BY:
- return (string) $l->t('%3$s shared %1$s with %2$s by mail', $params);
+ protected function generateUserParameter($uid) {
+ if (!isset($this->displayNames[$uid])) {
+ $this->displayNames[$uid] = $this->getDisplayName($uid);
}
- return false;
+ return [
+ 'type' => 'user',
+ 'id' => $uid,
+ 'name' => $this->displayNames[$uid],
+ ];
}
/**
- * @param string $text
- * @param IL10N $l
- * @param array $params
- * @return bool|string
+ * @param string $uid
+ * @return string
*/
- protected function translateShort($text, IL10N $l, array $params) {
- switch ($text) {
- case self::SUBJECT_SHARED_EMAIL_SELF:
- return (string) $l->t('Shared with %2$s', $params);
- case self::SUBJECT_SHARED_EMAIL_BY:
- return (string) $l->t('Shared with %3$s by %2$s', $params);
+ protected function getDisplayName($uid) {
+ $user = $this->userManager->get($uid);
+ if ($user instanceof IUser) {
+ return $user->getDisplayName();
+ } else {
+ return $uid;
}
-
- return false;
}
-
}