Browse Source
			
			
			Move file sharing activities to the new API
			
				
		Move file sharing activities to the new API
	
		
	
			
				Signed-off-by: Joas Schilling <coding@schilljs.com>pull/2165/head
				
				  
				  No known key found for this signature in database
				  
				  	
						GPG Key ID: E166FD8976B3BAC8
				  	
				  
				
			
		
		
		
	
				 16 changed files with 1645 additions and 609 deletions
			
			
		- 
					38apps/federatedfilesharing/lib/Controller/RequestHandlerController.php
- 
					8apps/files_sharing/appinfo/app.php
- 
					20apps/files_sharing/appinfo/info.xml
- 
					494apps/files_sharing/lib/Activity.php
- 
					95apps/files_sharing/lib/Activity/Filter.php
- 
					181apps/files_sharing/lib/Activity/Providers/Downloads.php
- 
					261apps/files_sharing/lib/Activity/Providers/Groups.php
- 
					268apps/files_sharing/lib/Activity/Providers/PublicLinks.php
- 
					208apps/files_sharing/lib/Activity/Providers/RemoteShares.php
- 
					289apps/files_sharing/lib/Activity/Providers/Users.php
- 
					98apps/files_sharing/lib/Activity/Settings/PublicLinks.php
- 
					98apps/files_sharing/lib/Activity/Settings/RemoteShare.php
- 
					98apps/files_sharing/lib/Activity/Settings/Shared.php
- 
					12apps/files_sharing/lib/Controller/ShareController.php
- 
					81apps/files_sharing/tests/ActivityTest.php
- 
					5lib/private/Activity/Manager.php
| @ -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; | |||
| 	} | |||
| } | |||
| 
 | |||
| @ -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)), | |||
| 		); | |||
| 	} | |||
| 
 | |||
| } | |||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue