Browse Source

introduce share by mail, ui part

Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>
Bjoern Schiessle 7 years ago
parent
commit
0a6f02801f

+ 23 - 67
apps/files_sharing/lib/Controller/ShareesAPIController.php

@@ -404,68 +404,6 @@ class ShareesAPIController extends OCSController {
 		return $remote;
 	}
 
-	/**
-	 * @param string $search
-	 */
-	protected function getEmails($search) {
-		$this->result['emails'] = [];
-		$this->result['exact']['emails'] = [];
-
-		$foundEmail = false;
-
-		// Search in contacts
-		//@todo Pagination missing
-		$addressBookContacts = $this->contactsManager->search($search, ['FN', 'EMAIL']);
-		foreach ($addressBookContacts as $contact) {
-			if (!isset($contact['EMAIL'])) {
-				continue;
-			}
-
-			$emails = $contact['EMAIL'];
-			if (!is_array($emails)) {
-				$emails = [$emails];
-			}
-
-			foreach ($emails as $email) {
-				if (strtolower($search) === strtolower($contact['FN']) ||
-					strtolower($search) === strtolower($email)
-				) {
-					if (strtolower($search) === strtolower($email)) {
-						$foundEmail = true;
-					}
-
-					$this->result['exact']['emails'][] = [
-						'label' => $contact['FN'],
-						'value' => [
-							'shareType' => Share::SHARE_TYPE_EMAIL,
-							'shareWith' => $email,
-						],
-					];
-				} else if ($this->shareeEnumeration) {
-					$this->result['emails'][] = [
-						'label' => $contact['FN'],
-						'value' => [
-							'shareType' => Share::SHARE_TYPE_EMAIL,
-							'shareWith' => $email,
-						],
-					];
-				}
-			}
-		}
-
-		if (!$foundEmail && substr_count($search, '@') >= 1 && $this->offset === 0) {
-			$this->result['exact']['emails'][] = [
-				'label' => $search,
-				'value' => [
-					'shareType' => Share::SHARE_TYPE_EMAIL,
-					'shareWith' => $search,
-				],
-			];
-		}
-
-		$this->reachedEndFor[] = 'emails';
-	}
-
 	/**
 	 * @NoAdminRequired
 	 *
@@ -487,17 +425,16 @@ class ShareesAPIController extends OCSController {
 
 		$shareTypes = [
 			Share::SHARE_TYPE_USER,
+			Share::SHARE_TYPE_EMAIL,
+			Share::SHARE_TYPE_REMOTE
 		];
 
 		if ($this->shareManager->allowGroupSharing()) {
 			$shareTypes[] = Share::SHARE_TYPE_GROUP;
 		}
 
-		$shareTypes[] = Share::SHARE_TYPE_EMAIL;
-		$shareTypes[] = Share::SHARE_TYPE_REMOTE;
-
-		if (is_array($shareType)) {
-			$shareTypes = array_intersect($shareTypes, $shareType);
+		if (isset($_GET['shareType']) && is_array($_GET['shareType'])) {
+			$shareTypes = array_intersect($shareTypes, $_GET['shareType']);
 			sort($shareTypes);
 		} else if (is_numeric($shareType)) {
 			$shareTypes = array_intersect($shareTypes, [(int) $shareType]);
@@ -583,6 +520,25 @@ class ShareesAPIController extends OCSController {
 		return $response;
 	}
 
+	/**
+	 * add option to send share by mail
+	 *
+	 * @param string $search
+	 */
+	protected function getEmail($search) {
+		$this->result['emails'] = [];
+
+		if (substr_count($search, '@') >= 1 && substr_count($search, ' ') === 0 && $this->offset === 0) {
+			$this->result['exact']['emails'][] = [
+				'label' => $search,
+				'value' => [
+					'shareType' => Share::SHARE_TYPE_EMAIL,
+					'shareWith' => $search,
+				],
+			];
+		}
+	}
+
 	/**
 	 * Generates a bunch of pagination links for the current page
 	 *

+ 20 - 6
core/js/sharedialogview.js

@@ -154,10 +154,12 @@
 						var users   = result.ocs.data.exact.users.concat(result.ocs.data.users);
 						var groups  = result.ocs.data.exact.groups.concat(result.ocs.data.groups);
 						var remotes = result.ocs.data.exact.remotes.concat(result.ocs.data.remotes);
+						var emails = result.ocs.data.exact.emails.concat(result.ocs.data.emails);
 
 						var usersLength;
 						var groupsLength;
 						var remotesLength;
+						var emailsLength;
 
 						var i, j;
 
@@ -212,10 +214,18 @@
 										break;
 									}
 								}
+							} else if (share.share_type === OC.Share.SHARE_TYPE_EMAIL) {
+							emailsLength = emails.length;
+							for (j = 0; j < emailsLength; j++) {
+								if (emails[j].value.shareWith === share.share_with) {
+									emails.splice(j, 1);
+									break;
+								}
 							}
 						}
+						}
 
-						var suggestions = users.concat(groups).concat(remotes);
+						var suggestions = users.concat(groups).concat(remotes).concat(emails);
 
 						if (suggestions.length > 0) {
 							$('.shareWithField').removeClass('error')
@@ -268,6 +278,10 @@
 						sharee: text
 					});
 				}
+			} else if (item.value.shareType === OC.Share.SHARE_TYPE_EMAIL) {
+				text = t('core', '{sharee} (email)', {
+					sharee: text
+				});
 			}
 			var insert = $("<div class='share-autocomplete-item'/>");
 			var avatar = $("<div class='avatardiv'></div>").appendTo(insert);
@@ -397,7 +411,7 @@
 				var infoTemplate = this._getRemoteShareInfoTemplate();
 				remoteShareInfo = infoTemplate({
 					docLink: this.configModel.getFederatedShareDocLink(),
-					tooltip: t('core', 'Share with people on other Nextclouds using the syntax username@example.com/nextcloud')
+					tooltip: t('core', 'Share with people on other servers using the syntax username@example.com/nextcloud')
 				});
 			}
 
@@ -405,16 +419,16 @@
 		},
 
 		_renderSharePlaceholderPart: function () {
-			var sharePlaceholder = t('core', 'Share with users');
+			var sharePlaceholder = t('core', 'Share with users, or by mail...');
 
 			if (this.configModel.get('allowGroupSharing')) {
 				if (this.configModel.get('isRemoteShareAllowed')) {
-					sharePlaceholder = t('core', 'Share with users, groups or remote users…');
+					sharePlaceholder = t('core', 'Share with users, groups, remote users, or by mail…');
 				} else {
-					sharePlaceholder = t('core', 'Share with users or groups…');
+					sharePlaceholder = t('core', 'Share with users, groups or by mail...');
 				}
 			} else if (this.configModel.get('isRemoteShareAllowed')) {
-					sharePlaceholder = t('core', 'Share with users or remote users…');
+					sharePlaceholder = t('core', 'Share with users, remote users or by mail...');
 			}
 
 			return sharePlaceholder;

+ 2 - 2
lib/private/Share/Constants.php

@@ -29,9 +29,9 @@ class Constants {
 	const SHARE_TYPE_USER = 0;
 	const SHARE_TYPE_GROUP = 1;
 	const SHARE_TYPE_LINK = 3;
-	const SHARE_TYPE_EMAIL = 4;   // ToDo Check if it is still in use otherwise remove it
+	const SHARE_TYPE_EMAIL = 4;
 	const SHARE_TYPE_CONTACT = 5; // ToDo Check if it is still in use otherwise remove it
-	const SHARE_TYPE_REMOTE = 6;  // ToDo Check if it is still in use otherwise remove it
+	const SHARE_TYPE_REMOTE = 6;
 
 	const FORMAT_NONE = -1;
 	const FORMAT_STATUSES = -2;