From c5922b07aa5412e675aa5ac6a4c0698780f2667a Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Wed, 28 May 2014 11:19:31 -0400 Subject: [PATCH] Restore options when editing a draft Fixes #193 --- NEWS | 1 + SoObjects/Mailer/SOGoDraftObject.m | 107 +++++++++++++++++++------ UI/WebServerResources/UIxMailEditor.js | 7 ++ 3 files changed, 90 insertions(+), 25 deletions(-) diff --git a/NEWS b/NEWS index 64bb8d524..dd6362baa 100644 --- a/NEWS +++ b/NEWS @@ -39,6 +39,7 @@ Bug fixes - fixed missing characters in shared folder names over ActiveSync (#2709) - fixed reply and forward mail templates for Brazilian Portuguese (#2738) - fixed newline in signature when forwarding a message as attachment in HTML mode (#2787) + - fixed restoration of options (priority & return receipt) when editing a draft (#193) 2.2.3 (2014-04-03) ------------------ diff --git a/SoObjects/Mailer/SOGoDraftObject.m b/SoObjects/Mailer/SOGoDraftObject.m index 1f1391ef7..ac6aaeed4 100644 --- a/SoObjects/Mailer/SOGoDraftObject.m +++ b/SoObjects/Mailer/SOGoDraftObject.m @@ -266,7 +266,7 @@ static NSString *userAgent = nil; { id headerValue; unsigned int count; - NSString *messageID, *priority, *pureSender, *replyTo; + NSString *messageID, *priority, *pureSender, *replyTo, *receipt; for (count = 0; count < 8; count++) { @@ -285,26 +285,57 @@ static NSString *userAgent = nil; [headers setObject: messageID forKey: @"message-id"]; } - priority = [newHeaders objectForKey: @"priority"]; - if (!priority || [priority isEqualToString: @"NORMAL"]) + priority = [newHeaders objectForKey: @"X-Priority"]; + if (priority) { - [headers removeObjectForKey: @"X-Priority"]; - } - else if ([priority isEqualToString: @"HIGHEST"]) - { - [headers setObject: @"1 (Highest)" forKey: @"X-Priority"]; - } - else if ([priority isEqualToString: @"HIGH"]) - { - [headers setObject: @"2 (High)" forKey: @"X-Priority"]; - } - else if ([priority isEqualToString: @"LOW"]) - { - [headers setObject: @"4 (Low)" forKey: @"X-Priority"]; + // newHeaders come from MIME message; convert X-Priority to Web representation + [headers setObject: priority forKey: @"X-Priority"]; + [headers removeObjectForKey: @"priority"]; + if ([priority isEqualToString: @"1 (Highest)"]) + { + [headers setObject: @"HIGHEST" forKey: @"priority"]; + } + else if ([priority isEqualToString: @"2 (High)"]) + { + [headers setObject: @"HIGH" forKey: @"priority"]; + } + else if ([priority isEqualToString: @"4 (Low)"]) + { + [headers setObject: @"LOW" forKey: @"priority"]; + } + else if ([priority isEqualToString: @"5 (Lowest)"]) + { + [headers setObject: @"LOWEST" forKey: @"priority"]; + } } else { - [headers setObject: @"5 (Lowest)" forKey: @"X-Priority"]; + // newHeaders come from Web form; convert priority to MIME header representation + priority = [newHeaders objectForKey: @"priority"]; + if (!priority || [priority isEqualToString: @"NORMAL"]) + { + [headers removeObjectForKey: @"X-Priority"]; + } + else if ([priority isEqualToString: @"HIGHEST"]) + { + [headers setObject: @"1 (Highest)" forKey: @"X-Priority"]; + } + else if ([priority isEqualToString: @"HIGH"]) + { + [headers setObject: @"2 (High)" forKey: @"X-Priority"]; + } + else if ([priority isEqualToString: @"LOW"]) + { + [headers setObject: @"4 (Low)" forKey: @"X-Priority"]; + } + else + { + [headers setObject: @"5 (Lowest)" forKey: @"X-Priority"]; + } + if (priority) + { + [headers setObject: priority forKey: @"priority"]; + } } replyTo = [headers objectForKey: @"replyTo"]; @@ -314,14 +345,30 @@ static NSString *userAgent = nil; } [headers removeObjectForKey: @"replyTo"]; - if ([[newHeaders objectForKey: @"receipt"] isEqualToString: @"true"]) + receipt = [newHeaders objectForKey: @"Disposition-Notification-To"]; + if ([receipt length] > 0) { - pureSender = [[newHeaders objectForKey: @"from"] pureEMailAddress]; - if (pureSender) - [headers setObject: pureSender forKey: @"Disposition-Notification-To"]; + [headers setObject: @"true" forKey: @"receipt"]; + [headers setObject: receipt forKey: @"Disposition-Notification-To"]; } else - [headers removeObjectForKey: @"Disposition-Notification-To"]; + { + receipt = [newHeaders objectForKey: @"receipt"]; + if ([receipt isEqualToString: @"true"]) + { + [headers setObject: receipt forKey: @"receipt"]; + pureSender = [[newHeaders objectForKey: @"from"] pureEMailAddress]; + if (pureSender) + { + [headers setObject: pureSender forKey: @"Disposition-Notification-To"]; + } + } + else + { + [headers removeObjectForKey: @"receipt"]; + [headers removeObjectForKey: @"Disposition-Notification-To"]; + } + } } - (NSDictionary *) headers @@ -805,8 +852,10 @@ static NSString *userAgent = nil; { NSString *subject, *msgid; NSMutableDictionary *info; + NSDictionary *h; NSMutableArray *addresses; NGImap4Envelope *sourceEnvelope; + id priority, receipt; [sourceMail fetchCoreInfos]; @@ -836,6 +885,15 @@ static NSString *userAgent = nil; [self _addEMailsOfAddresses: [sourceEnvelope replyTo] toArray: addresses]; if ([addresses count] > 0) [info setObject: addresses forKey: @"replyTo"]; + + h = [sourceMail mailHeaders]; + priority = [h objectForKey: @"x-priority"]; + if ([priority isNotEmpty] && [priority isKindOfClass: [NSString class]]) + [info setObject: (NSString*)priority forKey: @"X-Priority"]; + receipt = [h objectForKey: @"disposition-notification-to"]; + if ([receipt isNotEmpty] && [receipt isKindOfClass: [NSString class]]) + [info setObject: (NSString*)receipt forKey: @"Disposition-Notification-To"]; + [self setHeaders: info]; [self setText: [sourceMail contentForEditing]]; @@ -1708,7 +1766,7 @@ static NSString *userAgent = nil; NGVCard *card; Class contactGCSEntry; NSMutableArray *recipients; - NSString *recipient, *emailAddress, *displayName, *addressBook, *uid; + NSString *recipient, *emailAddress, *addressBook, *uid; NSArray *matchingContacts; int i; @@ -1726,7 +1784,6 @@ static NSString *userAgent = nil; parser = [NGMailAddressParser mailAddressParserWithString: recipient]; parsedRecipient = [parser parse]; emailAddress = [parsedRecipient address]; - displayName = [parsedRecipient displayName]; matchingContacts = [contactFolders allContactsFromFilter: emailAddress excludeGroups: YES @@ -1735,7 +1792,7 @@ static NSString *userAgent = nil; // If we don't get any results from the autocompletion code, we add it.. if ([matchingContacts count] == 0) { - /* Get the selected addressbook from the user preferences where the new address will be added */ + // Get the selected addressbook from the user preferences where the new address will be added addressBook = [ud selectedAddressBook]; folder = [contactFolders lookupName: addressBook inContext: context acquire: NO]; uid = [folder globallyUniqueObjectId]; diff --git a/UI/WebServerResources/UIxMailEditor.js b/UI/WebServerResources/UIxMailEditor.js index 91afb075c..cb9923137 100644 --- a/UI/WebServerResources/UIxMailEditor.js +++ b/UI/WebServerResources/UIxMailEditor.js @@ -485,6 +485,7 @@ function initMailEditor() { } initializePriorityMenu(); + initializeReturnReceiptMenu(); configureDragHandle(); @@ -563,6 +564,12 @@ function initializePriorityMenu() { $(chosenNode).addClassName("_chosen"); } +function initializeReturnReceiptMenu() { + var receipt = $("receipt").value.toLowerCase(); + if (receipt == "true") + $("optionsMenu").down('li').addClassName("_chosen"); +} + function onMenuCheckReturnReceipt(event) { event.cancelBubble = true;