Move file sharing activities to the new API

Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
Joas Schilling 2016-11-16 12:09:41 +01:00
parent 81e9836900
commit bdaf334c53
No known key found for this signature in database
GPG Key ID: E166FD8976B3BAC8
16 changed files with 1645 additions and 609 deletions

View File

@ -27,7 +27,7 @@
namespace OCA\FederatedFileSharing\Controller;
use OCA\FederatedFileSharing\DiscoveryManager;
use OCA\Files_Sharing\Activity;
use OCA\Files_Sharing\Activity\Providers\RemoteShares;
use OCA\FederatedFileSharing\AddressHandler;
use OCA\FederatedFileSharing\FederatedShareProvider;
use OCA\FederatedFileSharing\Notifications;
@ -172,9 +172,13 @@ class RequestHandlerController extends OCSController {
$sharedByFederatedId = $ownerFederatedId;
}
\OC::$server->getActivityManager()->publishActivity(
Activity::FILES_SHARING_APP, Activity::SUBJECT_REMOTE_SHARE_RECEIVED, array($ownerFederatedId, trim($name, '/')), '', array(),
'', '', $shareWith, Activity::TYPE_REMOTE_SHARE, Activity::PRIORITY_LOW);
$event = \OC::$server->getActivityManager()->generateEvent();
$event->setApp('files_sharing')
->setType('remote_share')
->setSubject(RemoteShares::SUBJECT_REMOTE_SHARE_RECEIVED, [$ownerFederatedId, trim($name, '/')])
->setAffectedUser($shareWith)
->setObject('remote_share', (int) $shareId, $name);
\OC::$server->getActivityManager()->publish($event);
$urlGenerator = \OC::$server->getURLGenerator();
@ -315,11 +319,11 @@ class RequestHandlerController extends OCSController {
list($file, $link) = $this->getFile($this->getCorrectUid($share), $share->getNode()->getId());
$event = \OC::$server->getActivityManager()->generateEvent();
$event->setApp(Activity::FILES_SHARING_APP)
->setType(Activity::TYPE_REMOTE_SHARE)
$event->setApp('files_sharing')
->setType('remote_share')
->setAffectedUser($this->getCorrectUid($share))
->setSubject(Activity::SUBJECT_REMOTE_SHARE_ACCEPTED, [$share->getSharedWith(), basename($file)])
->setObject('files', $share->getNode()->getId(), $file)
->setSubject(RemoteShares::SUBJECT_REMOTE_SHARE_ACCEPTED, [$share->getSharedWith(), $file])
->setObject('files', (int) $share->getNode()->getId(), $file)
->setLink($link);
\OC::$server->getActivityManager()->publish($event);
}
@ -370,11 +374,11 @@ class RequestHandlerController extends OCSController {
list($file, $link) = $this->getFile($this->getCorrectUid($share), $share->getNode()->getId());
$event = \OC::$server->getActivityManager()->generateEvent();
$event->setApp(Activity::FILES_SHARING_APP)
->setType(Activity::TYPE_REMOTE_SHARE)
$event->setApp('files_sharing')
->setType('remote_share')
->setAffectedUser($this->getCorrectUid($share))
->setSubject(Activity::SUBJECT_REMOTE_SHARE_DECLINED, [$share->getSharedWith(), basename($file)])
->setObject('files', $share->getNode()->getId(), $file)
->setSubject(RemoteShares::SUBJECT_REMOTE_SHARE_DECLINED, [$share->getSharedWith(), $file])
->setObject('files', (int) $share->getNode()->getId(), $file)
->setLink($link);
\OC::$server->getActivityManager()->publish($event);
@ -440,9 +444,13 @@ class RequestHandlerController extends OCSController {
->setObject('remote_share', (int) $share['id']);
$notificationManager->markProcessed($notification);
\OC::$server->getActivityManager()->publishActivity(
Activity::FILES_SHARING_APP, Activity::SUBJECT_REMOTE_SHARE_UNSHARED, array($owner, $path), '', array(),
'', '', $user, Activity::TYPE_REMOTE_SHARE, Activity::PRIORITY_MEDIUM);
$event = \OC::$server->getActivityManager()->generateEvent();
$event->setApp('files_sharing')
->setType('remote_share')
->setSubject(RemoteShares::SUBJECT_REMOTE_SHARE_UNSHARED, [$owner, $path])
->setAffectedUser($user)
->setObject('remote_share', (int) $share['id'], $path);
\OC::$server->getActivityManager()->publish($event);
}
return new Http\DataResponse();

View File

@ -50,14 +50,6 @@ $eventDispatcher->addListener(
// \OCP\Util::addStyle('files_sharing', 'sharetabview');
\OC::$server->getActivityManager()->registerExtension(function() {
return new \OCA\Files_Sharing\Activity(
\OC::$server->query('L10NFactory'),
\OC::$server->getURLGenerator(),
\OC::$server->getActivityManager()
);
});
$config = \OC::$server->getConfig();
if ($config->getAppValue('core', 'shareapi_enabled', 'yes') === 'yes') {

View File

@ -23,6 +23,26 @@ Turning the feature off removes shared files and folders on the server for all s
<namespace>Files_Sharing</namespace>
<activity>
<settings>
<setting>OCA\Files_Sharing\Activity\Settings\Shared</setting>
<setting>OCA\Files_Sharing\Activity\Settings\RemoteShare</setting>
<setting>OCA\Files_Sharing\Activity\Settings\PublicLinks</setting>
</settings>
<filters>
<filter>OCA\Files_Sharing\Activity\Filter</filter>
</filters>
<providers>
<provider>OCA\Files_Sharing\Activity\Providers\Downloads</provider>
<provider>OCA\Files_Sharing\Activity\Providers\Groups</provider>
<provider>OCA\Files_Sharing\Activity\Providers\PublicLinks</provider>
<provider>OCA\Files_Sharing\Activity\Providers\RemoteShares</provider>
<provider>OCA\Files_Sharing\Activity\Providers\Users</provider>
</providers>
</activity>
<background-jobs>
<job>OCA\Files_Sharing\DeleteOrphanedSharesJob</job>
<job>OCA\Files_Sharing\ExpireSharesJob</job>

View File

@ -1,494 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
*
* @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\Files_Sharing;
use OCP\Activity\IExtension;
use OCP\Activity\IManager;
use OCP\IL10N;
use OCP\IURLGenerator;
use OCP\L10N\IFactory;
class Activity implements IExtension {
const FILES_SHARING_APP = 'files_sharing';
/**
* Filter with all sharing related activities
*/
const FILTER_SHARES = 'shares';
/**
* Activity types known to this extension
*/
const TYPE_PUBLIC_LINKS = 'public_links';
const TYPE_REMOTE_SHARE = 'remote_share';
const TYPE_SHARED = 'shared';
/**
* Subject keys for translation of the subjections
*/
const SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED = 'public_shared_file_downloaded';
const SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED = 'public_shared_folder_downloaded';
const SUBJECT_REMOTE_SHARE_ACCEPTED = 'remote_share_accepted';
const SUBJECT_REMOTE_SHARE_DECLINED = 'remote_share_declined';
const SUBJECT_REMOTE_SHARE_RECEIVED = 'remote_share_received';
const SUBJECT_REMOTE_SHARE_UNSHARED = 'remote_share_unshared';
const SUBJECT_SHARED_USER_SELF = 'shared_user_self';
const SUBJECT_RESHARED_USER_BY = 'reshared_user_by';
const SUBJECT_UNSHARED_USER_SELF = 'unshared_user_self';
const SUBJECT_UNSHARED_USER_BY = 'unshared_user_by';
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';
const SUBJECT_SHARED_LINK_SELF = 'shared_link_self';
const SUBJECT_RESHARED_LINK_BY = 'reshared_link_by';
const SUBJECT_UNSHARED_LINK_SELF = 'unshared_link_self';
const SUBJECT_UNSHARED_LINK_BY = 'unshared_link_by';
const SUBJECT_LINK_EXPIRED = 'link_expired';
const SUBJECT_LINK_BY_EXPIRED = 'link_by_expired';
const SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED = 'file_shared_with_email_downloaded';
const SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED = 'folder_shared_with_email_downloaded';
const SUBJECT_SHARED_WITH_BY = 'shared_with_by';
const SUBJECT_UNSHARED_BY = 'unshared_by';
/** @var IFactory */
protected $languageFactory;
/** @var IURLGenerator */
protected $URLGenerator;
/** @var IManager */
protected $activityManager;
/**
* @param IFactory $languageFactory
* @param IURLGenerator $URLGenerator
* @param IManager $activityManager
*/
public function __construct(IFactory $languageFactory, IURLGenerator $URLGenerator, IManager $activityManager) {
$this->languageFactory = $languageFactory;
$this->URLGenerator = $URLGenerator;
$this->activityManager = $activityManager;
}
protected function getL10N($languageCode = null) {
return $this->languageFactory->get(self::FILES_SHARING_APP, $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::TYPE_SHARED => (string) $l->t('A file or folder has been <strong>shared</strong>'),
self::TYPE_REMOTE_SHARE => (string) $l->t('A file or folder was shared from <strong>another server</strong>'),
self::TYPE_PUBLIC_LINKS => (string) $l->t('A file or folder shared by mail or by public link was <strong>downloaded</strong>'),
);
}
/**
* 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) {
$defaultTypes = [
self::TYPE_SHARED,
self::TYPE_REMOTE_SHARE,
];
if ($method === self::METHOD_STREAM) {
$defaultTypes[] = self::TYPE_PUBLIC_LINKS;
}
return $defaultTypes;
}
/**
* 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::TYPE_SHARED:
case self::TYPE_REMOTE_SHARE:
return 'icon-share';
case self::TYPE_PUBLIC_LINKS:
return 'icon-download';
}
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::FILES_SHARING_APP) {
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 translateLong($text, IL10N $l, array $params) {
switch ($text) {
case self::SUBJECT_REMOTE_SHARE_RECEIVED:
if (sizeof($params) === 2) {
// New activity ownCloud 8.2+
return (string) $l->t('You received a new remote share %2$s from %1$s', $params);
}
return (string) $l->t('You received a new remote share from %s', $params);
case self::SUBJECT_REMOTE_SHARE_ACCEPTED:
return (string) $l->t('%1$s accepted remote share %2$s', $params);
case self::SUBJECT_REMOTE_SHARE_DECLINED:
return (string) $l->t('%1$s declined remote share %2$s', $params);
case self::SUBJECT_REMOTE_SHARE_UNSHARED:
return (string) $l->t('%1$s unshared %2$s from you', $params);
case self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED:
return (string) $l->t('Public shared folder %1$s was downloaded', $params);
case self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED:
return (string) $l->t('Public shared file %1$s was downloaded', $params);
case self::SUBJECT_SHARED_USER_SELF:
return (string) $l->t('You shared %1$s with %2$s', $params);
case self::SUBJECT_RESHARED_USER_BY:
return (string) $l->t('%2$s shared %1$s with %3$s', $params);
case self::SUBJECT_UNSHARED_USER_SELF:
return (string) $l->t('You removed the share of %2$s for %1$s', $params);
case self::SUBJECT_UNSHARED_USER_BY:
return (string) $l->t('%2$s removed the share of %3$s for %1$s', $params);
case self::SUBJECT_SHARED_GROUP_SELF:
return (string) $l->t('You shared %1$s with group %2$s', $params);
case self::SUBJECT_RESHARED_GROUP_BY:
return (string) $l->t('%2$s shared %1$s with group %3$s', $params);
case self::SUBJECT_UNSHARED_GROUP_SELF:
return (string) $l->t('You removed the share of group %2$s for %1$s', $params);
case self::SUBJECT_UNSHARED_GROUP_BY:
return (string) $l->t('%2$s removed the share of group %3$s for %1$s', $params);
case self::SUBJECT_RESHARED_LINK_BY:
return (string) $l->t('%2$s shared %1$s via link', $params);
case self::SUBJECT_SHARED_LINK_SELF:
return (string) $l->t('You shared %1$s via link', $params);
case self::SUBJECT_UNSHARED_LINK_SELF:
return (string) $l->t('You removed the public link for %1$s', $params);
case self::SUBJECT_UNSHARED_LINK_BY:
return (string) $l->t('%2$s removed the public link for %1$s', $params);
case self::SUBJECT_LINK_EXPIRED:
return (string) $l->t('Your public link for %1$s expired', $params);
case self::SUBJECT_LINK_BY_EXPIRED:
return (string) $l->t('The public link of %2$s for %1$s expired', $params);
case self::SUBJECT_SHARED_WITH_BY:
return (string) $l->t('%2$s shared %1$s with you', $params);
case self::SUBJECT_UNSHARED_BY:
return (string) $l->t('%2$s removed the share for %1$s', $params);
case self::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED:
return (string) $l->t('File %1$s shared by email with %2$s was downloaded', $params);
case self::SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED:
return (string) $l->t('Folder %1$s shared by email with %2$s was downloaded', $params);
}
return false;
}
/**
* @param string $text
* @param IL10N $l
* @param array $params
* @return bool|string
*/
protected function translateShort($text, IL10N $l, array $params) {
switch ($text) {
case self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED:
case self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED:
return (string) $l->t('Downloaded via public link');
case self::SUBJECT_SHARED_USER_SELF:
return (string) $l->t('Shared with %2$s', $params);
case self::SUBJECT_RESHARED_USER_BY:
return (string) $l->t('Shared with %3$s by %2$s', $params);
case self::SUBJECT_UNSHARED_USER_SELF:
return (string) $l->t('Removed share for %2$s', $params);
case self::SUBJECT_UNSHARED_USER_BY:
return (string) $l->t('%2$s removed share for %3$s', $params);
case self::SUBJECT_SHARED_GROUP_SELF:
return (string) $l->t('Shared with group %2$s', $params);
case self::SUBJECT_RESHARED_GROUP_BY:
return (string) $l->t('Shared with group %3$s by %2$s', $params);
case self::SUBJECT_UNSHARED_GROUP_SELF:
return (string) $l->t('Removed share of group %2$s', $params);
case self::SUBJECT_UNSHARED_GROUP_BY:
return (string) $l->t('%2$s removed share of group %3$s', $params);
case self::SUBJECT_RESHARED_LINK_BY:
return (string) $l->t('Shared via link by %2$s', $params);
case self::SUBJECT_SHARED_LINK_SELF:
return (string) $l->t('Shared via public link');
case self::SUBJECT_UNSHARED_LINK_SELF:
return (string) $l->t('Removed public link');
case self::SUBJECT_UNSHARED_LINK_BY:
return (string) $l->t('%2$s removed public link');
case self::SUBJECT_LINK_EXPIRED:
return (string) $l->t('Public link expired', $params);
case self::SUBJECT_LINK_BY_EXPIRED:
return (string) $l->t('Public link of %2$s expired', $params);
case self::SUBJECT_SHARED_WITH_BY:
return (string) $l->t('Shared by %2$s', $params);
case self::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED:
case self::SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED:
return (string) $l->t('Downloaded by %2$s', $params);
default:
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
* * email => will add a mailto link
*
* @param string $app
* @param string $text
* @return array|false
*/
public function getSpecialParameterList($app, $text) {
if ($app === self::FILES_SHARING_APP) {
switch ($text) {
case self::SUBJECT_REMOTE_SHARE_RECEIVED:
case self::SUBJECT_REMOTE_SHARE_UNSHARED:
return array(
0 => 'federated_cloud_id',
//1 => 'file', in theory its a file, but it does not exist yet/anymore
);
case self::SUBJECT_REMOTE_SHARE_ACCEPTED:
case self::SUBJECT_REMOTE_SHARE_DECLINED:
return array(
0 => 'federated_cloud_id',
1 => 'file',
);
case self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED:
case self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED:
return array(
0 => 'file',
);
case self::SUBJECT_SHARED_LINK_SELF:
case self::SUBJECT_UNSHARED_LINK_SELF:
case self::SUBJECT_LINK_EXPIRED:
return [0 => 'file'];
case self::SUBJECT_RESHARED_LINK_BY:
return [
0 => 'file',
1 => 'username',
2 => '',
];
case self::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED:
case self::SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED:
return array(
0 => 'file',
1 => 'email',
);
case self::SUBJECT_SHARED_USER_SELF:
case self::SUBJECT_SHARED_WITH_BY:
case self::SUBJECT_UNSHARED_BY:
case self::SUBJECT_UNSHARED_LINK_BY:
case self::SUBJECT_LINK_BY_EXPIRED:
case self::SUBJECT_UNSHARED_USER_SELF:
return [0 => 'file', 1 => 'username'];
case self::SUBJECT_RESHARED_USER_BY:
case self::SUBJECT_UNSHARED_USER_BY:
return [
0 => 'file',
1 => 'username',
2 => 'username',
];
case self::SUBJECT_SHARED_GROUP_SELF:
case self::SUBJECT_UNSHARED_GROUP_SELF:
return [
0 => 'file',
1 => 'group',
];
case self::SUBJECT_RESHARED_GROUP_BY:
case self::SUBJECT_UNSHARED_GROUP_BY:
return [
0 => 'file',
1 => 'username',
2 => 'group',
];
}
}
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) {
if ($activity['app'] === self::FILES_SHARING_APP) {
switch ($activity['subject']) {
case self::SUBJECT_SHARED_LINK_SELF:
case self::SUBJECT_UNSHARED_LINK_SELF:
case self::SUBJECT_LINK_EXPIRED:
case self::SUBJECT_SHARED_WITH_BY:
case self::SUBJECT_UNSHARED_BY:
// Group by file name
return 0;
case self::SUBJECT_SHARED_USER_SELF:
case self::SUBJECT_SHARED_GROUP_SELF:
// Group by user/group
return 1;
}
}
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() {
$l = $this->getL10N();
return [
'apps' => [],
'top' => [
self::FILTER_SHARES => [
'id' => self::FILTER_SHARES,
'icon' => 'icon-share',
'name' => (string) $l->t('File shares'),
'url' => $this->URLGenerator->linkToRoute('activity.Activities.showList', ['filter' => self::FILTER_SHARES]),
],
],
];
}
/**
* 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 $filterValue === self::FILTER_SHARES;
}
/**
* 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) {
switch ($filter) {
case self::FILTER_SHARES:
return array_intersect([self::TYPE_SHARED, self::TYPE_REMOTE_SHARE], $types);
}
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) {
if ($filter === self::FILTER_SHARES) {
return [
'`app` = ?',
[self::FILES_SHARING_APP,],
];
}
return false;
}
}

View File

@ -0,0 +1,95 @@
<?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;
use OCP\Activity\IFilter;
use OCP\IL10N;
use OCP\IURLGenerator;
class Filter implements IFilter {
const TYPE_REMOTE_SHARE = 'remote_share';
const TYPE_SHARED = 'shared';
/** @var IL10N */
protected $l;
/** @var IURLGenerator */
protected $url;
public function __construct(IL10N $l, IURLGenerator $url) {
$this->l = $l;
$this->url = $url;
}
/**
* @return string Lowercase a-z only identifier
* @since 11.0.0
*/
public function getIdentifier() {
return 'files_sharing';
}
/**
* @return string A translated string
* @since 11.0.0
*/
public function getName() {
return $this->l->t('File shares');
}
/**
* @return int
* @since 11.0.0
*/
public function getPriority() {
return 31;
}
/**
* @return string Full URL to an icon, empty string when none is given
* @since 11.0.0
*/
public function getIcon() {
return $this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'));
}
/**
* @param string[] $types
* @return string[] An array of allowed apps from which activities should be displayed
* @since 11.0.0
*/
public function filterTypes(array $types) {
return array_intersect([
self::TYPE_SHARED,
self::TYPE_REMOTE_SHARE
], $types);
}
/**
* @return string[] An array of allowed apps from which activities should be displayed
* @since 11.0.0
*/
public function allowedApps() {
return ['files_sharing'];
}
}

View File

@ -0,0 +1,181 @@
<?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;
class Downloads implements IProvider {
/** @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';
const SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED = 'file_shared_with_email_downloaded';
const SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED = 'folder_shared_with_email_downloaded';
/**
* @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() !== 'files_sharing') {
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->getParsedParameters($event);
if ($event->getSubject() === self::SUBJECT_PUBLIC_SHARED_FOLDER_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')));
} 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')));
} else {
throw new \InvalidArgumentException();
}
return $event;
}
/**
* @param IEvent $event
* @return IEvent
* @throws \InvalidArgumentException
* @since 11.0.0
*/
public function parseLongVersion(IEvent $event) {
$parsedParameters = $this->getParsedParameters($event);
if ($event->getSubject() === self::SUBJECT_PUBLIC_SHARED_FOLDER_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')));
} 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')));
} else {
throw new \InvalidArgumentException();
}
return $event;
}
/**
* @param IEvent $event
* @return array
*/
protected function getParsedParameters(IEvent $event) {
$subject = $event->getSubject();
$parameters = $event->getSubjectParameters();
switch ($subject) {
case self::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED:
case self::SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED:
return [
'file' => $this->generateFileParameter($event->getObjectId(), $parameters[0]),
'email' => [
'type' => 'email',
'id' => $parameters[1],
'name' => $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' => $path,
'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
];
}
}

View File

@ -0,0 +1,261 @@
<?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;
class Groups implements IProvider {
/** @var IL10N */
protected $l;
/** @var IURLGenerator */
protected $url;
/** @var IManager */
protected $activityManager;
/** @var IUserManager */
protected $userManager;
/** @var array */
protected $displayNames = [];
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 IL10N $l
* @param IURLGenerator $url
* @param IManager $activityManager
* @param IUserManager $userManager
*/
public function __construct(IL10N $l, IURLGenerator $url, IManager $activityManager, IUserManager $userManager) {
$this->l = $l;
$this->url = $url;
$this->activityManager = $activityManager;
$this->userManager = $userManager;
}
/**
* @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() !== 'files_sharing') {
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->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')));
} 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')));
} else if ($event->getSubject() === self::SUBJECT_RESHARED_GROUP_BY) {
$event->setParsedSubject($this->l->t('%2$s shared with %1$s by', [
$parsedParameters['group']['name'],
$parsedParameters['actor']['name'],
]))
->setRichSubject($this->l->t('{actor} shared with {group}'), [
'group' => $parsedParameters['group'],
'actor' => $parsedParameters['actor'],
])
->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg')));
} else if ($event->getSubject() === self::SUBJECT_UNSHARED_GROUP_BY) {
$event->setParsedSubject($this->l->t('%2$s removed share for %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')));
} else {
throw new \InvalidArgumentException();
}
return $event;
}
/**
* @param IEvent $event
* @return IEvent
* @throws \InvalidArgumentException
* @since 11.0.0
*/
public function parseLongVersion(IEvent $event) {
$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')));
} 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')));
} 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')));
} 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')));
} else {
throw new \InvalidArgumentException();
}
return $event;
}
protected function getParsedParameters(IEvent $event) {
$subject = $event->getSubject();
$parameters = $event->getSubjectParameters();
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]),
'group' => [
'type' => 'group',
'id' => $parameters[2],
'name' => $parameters[2],
],
'actor' => $this->generateUserParameter($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]),
'group' => [
'type' => 'group',
'id' => $parameters[1],
'name' => $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' => $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;
}
}
}

View File

@ -0,0 +1,268 @@
<?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;
class PublicLinks implements IProvider {
/** @var IL10N */
protected $l;
/** @var IURLGenerator */
protected $url;
/** @var IManager */
protected $activityManager;
/** @var IUserManager */
protected $userManager;
/** @var array */
protected $displayNames = [];
const SUBJECT_SHARED_LINK_SELF = 'shared_link_self';
const SUBJECT_RESHARED_LINK_BY = 'reshared_link_by';
const SUBJECT_UNSHARED_LINK_SELF = 'unshared_link_self';
const SUBJECT_UNSHARED_LINK_BY = 'unshared_link_by';
const SUBJECT_LINK_EXPIRED = 'link_expired';
const SUBJECT_LINK_BY_EXPIRED = 'link_by_expired';
/**
* @param IL10N $l
* @param IURLGenerator $url
* @param IManager $activityManager
* @param IUserManager $userManager
*/
public function __construct(IL10N $l, IURLGenerator $url, IManager $activityManager, IUserManager $userManager) {
$this->l = $l;
$this->url = $url;
$this->activityManager = $activityManager;
$this->userManager = $userManager;
}
/**
* @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() !== 'files_sharing') {
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->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')));
} 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')));
} 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')));
} 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')));
} else {
throw new \InvalidArgumentException();
}
return $event;
}
/**
* @param IEvent $event
* @return IEvent
* @throws \InvalidArgumentException
* @since 11.0.0
*/
public function parseLongVersion(IEvent $event) {
$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')));
} 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')));
} 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')));
} else if ($event->getSubject() === self::SUBJECT_UNSHARED_LINK_BY) {
$event->setParsedSubject($this->l->t('%1$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')));
} else {
throw new \InvalidArgumentException();
}
return $event;
}
protected function getParsedParameters(IEvent $event) {
$subject = $event->getSubject();
$parameters = $event->getSubjectParameters();
switch ($subject) {
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]),
];
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]),
];
}
return [];
}
/**
* @param int $id
* @param string $path
* @return array
*/
protected function generateFileParameter($id, $path) {
return [
'type' => 'file',
'id' => $id,
'name' => basename($path),
'path' => $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;
}
}
}

View File

@ -0,0 +1,208 @@
<?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;
class RemoteShares implements IProvider {
/** @var IL10N */
protected $l;
/** @var IURLGenerator */
protected $url;
/** @var IManager */
protected $activityManager;
const SUBJECT_REMOTE_SHARE_ACCEPTED = 'remote_share_accepted';
const SUBJECT_REMOTE_SHARE_DECLINED = 'remote_share_declined';
const SUBJECT_REMOTE_SHARE_RECEIVED = 'remote_share_received';
const SUBJECT_REMOTE_SHARE_UNSHARED = 'remote_share_unshared';
/**
* @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() !== 'files_sharing') {
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->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')));
} 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')));
} else {
throw new \InvalidArgumentException();
}
return $event;
}
/**
* @param IEvent $event
* @return IEvent
* @throws \InvalidArgumentException
* @since 11.0.0
*/
public function parseLongVersion(IEvent $event) {
$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')));
} 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')));
} 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')));
} 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')));
} else {
throw new \InvalidArgumentException();
}
return $event;
}
protected function getParsedParameters(IEvent $event) {
$subject = $event->getSubject();
$parameters = $event->getSubjectParameters();
$remoteUser = explode('@', $parameters[0], 2);
switch ($subject) {
case self::SUBJECT_REMOTE_SHARE_RECEIVED:
case self::SUBJECT_REMOTE_SHARE_UNSHARED:
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],
],
];
case self::SUBJECT_REMOTE_SHARE_ACCEPTED:
case self::SUBJECT_REMOTE_SHARE_DECLINED:
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],
],
];
}
return [];
}
/**
* @param int $id
* @param string $path
* @return array
*/
protected function generateFileParameter($id, $path) {
return [
'type' => 'file',
'id' => $id,
'name' => basename($path),
'path' => $path,
'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
];
}
}

View File

@ -0,0 +1,289 @@
<?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;
class Users implements IProvider {
/** @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';
const SUBJECT_UNSHARED_USER_SELF = 'unshared_user_self';
const SUBJECT_UNSHARED_USER_BY = 'unshared_user_by';
const SUBJECT_SHARED_WITH_BY = 'shared_with_by';
const SUBJECT_UNSHARED_BY = 'unshared_by';
/**
* @param IL10N $l
* @param IURLGenerator $url
* @param IManager $activityManager
* @param IUserManager $userManager
*/
public function __construct(IL10N $l, IURLGenerator $url, IManager $activityManager, IUserManager $userManager) {
$this->l = $l;
$this->url = $url;
$this->activityManager = $activityManager;
$this->userManager = $userManager;
}
/**
* @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() !== 'files_sharing') {
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->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')));
} 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')));
} else if ($event->getSubject() === self::SUBJECT_RESHARED_USER_BY) {
$event->setParsedSubject($this->l->t('%2$s shared with %1$s by', [
$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')));
} 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')));
} 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')));
} 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')));
} else {
throw new \InvalidArgumentException();
}
return $event;
}
/**
* @param IEvent $event
* @return IEvent
* @throws \InvalidArgumentException
* @since 11.0.0
*/
public function parseLongVersion(IEvent $event) {
$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')));
} 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')));
} 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')));
} 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')));
} 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')));
} 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')));
} else {
throw new \InvalidArgumentException();
}
return $event;
}
protected function getParsedParameters(IEvent $event) {
$subject = $event->getSubject();
$parameters = $event->getSubjectParameters();
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]),
];
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]),
];
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]),
];
}
return [];
}
/**
* @param int $id
* @param string $path
* @return array
*/
protected function generateFileParameter($id, $path) {
return [
'type' => 'file',
'id' => $id,
'name' => basename($path),
'path' => $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;
}
}
}

View File

@ -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\Files_Sharing\Activity\Settings;
use OCP\Activity\ISetting;
use OCP\IL10N;
class PublicLinks 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 'public_links';
}
/**
* @return string A translated string
* @since 11.0.0
*/
public function getName() {
return $this->l->t('A file or folder shared by mail or by public link was <strong>downloaded</strong>');
}
/**
* @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 20;
}
/**
* @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;
}
}

View File

@ -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\Files_Sharing\Activity\Settings;
use OCP\Activity\ISetting;
use OCP\IL10N;
class RemoteShare 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 'remote_share';
}
/**
* @return string A translated string
* @since 11.0.0
*/
public function getName() {
return $this->l->t('A file or folder was shared from <strong>another server</strong>');
}
/**
* @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 11;
}
/**
* @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 true;
}
}

View File

@ -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\Files_Sharing\Activity\Settings;
use OCP\Activity\ISetting;
use OCP\IL10N;
class Shared 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 'shared';
}
/**
* @return string A translated string
* @since 11.0.0
*/
public function getName() {
return $this->l->t('A file or folder has been <strong>shared</strong>');
}
/**
* @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 10;
}
/**
* @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 true;
}
}

View File

@ -51,7 +51,7 @@ use OCP\ILogger;
use OCP\IUserManager;
use OCP\ISession;
use OCP\IPreview;
use OCA\Files_Sharing\Activity;
use OCA\Files_Sharing\Activity\Providers\Downloads;
use \OCP\Files\NotFoundException;
use OCP\Files\IRootFolder;
use OCP\Share\Exceptions\ShareNotFound;
@ -570,16 +570,16 @@ class ShareController extends Controller {
if ($share->getShareType() === \OCP\Share::SHARE_TYPE_EMAIL) {
if ($node instanceof \OCP\Files\File) {
$subject = Activity::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED;
$subject = Downloads::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED;
} else {
$subject = Activity::SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED;
$subject = Downloads::SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED;
}
$parameters[] = $share->getSharedWith();
} else {
if ($node instanceof \OCP\Files\File) {
$subject = Activity::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED;
$subject = Downloads::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED;
} else {
$subject = Activity::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED;
$subject = Downloads::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED;
}
}
@ -608,7 +608,7 @@ class ShareController extends Controller {
$event = $this->activityManager->generateEvent();
$event->setApp('files_sharing')
->setType(Activity::TYPE_PUBLIC_LINKS)
->setType('public_links')
->setSubject($subject, $parameters)
->setAffectedUser($affectedUser)
->setObject('files', $fileId, $filePath);

View File

@ -1,81 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Björn Schießle <bjoern@schiessle.org>
* @author Joas Schilling <coding@schilljs.com>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @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\Files_Sharing\Tests;
/**
* Class ActivityTest
*
* @group DB
*
* @package OCA\Files_Sharing\Tests
*/
class ActivityTest extends TestCase {
/**
* @var \OCA\Files_Sharing\Activity
*/
private $activity;
protected function setUp() {
parent::setUp();
$this->activity = new \OCA\Files_Sharing\Activity(
$this->getMockBuilder('OCP\L10N\IFactory')
->disableOriginalConstructor()
->getMock(),
$this->getMockBuilder('OCP\IURLGenerator')
->disableOriginalConstructor()
->getMock(),
$this->getMockBuilder('OCP\Activity\IManager')
->disableOriginalConstructor()
->getMock()
);
}
/**
* @dataProvider dataTestGetDefaultType
*/
public function testGetDefaultTypes($method, $expectedResult) {
$result = $this->activity->getDefaultTypes($method);
if (is_array($expectedResult)) {
$this->assertSame(count($expectedResult), count($result));
foreach ($expectedResult as $key => $expected) {
$this->assertSame($expected, $result[$key]);
}
} else {
$this->assertSame($expectedResult, $result);
}
}
public function dataTestGetDefaultType() {
return array(
array('email', array(\OCA\Files_Sharing\Activity::TYPE_SHARED, \OCA\Files_Sharing\Activity::TYPE_REMOTE_SHARE)),
array('stream', array(\OCA\Files_Sharing\Activity::TYPE_SHARED, \OCA\Files_Sharing\Activity::TYPE_REMOTE_SHARE, \OCA\Files_Sharing\Activity::TYPE_PUBLIC_LINKS)),
);
}
}

View File

@ -683,11 +683,6 @@ class Manager implements IManager {
foreach ($this->getExtensions() as $c) {
$result = $c->getNotificationTypes($languageCode);
if (is_array($result)) {
if (class_exists('\OCA\Files_Sharing\Activity', false) && $c instanceof \OCA\Files_Sharing\Activity) {
$sharingNotificationTypes = $result;
continue;
}
$notificationTypes = array_merge($notificationTypes, $result);
}
}