Merge pull request #2165 from nextcloud/sharing-activities-update
Move file sharing activities to the new API
This commit is contained in:
commit
08ef7356f6
|
@ -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();
|
||||
|
|
|
@ -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') {
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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'];
|
||||
}
|
||||
}
|
|
@ -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]),
|
||||
];
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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]),
|
||||
];
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
|
|
|
@ -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)),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
|
@ -684,11 +684,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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue