introduce share by mail, ui part

Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>
This commit is contained in:
Bjoern Schiessle 2016-07-29 15:37:08 +02:00
parent ef467c3195
commit 0a6f02801f
No known key found for this signature in database
GPG Key ID: 2378A753E2BF04F6
3 changed files with 45 additions and 75 deletions

View File

@ -404,68 +404,6 @@ class ShareesAPIController extends OCSController {
return $remote; 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 * @NoAdminRequired
* *
@ -487,17 +425,16 @@ class ShareesAPIController extends OCSController {
$shareTypes = [ $shareTypes = [
Share::SHARE_TYPE_USER, Share::SHARE_TYPE_USER,
Share::SHARE_TYPE_EMAIL,
Share::SHARE_TYPE_REMOTE
]; ];
if ($this->shareManager->allowGroupSharing()) { if ($this->shareManager->allowGroupSharing()) {
$shareTypes[] = Share::SHARE_TYPE_GROUP; $shareTypes[] = Share::SHARE_TYPE_GROUP;
} }
$shareTypes[] = Share::SHARE_TYPE_EMAIL; if (isset($_GET['shareType']) && is_array($_GET['shareType'])) {
$shareTypes[] = Share::SHARE_TYPE_REMOTE; $shareTypes = array_intersect($shareTypes, $_GET['shareType']);
if (is_array($shareType)) {
$shareTypes = array_intersect($shareTypes, $shareType);
sort($shareTypes); sort($shareTypes);
} else if (is_numeric($shareType)) { } else if (is_numeric($shareType)) {
$shareTypes = array_intersect($shareTypes, [(int) $shareType]); $shareTypes = array_intersect($shareTypes, [(int) $shareType]);
@ -583,6 +520,25 @@ class ShareesAPIController extends OCSController {
return $response; 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 * Generates a bunch of pagination links for the current page
* *

View File

@ -154,10 +154,12 @@
var users = result.ocs.data.exact.users.concat(result.ocs.data.users); 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 groups = result.ocs.data.exact.groups.concat(result.ocs.data.groups);
var remotes = result.ocs.data.exact.remotes.concat(result.ocs.data.remotes); 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 usersLength;
var groupsLength; var groupsLength;
var remotesLength; var remotesLength;
var emailsLength;
var i, j; var i, j;
@ -212,10 +214,18 @@
break; 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) { if (suggestions.length > 0) {
$('.shareWithField').removeClass('error') $('.shareWithField').removeClass('error')
@ -268,6 +278,10 @@
sharee: text 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 insert = $("<div class='share-autocomplete-item'/>");
var avatar = $("<div class='avatardiv'></div>").appendTo(insert); var avatar = $("<div class='avatardiv'></div>").appendTo(insert);
@ -397,7 +411,7 @@
var infoTemplate = this._getRemoteShareInfoTemplate(); var infoTemplate = this._getRemoteShareInfoTemplate();
remoteShareInfo = infoTemplate({ remoteShareInfo = infoTemplate({
docLink: this.configModel.getFederatedShareDocLink(), 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 () { _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('allowGroupSharing')) {
if (this.configModel.get('isRemoteShareAllowed')) { 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 { } 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')) { } 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; return sharePlaceholder;

View File

@ -29,9 +29,9 @@ class Constants {
const SHARE_TYPE_USER = 0; const SHARE_TYPE_USER = 0;
const SHARE_TYPE_GROUP = 1; const SHARE_TYPE_GROUP = 1;
const SHARE_TYPE_LINK = 3; 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_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_NONE = -1;
const FORMAT_STATUSES = -2; const FORMAT_STATUSES = -2;