feat(mail): new option to force default identity

Users can now force the default identity to always be used when replying
or forwarding a message.
This commit is contained in:
Francis Lachapelle
2021-01-14 15:23:43 -05:00
parent 2826c83fc5
commit fc4f5d2161
12 changed files with 77 additions and 30 deletions
@@ -215,6 +215,7 @@
"Reply To Email" = "Reply To Email";
"Signature" = "Signature";
"Identities" = "Identities";
"Always use the default identity when replying to messages" = "Always use the default identity when replying to messages";
"Default Identity" = "Default Identity";
"New Identity" = "New Identity";
"(Click to create)" = "(Click to create)";
+2 -1
View File
@@ -1,6 +1,6 @@
/* UIxJSONPreferences.m - this file is part of SOGo
*
* Copyright (C) 2007-2020 Inverse inc.
* Copyright (C) 2007-2021 Inverse inc.
*
* This file is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -441,6 +441,7 @@ static SoProduct *preferencesProduct = nil;
[values removeObjectForKey: @"SOGoMailCertificate"];
[values removeObjectForKey: @"SOGoMailCertificateAlwaysSign"];
[values removeObjectForKey: @"SOGoMailCertificateAlwaysEncrypt"];
[values removeObjectForKey: @"SOGoMailForceDefaultIdentity"];
// Add the domain's default vacation subject if user has not specified a custom subject
vacationOptions = [defaults vacationOptions];
+7 -2
View File
@@ -1,6 +1,6 @@
/* UIxPreferences.m - this file is part of SOGo
*
* Copyright (C) 2007-2020 Inverse inc.
* Copyright (C) 2007-2021 Inverse inc.
*
* This file is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -1253,7 +1253,7 @@ static NSArray *reminderValues = nil;
{
knownKeys = [NSArray arrayWithObjects: @"id", @"name", @"serverName", @"port",
@"userName", @"password", @"encryption", @"replyTo",
@"identities", @"mailboxes",
@"identities", @"mailboxes", @"forceDefaultIdentity",
@"receipts", @"security", @"isNew",
nil];
[knownKeys retain];
@@ -1307,6 +1307,10 @@ static NSArray *reminderValues = nil;
identities = [account objectForKey: @"identities"];
if ([self _validateAccountIdentities: identities])
[target setObject: identities forKey: @"SOGoMailIdentities"];
if ([[account objectForKey: @"forceDefaultIdentity"] boolValue])
[target setObject: [NSNumber numberWithBool: YES] forKey: @"SOGoMailForceDefaultIdentity"];
else if ([target objectForKey: @"SOGoMailforceDefaultIdentity"])
[target removeObjectForKey: @"SOGoMailforceDefaultIdentity"];
[self _extractMainReceiptsPreferences: [account objectForKey: @"receipts"] inDictionary: target];
[self _extractMainSecurityPreferences: [account objectForKey: @"security"] inDictionary: target];
}
@@ -1512,6 +1516,7 @@ static NSArray *reminderValues = nil;
if ([accounts count] > 0)
{
// The first account is the main system account. The following mapping is required:
// - forceDefaultIdentity => SOGoMailForceDefaultIdentity
// - receipts.receiptAction => SOGoMailReceiptAllow
// - receipts.receiptNonRecipientAction => SOGoMailReceiptNonRecipientAction
// - receipts.receiptOutsideDomainAction => SOGoMailReceiptOutsideDomainAction
@@ -97,6 +97,12 @@
<!-- identities -->
<div class="pseudo-input-container" ng-if="$AccountDialogController.hasIdentities()">
<label class="pseudo-input-label"><var:string label:value="Identities"/></label>
<md-checkbox
class="pseudo-input-field"
ng-show="$AccountDialogController.hasDefaultIdentity()"
ng-model="$AccountDialogController.account.forceDefaultIdentity"
ng-true-value="1"
ng-false-value="0"><var:string label:value="Always use the default identity when replying to messages"/></md-checkbox>
<md-card ng-repeat="identity in $AccountDialogController.account.identities | filter:$AccountDialogController.isEditableIdentity"
class="sg-collapsed"
ng-class="{ 'sg-expanded': $index == $AccountDialogController.selectedIdentity }">
@@ -480,7 +480,7 @@
* @return an object literal copy of the Account instance
*/
Account.prototype.$omit = function () {
var account = {}, identities = [];
var account = {}, identities = [], defaultIdentity = false;
angular.forEach(this, function(value, key) {
if (key != 'constructor' && key !='identities' && key[0] != '$') {
@@ -491,9 +491,14 @@
_.forEach(this.identities, function (identity) {
if (!identity.isReadOnly)
identities.push(_.pick(identity, ['email', 'fullName', 'replyTo', 'signature', 'isDefault']));
if (identity.isDefault)
defaultIdentity = identity;
});
account.identities = identities;
if (!defaultIdentity || !account.forceDefaultIdentity)
delete account.forceDefaultIdentity;
return account;
};
@@ -74,6 +74,10 @@
}
};
this.hasDefaultIdentity = function() {
return _.findIndex(this.account.identities, function(identity) { return !!identity.isDefault; }) >= 0;
};
this.setDefaultIdentity = function ($event, $index) {
_.forEach(this.account.identities, function(identity, i) {
if (i == $index)