mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-04-29 00:39:28 +00:00
feat(preferences): Add user preferences to enable / disable signature for new mail, reply and forward
This commit is contained in:
@@ -2515,6 +2515,21 @@ Possible values are:
|
||||
|
||||
Defaults to `below`.
|
||||
|
||||
|U |SOGoMailUseSignatureOnNew
|
||||
|Add signature to new message
|
||||
|
||||
Defaults to `YES`.
|
||||
|
||||
|U |SOGoMailUseSignatureOnReply
|
||||
|Add signature to reply
|
||||
|
||||
Defaults to `YES`.
|
||||
|
||||
|U |SOGoMailUseSignatureOnForward
|
||||
|Add signature to forward
|
||||
|
||||
Defaults to `YES`.
|
||||
|
||||
|U |SOGoMailComposeMessageType
|
||||
|The message composition format. Possible values are:
|
||||
|
||||
|
||||
@@ -1072,19 +1072,16 @@ static NSString *userAgent = nil;
|
||||
|
||||
|
||||
ud = [[context activeUser] userDefaults];
|
||||
// TODO: Change mailMessageForwarding for reply
|
||||
if ([[ud mailMessageForwarding] isEqualToString: @"inline"])
|
||||
{
|
||||
[self setText: [sourceMail contentForReply]];
|
||||
if ([sourceMail isEncrypted])
|
||||
[self _fetchAttachmentsFromEncryptedMail: sourceMail onlyImages: YES];
|
||||
else if ([sourceMail isOpaqueSigned])
|
||||
[self _fetchAttachmentsFromOpaqueSignedMail: sourceMail onlyImages: YES];
|
||||
else
|
||||
[self _fetchAttachmentsFromMail: sourceMail onlyImages: YES];
|
||||
}
|
||||
|
||||
[self save];
|
||||
[self setText: [sourceMail contentForReply]];
|
||||
if ([sourceMail isEncrypted])
|
||||
[self _fetchAttachmentsFromEncryptedMail: sourceMail onlyImages: YES];
|
||||
else if ([sourceMail isOpaqueSigned])
|
||||
[self _fetchAttachmentsFromOpaqueSignedMail: sourceMail onlyImages: YES];
|
||||
else
|
||||
[self _fetchAttachmentsFromMail: sourceMail onlyImages: YES];
|
||||
|
||||
[self save];
|
||||
|
||||
[self storeInfo];
|
||||
}
|
||||
@@ -1135,7 +1132,7 @@ static NSString *userAgent = nil;
|
||||
// TODO: use subject for filename?
|
||||
// error = [newDraft saveAttachment:content withName:@"forward.eml"];
|
||||
signature = [[self mailAccountFolder] signature];
|
||||
if ([signature length])
|
||||
if ([signature length] && [ud mailUseSignatureOnForward])
|
||||
{
|
||||
nl = (isHTML ? @"<br />" : @"\n");
|
||||
space = (isHTML ? @" " : @" ");
|
||||
|
||||
@@ -234,6 +234,12 @@
|
||||
return [sourceMail contentForEditing];
|
||||
}
|
||||
|
||||
- (BOOL)isSignatureEnabled {
|
||||
SOGoUserDefaults *ud;
|
||||
ud = [[context activeUser] userDefaults];
|
||||
return [ud mailUseSignatureOnForward];
|
||||
}
|
||||
|
||||
- (NSString *) signature
|
||||
{
|
||||
BOOL fromSentMailbox;
|
||||
@@ -275,7 +281,7 @@
|
||||
if (identity)
|
||||
{
|
||||
signature = [identity objectForKey: @"signature"];
|
||||
if ([signature length])
|
||||
if ([signature length] && [self isSignatureEnabled])
|
||||
{
|
||||
nl = (htmlComposition ? @"<br />" : @"\n");
|
||||
space = (htmlComposition ? @" " : @" ");
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
#import <NGExtensions/NSString+misc.h>
|
||||
#import <NGImap4/NGImap4Envelope.h>
|
||||
|
||||
#import <SOGo/SOGoUserDefaults.h>
|
||||
|
||||
|
||||
#import "SOGoMailObject+Draft.h"
|
||||
#import "SOGoMailReply.h"
|
||||
@@ -85,6 +87,12 @@
|
||||
return s;
|
||||
}
|
||||
|
||||
- (BOOL)isSignatureEnabled {
|
||||
SOGoUserDefaults *ud;
|
||||
ud = [[context activeUser] userDefaults];
|
||||
return [ud mailUseSignatureOnReply];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation SOGoMailArabicReply
|
||||
|
||||
@@ -109,6 +109,9 @@
|
||||
SOGoMailMessageForwarding = "inline";
|
||||
SOGoMailReplyPlacement = "below";
|
||||
SOGoMailSignaturePlacement = "below";
|
||||
SOGoMailUseSignatureOnNew = YES;
|
||||
SOGoMailUseSignatureOnReply = YES;
|
||||
SOGoMailUseSignatureOnForward = YES;
|
||||
SOGoRefreshViewIntervals = ( 1, 2, 5, 10, 20, 30, 60 );
|
||||
SOGoMailListViewColumnsOrder = ( "Thread", "Flagged", "Attachment", "Subject",
|
||||
"From", "Unread", "Date", "Priority",
|
||||
|
||||
@@ -175,6 +175,13 @@ extern NSString *SOGoPasswordRecoverySecondaryEmail;
|
||||
- (void) setMailSignaturePlacement: (NSString *) newValue;
|
||||
- (NSString *) mailSignaturePlacement;
|
||||
|
||||
- (BOOL)mailUseSignatureOnNew;
|
||||
- (void)setMailUseSignatureOnNew:(BOOL)newValue;
|
||||
- (BOOL)mailUseSignatureOnReply;
|
||||
- (void)setMailUseSignatureOnReply:(BOOL)newValue;
|
||||
- (BOOL)mailUseSignatureOnForward;
|
||||
- (void)setMailUseSignatureOnForward:(BOOL)newValue;
|
||||
|
||||
- (void) setAllowUserReceipt: (BOOL) allow;
|
||||
- (BOOL) allowUserReceipt;
|
||||
- (void) setUserReceiptNonRecipientAction: (NSString *) action;
|
||||
|
||||
@@ -707,6 +707,36 @@ NSString *SOGoPasswordRecoverySecondaryEmail = @"SecondaryEmail";
|
||||
return signaturePlacement;
|
||||
}
|
||||
|
||||
- (BOOL) mailUseSignatureOnNew
|
||||
{
|
||||
return [self boolForKey: @"SOGoMailUseSignatureOnNew"];
|
||||
}
|
||||
|
||||
- (void) setMailUseSignatureOnNew: (BOOL) newValue
|
||||
{
|
||||
[self setBool: newValue forKey: @"SOGoMailUseSignatureOnNew"];
|
||||
}
|
||||
|
||||
- (BOOL) mailUseSignatureOnReply
|
||||
{
|
||||
return [self boolForKey: @"SOGoMailUseSignatureOnReply"];
|
||||
}
|
||||
|
||||
- (void) setMailUseSignatureOnReply: (BOOL) newValue
|
||||
{
|
||||
[self setBool: newValue forKey: @"SOGoMailUseSignatureOnReply"];
|
||||
}
|
||||
|
||||
- (BOOL) mailUseSignatureOnForward
|
||||
{
|
||||
return [self boolForKey: @"SOGoMailUseSignatureOnForward"];
|
||||
}
|
||||
|
||||
- (void) setMailUseSignatureOnForward: (BOOL) newValue
|
||||
{
|
||||
[self setBool: newValue forKey: @"SOGoMailUseSignatureOnForward"];
|
||||
}
|
||||
|
||||
- (void) setAllowUserReceipt: (BOOL) allow
|
||||
{
|
||||
[self setBool: allow forKey: @"SOGoMailReceiptAllow"];
|
||||
|
||||
@@ -155,9 +155,9 @@
|
||||
{
|
||||
[headers setObject: [self _emailFromIdentity: identity] forKey: @"from"];
|
||||
signature = [identity objectForKey: @"signature"];
|
||||
if ([signature length])
|
||||
ud = [[context activeUser] userDefaults];
|
||||
if ([signature length] && [ud mailUseSignatureOnNew])
|
||||
{
|
||||
ud = [[context activeUser] userDefaults];
|
||||
[newDraftMessage setIsHTML: [[ud mailComposeMessageType] isEqualToString: @"html"]];
|
||||
isHTML = [newDraftMessage isHTML];
|
||||
nl = (isHTML? @"<br />" : @"\n");
|
||||
|
||||
@@ -753,7 +753,7 @@
|
||||
|
||||
// Add signature
|
||||
signature = [identity objectForKey: @"signature"];
|
||||
if ([signature length])
|
||||
if ([signature length] && [ud mailUseSignatureOnForward])
|
||||
{
|
||||
nl = (htmlComposition? @"<br />" : @"\n");
|
||||
space = (htmlComposition ? @" " : @" ");
|
||||
|
||||
@@ -195,6 +195,9 @@
|
||||
"Compose messages in" = "Compose messages in";
|
||||
"composemessagestype_html" = "HTML";
|
||||
"composemessagestype_text" = "Plain text";
|
||||
"Insert signature on new message" = "Insert signature on new message";
|
||||
"Insert signature on reply" = "Insert signature on reply";
|
||||
"Insert signature on forward" = "Insert signature on forward";
|
||||
|
||||
/* Base font size for messages composed in HTML */
|
||||
"Default font size" = "Default font size";
|
||||
|
||||
@@ -195,6 +195,9 @@
|
||||
"Compose messages in" = "Composer les messages en";
|
||||
"composemessagestype_html" = "HTML";
|
||||
"composemessagestype_text" = "Texte";
|
||||
"Insert signature on new message" = "Insérer la signature sur un nouveau message";
|
||||
"Insert signature on reply" = "Insérer la signature sur une réponse";
|
||||
"Insert signature on forward" = "Insérer la signature sur un transfert";
|
||||
|
||||
/* Base font size for messages composed in HTML */
|
||||
"Default font size" = "Taille de la police par défaut";
|
||||
|
||||
@@ -343,8 +343,18 @@ static SoProduct *preferencesProduct = nil;
|
||||
if (![[defaults source] objectForKey: @"SOGoMailReplyPlacement"])
|
||||
[[defaults source] setObject: [defaults mailReplyPlacement] forKey: @"SOGoMailReplyPlacement"];
|
||||
|
||||
if (![[defaults source] objectForKey: @"SOGoMailSignaturePlacement"])
|
||||
[[defaults source] setObject: [defaults mailSignaturePlacement] forKey: @"SOGoMailSignaturePlacement"];
|
||||
if (![[defaults source] objectForKey: @"SOGoMailUseSignatureOnNew"])
|
||||
[[defaults source] setObject: [NSNumber numberWithBool: [defaults mailUseSignatureOnNew]] forKey: @"SOGoMailUseSignatureOnNew"];
|
||||
|
||||
if (![[defaults source] objectForKey: @"SOGoMailUseSignatureOnReply"])
|
||||
[[defaults source] setObject: [NSNumber numberWithBool: [defaults mailUseSignatureOnReply]] forKey: @"SOGoMailUseSignatureOnReply"];
|
||||
|
||||
if (![[defaults source] objectForKey: @"SOGoMailUseSignatureOnForward"])
|
||||
[[defaults source] setObject: [NSNumber numberWithBool: [defaults mailUseSignatureOnForward]] forKey: @"SOGoMailUseSignatureOnForward"];
|
||||
|
||||
if (![[defaults source] objectForKey: @"SOGoMailAddOutgoingAddresses"])
|
||||
[[defaults source] setObject: [NSNumber numberWithBool: [defaults mailAddOutgoingAddresses]] forKey: @"SOGoMailAddOutgoingAddresses"];
|
||||
|
||||
|
||||
if (![[defaults source] objectForKey: @"SOGoMailComposeMessageType"])
|
||||
[[defaults source] setObject: [defaults mailComposeMessageType] forKey: @"SOGoMailComposeMessageType"];
|
||||
|
||||
@@ -803,6 +803,30 @@
|
||||
</md-input-container>
|
||||
</div>
|
||||
|
||||
<div layout="row" layout-xs="column">
|
||||
<md-checkbox
|
||||
ng-model="app.preferences.defaults.SOGoMailUseSignatureOnNew"
|
||||
ng-true-value="1"
|
||||
ng-false-value="0"
|
||||
label:aria-label="Insert signature on new message">
|
||||
<var:string label:value="Insert signature on new message"/>
|
||||
</md-checkbox>
|
||||
<md-checkbox
|
||||
ng-model="app.preferences.defaults.SOGoMailUseSignatureOnReply"
|
||||
ng-true-value="1"
|
||||
ng-false-value="0"
|
||||
label:aria-label="Insert signature on reply">
|
||||
<var:string label:value="Insert signature on reply"/>
|
||||
</md-checkbox>
|
||||
<md-checkbox
|
||||
ng-model="app.preferences.defaults.SOGoMailUseSignatureOnForward"
|
||||
ng-true-value="1"
|
||||
ng-false-value="0"
|
||||
label:aria-label="Insert signature on forward">
|
||||
<var:string label:value="Insert signature on forward"/>
|
||||
</md-checkbox>
|
||||
</div>
|
||||
|
||||
<div layout="row">
|
||||
<md-input-container class="md-block" flex="50">
|
||||
<label><var:string label:value="Compose messages in"/></label>
|
||||
|
||||
@@ -402,38 +402,44 @@
|
||||
nlNb = 2;
|
||||
else
|
||||
nlNb = 1;
|
||||
|
||||
if ((vm.isNew() && Preferences.defaults.SOGoMailUseSignatureOnNew === 1)
|
||||
|| (!vm.isNew() && Preferences.defaults.SOGoMailUseSignatureOnForward === 1 && vm.message && vm.message.origin && vm.message.origin.action && vm.message.origin.action === 'forward')
|
||||
|| (!vm.isNew() && Preferences.defaults.SOGoMailUseSignatureOnReply === 1 && vm.message && vm.message.origin && vm.message.origin.action && vm.message.origin.action === 'reply')
|
||||
) {
|
||||
if (identity && identity.signature)
|
||||
signature = nl.repeat(nlNb) + '--' + space + nl + identity.signature;
|
||||
else
|
||||
signature = '';
|
||||
|
||||
if (identity && identity.signature)
|
||||
signature = nl.repeat(nlNb) + '--' + space + nl + identity.signature;
|
||||
else
|
||||
signature = '';
|
||||
previousIdentity = _.find(this.identities, function (currentIdentity, index) {
|
||||
|
||||
previousIdentity = _.find(this.identities, function (currentIdentity, index) {
|
||||
if (currentIdentity.signature) {
|
||||
var currentSignature = new RegExp('(' + reNl + '){' + nlNb + '}--' + space + reNl +
|
||||
currentIdentity.signature.replace(/[-\[\]{}()*+?.,\\^$|#\s]/g, '\\$&'));
|
||||
if (vm.message.editable.text.search(currentSignature) >= 0) {
|
||||
vm.message.editable.text = vm.message.editable.text.replace(currentSignature, signature);
|
||||
return true;
|
||||
if (currentIdentity.signature) {
|
||||
var currentSignature = new RegExp('(' + reNl + '){' + nlNb + '}--' + space + reNl +
|
||||
currentIdentity.signature.replace(/[-\[\]{}()*+?.,\\^$|#\s]/g, '\\$&'));
|
||||
if (vm.message.editable.text.search(currentSignature) >= 0) {
|
||||
vm.message.editable.text = vm.message.editable.text.replace(currentSignature, signature);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
if (!previousIdentity && signature.length > 0) {
|
||||
// Must place signature at proper place
|
||||
if (!this.isNew() && this.replyPlacement == 'above' && this.signaturePlacement == 'above') {
|
||||
var quotedMessageIndex = this.message.editable.text.search(new RegExp(reNl + '.+?:( ?' + reNl + '){' + nlNb + '}(> |<blockquote type="cite")'));
|
||||
if (quotedMessageIndex >= 0) {
|
||||
this.message.editable.text =
|
||||
this.message.editable.text.slice(0, quotedMessageIndex) +
|
||||
signature +
|
||||
this.message.editable.text.slice(quotedMessageIndex);
|
||||
return false;
|
||||
});
|
||||
|
||||
if (!previousIdentity && signature.length > 0) {
|
||||
// Must place signature at proper place
|
||||
if (!this.isNew() && this.replyPlacement == 'above' && this.signaturePlacement == 'above') {
|
||||
var quotedMessageIndex = this.message.editable.text.search(new RegExp(reNl + '.+?:( ?' + reNl + '){' + nlNb + '}(> |<blockquote type="cite")'));
|
||||
if (quotedMessageIndex >= 0) {
|
||||
this.message.editable.text =
|
||||
this.message.editable.text.slice(0, quotedMessageIndex) +
|
||||
signature +
|
||||
this.message.editable.text.slice(quotedMessageIndex);
|
||||
} else {
|
||||
this.message.editable.text = signature + this.message.editable.text;
|
||||
}
|
||||
} else {
|
||||
this.message.editable.text = signature + this.message.editable.text;
|
||||
this.message.editable.text += signature;
|
||||
}
|
||||
} else {
|
||||
this.message.editable.text += signature;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user