diff --git a/UI/Templates/MailerUI/UIxMailEditor.wox b/UI/Templates/MailerUI/UIxMailEditor.wox index 309444a88..52b96631e 100644 --- a/UI/Templates/MailerUI/UIxMailEditor.wox +++ b/UI/Templates/MailerUI/UIxMailEditor.wox @@ -82,15 +82,23 @@ label:placeholder="Add a recipient">
-
{{ user.$shortFormat(editor.autocomplete.to.searchText) }}
+
+
{{ user.$shortFormat(editor.autocomplete.to.searchText) }}
+
{{ user.containername }}
- {{$chip}} + +
+ {{$chip}} + + add_box + +
+
@@ -115,15 +123,23 @@ label:placeholder="Add a recipient">
-
{{ user.$shortFormat(editor.autocomplete.cc.searchText) }}
+
+
{{ user.$shortFormat(editor.autocomplete.cc.searchText) }}
+
{{ user.containername }}
- {{$chip}} + +
+ {{$chip}} + + add_box + +
+
@@ -148,15 +164,23 @@ label:placeholder="Add a recipient">
-
{{ user.$shortFormat(editor.autocomplete.bcc.searchText) }}
+
+
{{ user.$shortFormat(editor.autocomplete.bcc.searchText) }}
+
{{ user.containername }}
- {{$chip}} + +
+ {{$chip}} + + add_box + +
+
diff --git a/UI/Templates/SchedulerUI/UIxAttendeesEditor.wox b/UI/Templates/SchedulerUI/UIxAttendeesEditor.wox index 35346684f..0d1c7c2ec 100644 --- a/UI/Templates/SchedulerUI/UIxAttendeesEditor.wox +++ b/UI/Templates/SchedulerUI/UIxAttendeesEditor.wox @@ -70,8 +70,8 @@
{{currentAttendee.name}}
{{currentAttendee.email}}
- - add_box + + add_box
diff --git a/UI/WebServerResources/js/Contacts/Card.service.js b/UI/WebServerResources/js/Contacts/Card.service.js index 50d256f0c..e2badad8e 100644 --- a/UI/WebServerResources/js/Contacts/Card.service.js +++ b/UI/WebServerResources/js/Contacts/Card.service.js @@ -254,7 +254,7 @@ if (this.members) return Card.$q.when(this.members); - if (this.isgroup) { + if (this.$isGroup({expandable: true})) { return Card.$$resource.fetch(this.$path(), 'members').then(function(data) { _this.members = _.map(data.members, function(member) { return new Card(member); @@ -262,6 +262,8 @@ return _this.members; }); } + + return Card.$q.reject("Card " + this.id + " is not an LDAP group"); }; /** @@ -429,6 +431,11 @@ return this.c_component == 'vlist' && condition; }; + Card.prototype.$isGroup = function(options) { + var condition = (!options || !options.expandable || options.expandable && Card.$Preferences.defaults.SOGoLDAPGroupExpansionEnabled); + return this.isgroup && condition; + }; + Card.prototype.$addOrg = function(org) { if (angular.isUndefined(this.orgs)) { this.orgs = [org]; diff --git a/UI/WebServerResources/js/Mailer/Message.service.js b/UI/WebServerResources/js/Mailer/Message.service.js index 1b1316b02..687b880ab 100644 --- a/UI/WebServerResources/js/Mailer/Message.service.js +++ b/UI/WebServerResources/js/Mailer/Message.service.js @@ -745,7 +745,7 @@ */ Message.prototype.$save = function() { var _this = this, - data = this.editable; + data = this.$omit(); Message.$log.debug('save = ' + JSON.stringify(data, undefined, 2)); @@ -765,7 +765,7 @@ */ Message.prototype.$send = function() { var _this = this, - data = angular.copy(this.editable); + data = this.$omit(); Message.$log.debug('send = ' + JSON.stringify(data, undefined, 2)); @@ -828,8 +828,13 @@ Message.prototype.$omit = function(options) { var message = {}, privateAttributes = options && options.privateAttributes; - angular.forEach(this, function(value, key) { - if (key != 'constructor' && key[0] != '$' || privateAttributes) { + angular.forEach(this.editable, function(value, key) { + if (_.includes(['to', 'cc', 'bcc'], key)) { + message[key] = _.map(value, function (addr) { + return addr.toString(); + }); + } + else if (key != 'constructor' && key[0] != '$' || privateAttributes) { message[key] = value; } }); diff --git a/UI/WebServerResources/js/Mailer/MessageEditorController.js b/UI/WebServerResources/js/Mailer/MessageEditorController.js index c4bff36e7..9764cc438 100644 --- a/UI/WebServerResources/js/Mailer/MessageEditorController.js +++ b/UI/WebServerResources/js/Mailer/MessageEditorController.js @@ -329,6 +329,16 @@ }); } } + else if (contact.$isGroup({expandable: true})) { + recipient = { + toString: function () { return contact.$shortFormat(); }, + isExpandable: true, + members: [] + }; + contact.$members().then(function (members) { + recipient.members = members; + }); + } else { recipient = contact.$shortFormat(); } @@ -339,6 +349,16 @@ return null; } + this.expandGroup = function(contact, field) { + var recipients, i, j; + recipients = vm.message.editable[field]; + i = recipients.indexOf(contact); + recipients.splice(i, 1); + for (j = 0; j < contact.members.length; j++) { + recipients.splice(i + j, 0, contact.members[j].$shortFormat()); + } + }; + // Drafts autosaving function autosaveDrafts() { vm.message.$save(); diff --git a/UI/WebServerResources/js/Mailer/sgMessageListItemMain.directive.js b/UI/WebServerResources/js/Mailer/sgMessageListItemMain.directive.js index 8fa2b1ac4..bff593031 100644 --- a/UI/WebServerResources/js/Mailer/sgMessageListItemMain.directive.js +++ b/UI/WebServerResources/js/Mailer/sgMessageListItemMain.directive.js @@ -26,7 +26,7 @@ '
', '
', '
', - ' ', + ' ', ' expand_more', // expanded by default (icon is rotated) ' ', '
', diff --git a/UI/WebServerResources/scss/components/chips/chips.scss b/UI/WebServerResources/scss/components/chips/chips.scss index 66cd5f586..800ebf801 100644 --- a/UI/WebServerResources/scss/components/chips/chips.scss +++ b/UI/WebServerResources/scss/components/chips/chips.scss @@ -72,6 +72,9 @@ md-chips { width: 100%; } } + .sg-tile-btn { + margin-right: 3px !important; // assume the button is right before the close button + } } // Adapting avatars in contact chips to the new material guidelines diff --git a/UI/WebServerResources/scss/components/list/list.scss b/UI/WebServerResources/scss/components/list/list.scss index 383e1c7ba..90894a3ba 100644 --- a/UI/WebServerResources/scss/components/list/list.scss +++ b/UI/WebServerResources/scss/components/list/list.scss @@ -176,7 +176,7 @@ div.md-tile-left { &-tile-content { flex: 1; overflow: hidden; // required in Firefox - .sg-tile-date, .sg-tile-size, .sg-tile-thread { + .sg-tile-date, .sg-tile-size, .sg-tile-btn { flex-shrink: 0; font-size: sg-size(body); font-weight: $sg-font-light; @@ -186,7 +186,7 @@ div.md-tile-left { .sg-tile-size { font-size: sg-size(caption); } - .sg-tile-thread { + .sg-tile-btn { min-height: auto; min-width: auto; padding: 0 3px !important;