From 776b17ff202c45ff63bfc5144dd0ccc37a2f3e58 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Tue, 3 Feb 2015 12:06:28 -0500 Subject: [PATCH 01/22] Fix mail editor when not called from mail module Fixes #3088 --- UI/WebServerResources/UIxMailEditor.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UI/WebServerResources/UIxMailEditor.js b/UI/WebServerResources/UIxMailEditor.js index 10c232fd75..60e10dfa92 100644 --- a/UI/WebServerResources/UIxMailEditor.js +++ b/UI/WebServerResources/UIxMailEditor.js @@ -14,7 +14,7 @@ var MailEditor = { var autoSaveTimer; function refreshDraftsFolder() { - if (window.opener && window.opener.open && !window.opener.closed) { + if (window.opener && window.opener.getUnseenCountForFolder) { var nodes = window.opener.$("mailboxTree").select("DIV[datatype=draft]"); window.opener.getUnseenCountForFolder(nodes[0].readAttribute("dataname")); } From 0b44fa81f4c1ec9c5b812d799bf76399ce240b5b Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Tue, 3 Feb 2015 13:20:57 -0500 Subject: [PATCH 02/22] Update NEWS file --- NEWS | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/NEWS b/NEWS index 8177e49893..9c5ebdbd99 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,9 @@ +2.2.16 (2015-02-DD) +------------------- + +Bug fixes + - (regression) fixed sending a message when mail module is not active (#3088) + 2.2.15 (2015-01-30) ------------------- From 923bcf8ae291f574feb611d80c8b5a861dcb663a Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Thu, 5 Feb 2015 09:29:29 -0500 Subject: [PATCH 03/22] Applied patch for #3092 --- SOPE/GDLContentStore/GCSChannelManager.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SOPE/GDLContentStore/GCSChannelManager.m b/SOPE/GDLContentStore/GCSChannelManager.m index b21b230a6a..d04d704465 100644 --- a/SOPE/GDLContentStore/GCSChannelManager.m +++ b/SOPE/GDLContentStore/GCSChannelManager.m @@ -240,7 +240,7 @@ - (GCSChannelHandle *) findAvailChannelHandleForURL: (NSURL *) _url handle = currentHandle; else if (debugPools) [self logWithFormat: @"DBPOOL: cannot use handle (%@ vs %@) ", - [_url absoluteString], [handle->url absoluteString]]; + [_url absoluteString], [currentHandle->url absoluteString]]; return handle; } From eca22caefc921fa713c2b83e24831f52b397eca7 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Thu, 5 Feb 2015 11:14:53 -0500 Subject: [PATCH 04/22] Fix for bug #3078 --- NEWS | 1 + UI/MailerUI/UIxMailFolderActions.m | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 9c5ebdbd99..6ddb317a60 100644 --- a/NEWS +++ b/NEWS @@ -3,6 +3,7 @@ Bug fixes - (regression) fixed sending a message when mail module is not active (#3088) + - mail lables with blanks are not handled correctly (#3078) 2.2.15 (2015-01-30) ------------------- diff --git a/UI/MailerUI/UIxMailFolderActions.m b/UI/MailerUI/UIxMailFolderActions.m index e04bf50bc7..4515eac4f4 100644 --- a/UI/MailerUI/UIxMailFolderActions.m +++ b/UI/MailerUI/UIxMailFolderActions.m @@ -712,19 +712,26 @@ - (WOResponse *) addOrRemoveLabelAction WORequest *request; SOGoMailFolder *co; NSException *error; - NSArray *msgUIDs, *flags; + NSArray *msgUIDs; + NSMutableArray *flags; NSString *operation; NSDictionary *content, *result; BOOL addOrRemove; NGImap4Client *client; + int i; + request = [context request]; content = [[request contentAsString] objectFromJSONString]; - flags = [NSArray arrayWithObject:[content objectForKey:@"flags"]]; + flags = [NSMutableArray arrayWithObject:[content objectForKey:@"flags"]]; msgUIDs = [NSArray arrayWithArray:[content objectForKey:@"msgUIDs"]]; operation = [content objectForKey:@"operation"]; addOrRemove = ([operation isEqualToString:@"add"]? YES: NO); + // We unescape our flags + for (i = [flags count]-1; i >= 0; i--) + [flags replaceObjectAtIndex: i withObject: [[flags objectAtIndex: i] fromCSSIdentifier]]; + co = [self clientObject]; client = [[co imap4Connection] client]; [[co imap4Connection] selectFolder: [co imap4URL]]; From 3731819e1565a6198237218dff078047628b1316 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Thu, 5 Feb 2015 16:21:27 -0500 Subject: [PATCH 05/22] Added patch from tfu for #2995 --- ActiveSync/SOGoMailObject+ActiveSync.m | 85 ++++++++++++++++++++ Documentation/SOGoInstallationGuide.asciidoc | 4 + NEWS | 3 + 3 files changed, 92 insertions(+) diff --git a/ActiveSync/SOGoMailObject+ActiveSync.m b/ActiveSync/SOGoMailObject+ActiveSync.m index 6cc06e3d05..e7797dfeb1 100644 --- a/ActiveSync/SOGoMailObject+ActiveSync.m +++ b/ActiveSync/SOGoMailObject+ActiveSync.m @@ -47,6 +47,7 @@ #import #import #import +#import #import #import @@ -57,6 +58,10 @@ #import #import +#import + +#import + #include "iCalTimeZone+ActiveSync.h" #include "NSData+ActiveSync.h" #include "NSDate+ActiveSync.h" @@ -774,6 +779,27 @@ - (NSString *) activeSyncRepresentationInContext: (WOContext *) _context [s appendString: @""]; [s appendFormat: @"%d", ([self flagged] ? 2 : 0)]; [s appendString: @""]; + + + // Categroies/Labels + NSEnumerator *categories; + categories = [[[self fetchCoreInfos] objectForKey: @"flags"] objectEnumerator]; + + if (categories) + { + NSString *currentFlag; + NSDictionary *v; + + v = [[[context activeUser] userDefaults] mailLabelsColors]; + + [s appendFormat: @""]; + while ((currentFlag = [categories nextObject])) + { + if ([[v objectForKey: currentFlag] objectAtIndex:0]) + [s appendFormat: @"%@", [[[v objectForKey: currentFlag] objectAtIndex:0] activeSyncRepresentationInContext: context]]; + } + [s appendFormat: @""]; + } // FIXME - support these in the future //[s appendString: @"foobar"]; @@ -836,6 +862,65 @@ - (void) takeActiveSyncValues: (NSDictionary *) theValues else [self removeFlags: @"seen"];; } + + if ((o = [theValues objectForKey: @"Categories"])) + { + NSEnumerator *categories; + NSString *currentFlag; + NSDictionary *v; + + v = [[[context activeUser] userDefaults] mailLabelsColors]; + + // add categories/labels sent from client + if ([o isKindOfClass: [NSArray class]]) + { + NSEnumerator *enumerator; + NSMutableArray *labels; + NSEnumerator *flags; + id key; + + labels = [NSMutableArray array]; + + enumerator = [v keyEnumerator]; + flags = [o objectEnumerator]; + + while ((currentFlag = [flags nextObject])) + { + while ((key = [enumerator nextObject])) + { + if (([currentFlag isEqualToString:[[v objectForKey:key] objectAtIndex:0]])) + { + [labels addObject: key]; + break; + } + } + } + + [self addFlags: [labels componentsJoinedByString: @" "]]; + } + + categories = [[[self fetchCoreInfos] objectForKey: @"flags"] objectEnumerator]; + + // remove all categories/labels from server which were not it the list sent from client + if (categories) + { + while ((currentFlag = [categories nextObject])) + { + // only deal with lables and don't touch flags like seen and flagged + if (([v objectForKey: currentFlag])) + { + if (![o isKindOfClass: [NSArray class]]) + { + [self removeFlags: currentFlag]; + } + else if (([o indexOfObject: [[v objectForKey:currentFlag] objectAtIndex:0]] == NSNotFound)) + { + [self removeFlags: currentFlag]; + } + } + } + } + } } @end diff --git a/Documentation/SOGoInstallationGuide.asciidoc b/Documentation/SOGoInstallationGuide.asciidoc index e88affe42c..b07eedfa2b 100644 --- a/Documentation/SOGoInstallationGuide.asciidoc +++ b/Documentation/SOGoInstallationGuide.asciidoc @@ -2421,6 +2421,10 @@ Please be aware of the following limitations: solution is to configure Outlook to use a LDAP server (over SSL) with authentication. Outlook 2013 also does not seem to support multiple address books over ActiveSync. +* To successfully synchronize Outlook email categories, a corresponding +mail label (Preferences->Mail Options) has to be created manually in SOGo +for each label defined in Outlook. The name in SOGo and in Outlook must be +identical. * Make sure you do not use a self-signed certificate. While this will work, Outlook will work intermittently as it will raise popups for certificate validation, sometimes in background, preventing the user to diff --git a/NEWS b/NEWS index 6ddb317a60..1fc92edbfd 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,9 @@ 2.2.16 (2015-02-DD) ------------------- +Enhancements + - added support for email categories using EAS (#2995) + Bug fixes - (regression) fixed sending a message when mail module is not active (#3088) - mail lables with blanks are not handled correctly (#3078) From 98e4c8ca55b0424111bd7c98060f689316008572 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Mon, 9 Feb 2015 09:10:55 -0500 Subject: [PATCH 06/22] Fixed doc regarder domain vs. system settings --- Documentation/SOGoInstallationGuide.asciidoc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Documentation/SOGoInstallationGuide.asciidoc b/Documentation/SOGoInstallationGuide.asciidoc index b07eedfa2b..32961a09e0 100644 --- a/Documentation/SOGoInstallationGuide.asciidoc +++ b/Documentation/SOGoInstallationGuide.asciidoc @@ -1329,27 +1329,27 @@ The following table describes the parameters that were set: [cols="3,47,50a"] |======================================================================= -|D |SOGoProfileURL +|S |SOGoProfileURL |Parameter used to set the database URL so that SOGo can retrieve user profiles. For MySQL, set the database URL to something like: `mysql://sogo:sogo@localhost:3306/sogo/sogo_user_profile`. -|D |OCSFolderInfoURL +|S |OCSFolderInfoURL |Parameter used to set the database URL so that SOGo can retrieve the location of user folders (address books and calendars). For Oracle, set the database URL to something like: `oracle://sogo:sogo@localhost:1526/sogo/sogo_folder_info`. -|D |OCSSessionsFolderURL +|S |OCSSessionsFolderURL |Parameter used to set the database URL so that SOGo can store and retrieve secured user sessions information. For PostgreSQL, the database URL could be set to something like: `postgresql://sogo:sogo@localhost:5432/sogo/sogo_sessions_folder`. -|D |OCSEMailAlarmsFolderURL +|S |OCSEMailAlarmsFolderURL |Parameter used to set the database URL for email-based alarms (that can be set on events and tasks). This parameter is relevant only if _SOGoEnableEMailAlarms_ is set to `YES`. For PostgreSQL, the database From 6c9b1a494fa1f0a44b118f6c4a399e958796704d Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Mon, 9 Feb 2015 16:12:59 -0500 Subject: [PATCH 07/22] Fix for bug #2332 --- NEWS | 1 + SoObjects/SOGo/SOGoSieveManager.m | 31 +++++++++++++------ .../English.lproj/Localizable.strings | 1 + UI/PreferencesUI/UIxPreferences.m | 24 ++++++++++++++ UI/Templates/PreferencesUI/UIxPreferences.wox | 12 +++++-- 5 files changed, 57 insertions(+), 12 deletions(-) diff --git a/NEWS b/NEWS index 1fc92edbfd..a3492a07fd 100644 --- a/NEWS +++ b/NEWS @@ -3,6 +3,7 @@ Enhancements - added support for email categories using EAS (#2995) + - now possible to always send vacation messages (#2332) Bug fixes - (regression) fixed sending a message when mail module is not active (#3088) diff --git a/SoObjects/SOGo/SOGoSieveManager.m b/SoObjects/SOGo/SOGoSieveManager.m index 2f949ad209..f2f5a7b411 100644 --- a/SoObjects/SOGo/SOGoSieveManager.m +++ b/SoObjects/SOGo/SOGoSieveManager.m @@ -835,13 +835,16 @@ - (BOOL) updateFiltersForAccount: (SOGoMailAccount *) theAccount if (values && [[values objectForKey: @"enabled"] boolValue]) { + NSMutableString *vacation_script; NSArray *addresses; NSString *text; - BOOL ignore; + + BOOL ignore, alwaysSend; int days, i; - + days = [[values objectForKey: @"daysBetweenResponse"] intValue]; addresses = [values objectForKey: @"autoReplyEmailAddresses"]; + alwaysSend = [[values objectForKey: @"alwaysSend"] boolValue]; ignore = [[values objectForKey: @"ignoreLists"] boolValue]; text = [values objectForKey: @"autoReplyText"]; b = YES; @@ -849,28 +852,38 @@ - (BOOL) updateFiltersForAccount: (SOGoMailAccount *) theAccount if (days == 0) days = 7; + vacation_script = [NSMutableString string]; + [req addObjectUniquely: @"vacation"]; // Skip mailing lists if (ignore) - [script appendString: @"if allof ( not exists [\"list-help\", \"list-unsubscribe\", \"list-subscribe\", \"list-owner\", \"list-post\", \"list-archive\", \"list-id\", \"Mailing-List\"], not header :comparator \"i;ascii-casemap\" :is \"Precedence\" [\"list\", \"bulk\", \"junk\"], not header :comparator \"i;ascii-casemap\" :matches \"To\" \"Multiple recipients of*\" ) {"]; + [vacation_script appendString: @"if allof ( not exists [\"list-help\", \"list-unsubscribe\", \"list-subscribe\", \"list-owner\", \"list-post\", \"list-archive\", \"list-id\", \"Mailing-List\"], not header :comparator \"i;ascii-casemap\" :is \"Precedence\" [\"list\", \"bulk\", \"junk\"], not header :comparator \"i;ascii-casemap\" :matches \"To\" \"Multiple recipients of*\" ) {"]; - [script appendFormat: @"vacation :days %d :addresses [", days]; + [vacation_script appendFormat: @"vacation :days %d :addresses [", days]; for (i = 0; i < [addresses count]; i++) { - [script appendFormat: @"\"%@\"", [addresses objectAtIndex: i]]; + [vacation_script appendFormat: @"\"%@\"", [addresses objectAtIndex: i]]; if (i == [addresses count]-1) - [script appendString: @"] "]; + [vacation_script appendString: @"] "]; else - [script appendString: @", "]; + [vacation_script appendString: @", "]; } - [script appendFormat: @"text:\r\n%@\r\n.\r\n;\r\n", text]; + [vacation_script appendFormat: @"text:\r\n%@\r\n.\r\n;\r\n", text]; if (ignore) - [script appendString: @"}\r\n"]; + [vacation_script appendString: @"}\r\n"]; + + // + // See http://sogo.nu/bugs/view.php?id=2332 for details + // + if (alwaysSend) + [script insertString: vacation_script atIndex: 0]; + else + [script appendString: vacation_script]; } diff --git a/UI/PreferencesUI/English.lproj/Localizable.strings b/UI/PreferencesUI/English.lproj/Localizable.strings index 538bd3d9b1..e318a2f5b6 100644 --- a/UI/PreferencesUI/English.lproj/Localizable.strings +++ b/UI/PreferencesUI/English.lproj/Localizable.strings @@ -29,6 +29,7 @@ "Days between responses :" = "Days between responses:"; "Do not send responses to mailing lists" = "Do not send responses to mailing lists"; "Disable auto reply on" = "Disable auto reply on"; +"Always send vacation message response" = "Always send vacation message response"; "Please specify your message and your email addresses for which you want to enable auto reply." = "Please specify your message and your email addresses for which you want to enable auto reply."; "Your vacation message must not end with a single dot on a line." = "Your vacation message must not end with a single dot on a line."; diff --git a/UI/PreferencesUI/UIxPreferences.m b/UI/PreferencesUI/UIxPreferences.m index a43a8e744c..49d5ab350c 100644 --- a/UI/PreferencesUI/UIxPreferences.m +++ b/UI/PreferencesUI/UIxPreferences.m @@ -1127,6 +1127,30 @@ - (BOOL) ignoreLists return ignore; } +// +// See http://sogo.nu/bugs/view.php?id=2332 for details +// +- (void) setAlwaysSend: (BOOL) ignoreLists +{ + [vacationOptions setObject: [NSNumber numberWithBool: ignoreLists] + forKey: @"alwaysSend"]; +} + +- (BOOL) alwaysSend +{ + NSNumber *obj; + BOOL ignore; + + obj = [vacationOptions objectForKey: @"alwaysSend"]; + + if (obj == nil) + ignore = NO; // defaults to NO + else + ignore = [obj boolValue]; + + return ignore; +} + - (BOOL) enableVacationEndDate { return [[vacationOptions objectForKey: @"endDateEnabled"] boolValue]; diff --git a/UI/Templates/PreferencesUI/UIxPreferences.wox b/UI/Templates/PreferencesUI/UIxPreferences.wox index a89c8a204d..efafdabeff 100644 --- a/UI/Templates/PreferencesUI/UIxPreferences.wox +++ b/UI/Templates/PreferencesUI/UIxPreferences.wox @@ -600,7 +600,7 @@
- +
+ + diff --git a/UI/WebServerResources/UIxPreferences.js b/UI/WebServerResources/UIxPreferences.js index 7c2d12652c..071ba6da8a 100644 --- a/UI/WebServerResources/UIxPreferences.js +++ b/UI/WebServerResources/UIxPreferences.js @@ -70,11 +70,42 @@ function savePreferences(sender) { if ($("enableForward") && $("enableForward").checked) { var addresses = $("forwardAddress").value.split(","); + + // We check if all addresses are valid for (var i = 0; i < addresses.length && sendForm; i++) if (!emailRE.test(addresses[i].strip())) { showAlertDialog(_("Please specify an address to which you want to forward your messages.")); sendForm = false; } + + // We check if we can only to internal/external addresses. + var constraints = parseInt($("forwardConstraints").value); + + if (constraints > 0) { + // We first extract the list of 'known domains' to SOGo + var defaultAddresses = $("defaultEmailAddresses").value.split(/, */); + var domains = new Array(); + + defaultAddresses.each(function(adr) { + var domain = adr.split("@")[1]; + if (domain) { + domains.push(domain.toLowerCase()); + } + }); + + // We check if we're allowed or not to forward based on the domain defaults + for (var i = 0; i < addresses.length && sendForm; i++) { + var domain = addresses[i].split("@")[1].toLowerCase(); + if (domains.indexOf(domain) < 0 && constraints == 1) { + showAlertDialog(_("You are not allowed to forward your messages to an external email address.")); + sendForm = false; + } + else if (domains.indexOf(domain) >= 0 && constraints == 2) { + showAlertDialog(_("You are not allowed to forward your messages to an internal email address.")); + sendForm = false; + } + } + } } if (typeof sieveCapabilities != "undefined") { From 9447437d6fd9da2701312363ae92427d2404749a Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Wed, 11 Feb 2015 14:33:32 -0500 Subject: [PATCH 13/22] Added missing strings from previous commit --- UI/PreferencesUI/English.lproj/Localizable.strings | 3 +++ 1 file changed, 3 insertions(+) diff --git a/UI/PreferencesUI/English.lproj/Localizable.strings b/UI/PreferencesUI/English.lproj/Localizable.strings index e318a2f5b6..c0885ec35f 100644 --- a/UI/PreferencesUI/English.lproj/Localizable.strings +++ b/UI/PreferencesUI/English.lproj/Localizable.strings @@ -41,6 +41,9 @@ "Keep a copy" = "Keep a copy"; "Please specify an address to which you want to forward your messages." = "Please specify an address to which you want to forward your messages."; +"You are not allowed to forward your messages to an external email address." = "You are not allowed to forward your messages to an external email address."; +"You are not allowed to forward your messages to an internal email address." = "You are not allowed to forward your messages to an internal email address."; + /* d & t */ "Current Time Zone :" = "Current Time Zone:"; From b4ea4d7e9fd90520675452bdcbf70155d6b87eef Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Wed, 11 Feb 2015 14:39:57 -0500 Subject: [PATCH 14/22] Improvement over previous commit --- UI/Templates/PreferencesUI/UIxPreferences.wox | 9 ++++----- UI/WebServerResources/UIxPreferences.js | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/UI/Templates/PreferencesUI/UIxPreferences.wox b/UI/Templates/PreferencesUI/UIxPreferences.wox index 4d08baaa8a..6459c874d4 100644 --- a/UI/Templates/PreferencesUI/UIxPreferences.wox +++ b/UI/Templates/PreferencesUI/UIxPreferences.wox @@ -653,11 +653,10 @@ const:name="forwardKeepCopy" const:id="forwardKeepCopy" var:checked="forwardKeepCopy" /> -
- - +
+ diff --git a/UI/WebServerResources/UIxPreferences.js b/UI/WebServerResources/UIxPreferences.js index 071ba6da8a..8b1f59f9d3 100644 --- a/UI/WebServerResources/UIxPreferences.js +++ b/UI/WebServerResources/UIxPreferences.js @@ -79,7 +79,7 @@ function savePreferences(sender) { } // We check if we can only to internal/external addresses. - var constraints = parseInt($("forwardConstraints").value); + var constraints = parseInt(forwardConstraints); if (constraints > 0) { // We first extract the list of 'known domains' to SOGo From f3325b8b0d59a730716090b8f5e1319ce3edfd70 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Wed, 11 Feb 2015 18:13:36 -0500 Subject: [PATCH 15/22] Updated NEWS file wrt fixes --- NEWS | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 083535106a..d4399048e0 100644 --- a/NEWS +++ b/NEWS @@ -13,7 +13,8 @@ Enhancements Bug fixes - (regression) fixed sending a message when mail module is not active (#3088) - mail lables with blanks are not handled correctly (#3078) - - fix BlackBerry issues sending multiple mails over EAS (#3095) + - fixed BlackBerry issues sending multiple mails over EAS (#3095) + - fixed plain/text mails showing on one line on Android/EAS (#3055) 2.2.15 (2015-01-30) ------------------- From d7c283f7511c7753f2cf0fc5af0e2eaea826b66f Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Thu, 12 Feb 2015 08:49:17 -0500 Subject: [PATCH 16/22] improved fetching of text parts over EAS --- ActiveSync/SOGoMailObject+ActiveSync.m | 24 ++++++++++++++++++++---- NEWS | 1 + 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/ActiveSync/SOGoMailObject+ActiveSync.m b/ActiveSync/SOGoMailObject+ActiveSync.m index a1b8c8434b..9950975d5e 100644 --- a/ActiveSync/SOGoMailObject+ActiveSync.m +++ b/ActiveSync/SOGoMailObject+ActiveSync.m @@ -209,6 +209,7 @@ - (NSString *) _emailAddressesFrom: (NSArray *) enveloppeAddresses // // - (NSData *) _preferredBodyDataInMultipartUsingType: (int) theType + nativeTypeFound: (int *) theNativeTypeFound { NSString *encoding, *key, *plainKey, *htmlKey, *type, *subtype; NSDictionary *textParts, *part; @@ -238,11 +239,22 @@ - (NSData *) _preferredBodyDataInMultipartUsingType: (int) theType } key = nil; + *theNativeTypeFound = 1; - if (theType == 2) - key = htmlKey; - else if (theType == 1) + if (theType == 2 && htmlKey) + { + key = htmlKey; + *theNativeTypeFound = 2; + } + else if (theType == 1 && plainKey) key = plainKey; + else if (theType == 2 && plainKey) + key = plainKey; + else if (theType == 1 && htmlKey) + { + key = htmlKey; + *theNativeTypeFound = 2; + } if (key) { @@ -263,6 +275,10 @@ - (NSData *) _preferredBodyDataInMultipartUsingType: (int) theType charset = @"us-ascii"; s = [NSString stringWithData: d usingEncodingNamed: charset]; + + if (theType == 1 && *theNativeTypeFound == 2) + s = [s htmlToText]; + d = [s dataUsingEncoding: NSUTF8StringEncoding]; } @@ -448,7 +464,7 @@ - (NSData *) _preferredBodyDataUsingType: (int) theType } else if ([type isEqualToString: @"multipart"]) { - d = [self _preferredBodyDataInMultipartUsingType: theType]; + d = [self _preferredBodyDataInMultipartUsingType: theType nativeTypeFound: theNativeType]; } } else if (theType == 4) diff --git a/NEWS b/NEWS index d4399048e0..c26b663b1b 100644 --- a/NEWS +++ b/NEWS @@ -9,6 +9,7 @@ Enhancements - added support for email categories using EAS (#2995) - now possible to always send vacation messages (#2332) - added EAS best practices to the documentation + - improved fetching of text parts over EAS Bug fixes - (regression) fixed sending a message when mail module is not active (#3088) From 601a9ca5598490f839938884f20d0a366388ed4b Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Thu, 12 Feb 2015 09:09:18 -0500 Subject: [PATCH 17/22] Update translations --- NEWS | 1 + UI/PreferencesUI/Czech.lproj/Localizable.strings | 4 ++++ UI/PreferencesUI/Finnish.lproj/Localizable.strings | 4 ++++ UI/PreferencesUI/French.lproj/Localizable.strings | 4 ++++ UI/PreferencesUI/German.lproj/Localizable.strings | 4 ++++ UI/PreferencesUI/Hungarian.lproj/Localizable.strings | 4 ++++ 6 files changed, 21 insertions(+) diff --git a/NEWS b/NEWS index c26b663b1b..faa64df668 100644 --- a/NEWS +++ b/NEWS @@ -10,6 +10,7 @@ Enhancements - now possible to always send vacation messages (#2332) - added EAS best practices to the documentation - improved fetching of text parts over EAS + - updated Czech, Finnish, French, German and Hungarian translations Bug fixes - (regression) fixed sending a message when mail module is not active (#3088) diff --git a/UI/PreferencesUI/Czech.lproj/Localizable.strings b/UI/PreferencesUI/Czech.lproj/Localizable.strings index 891be5277b..8d362aef4a 100644 --- a/UI/PreferencesUI/Czech.lproj/Localizable.strings +++ b/UI/PreferencesUI/Czech.lproj/Localizable.strings @@ -29,6 +29,7 @@ "Days between responses :" = "Počet dnů mezi odpověďmi :"; "Do not send responses to mailing lists" = "Neposílat odpovědi do konferencí"; "Disable auto reply on" = "Automatické odpovědi vypnout dne"; +"Always send vacation message response" = "Vždy posílat zprávu v nepřítomnosti"; "Please specify your message and your email addresses for which you want to enable auto reply." = "Prosím zadejte text zprávy a své emailové adresy, pro které chcete zasílání v nepřítomnosti použít."; "Your vacation message must not end with a single dot on a line." = "Vaše zpráva v nepřítomnosti nesmí končit samotnou tečkou na řádce."; @@ -40,6 +41,9 @@ "Keep a copy" = "Ponechat kopii"; "Please specify an address to which you want to forward your messages." = "Prosím zadejte adresu, na kterou chcete své zprávy přeposílat."; +"You are not allowed to forward your messages to an external email address." = "Nemáte povoleno přeposílání Vašich zpráv na externí emailovou adresu."; +"You are not allowed to forward your messages to an internal email address." = "Nemáte povoleno přeposílání Vašich zpráv na interní emailovou adresu."; + /* d & t */ "Current Time Zone :" = "Současné časové pásmo :"; diff --git a/UI/PreferencesUI/Finnish.lproj/Localizable.strings b/UI/PreferencesUI/Finnish.lproj/Localizable.strings index 3df3e77187..912e0b11b4 100644 --- a/UI/PreferencesUI/Finnish.lproj/Localizable.strings +++ b/UI/PreferencesUI/Finnish.lproj/Localizable.strings @@ -29,6 +29,7 @@ "Days between responses :" = "Päivät vastausten välillä:"; "Do not send responses to mailing lists" = "Älä lähetä vastauksia postituslistoille"; "Disable auto reply on" = "Poista automaattivastaus käytöstä"; +"Always send vacation message response" = "Lähetä lomaviestivastaus aina"; "Please specify your message and your email addresses for which you want to enable auto reply." = "Ole hyvä ja määritä viesti sekä sähköpostiosoitteet joille haluat aktivoida automaattivastauksen."; "Your vacation message must not end with a single dot on a line." = "Lomaviestisi ei saa päättyä yksittäiseen pisteeseen viimeisellä rivillä."; @@ -40,6 +41,9 @@ "Keep a copy" = "Pidä kopio"; "Please specify an address to which you want to forward your messages." = "Ole hyvä ja määritä sähköpostiosoite johon haluat edelleenlähettää viestisi."; +"You are not allowed to forward your messages to an external email address." = "Sinulla ei ole lupaa välittää viestejä ulkoiseen sähköpostiosoitteeseen."; +"You are not allowed to forward your messages to an internal email address." = "Sinulla ei ole lupaa välittää viestejä sisäiseen sähköpostiosoitteeseen."; + /* d & t */ "Current Time Zone :" = "Nykyinen aikavyöhyke:"; diff --git a/UI/PreferencesUI/French.lproj/Localizable.strings b/UI/PreferencesUI/French.lproj/Localizable.strings index 4caec8c781..56f72a0adb 100644 --- a/UI/PreferencesUI/French.lproj/Localizable.strings +++ b/UI/PreferencesUI/French.lproj/Localizable.strings @@ -29,6 +29,7 @@ "Days between responses :" = "Nombre de jours entre réponses :"; "Do not send responses to mailing lists" = "Ne pas envoyer les réponses aux listes de diffusion"; "Disable auto reply on" = "Désactiver la réponse automatique le"; +"Always send vacation message response" = "Toujours envoyer le message de vacances prolongées"; "Please specify your message and your email addresses for which you want to enable auto reply." = "Veuillez définir un message et vos adresses pour lesquelles pour désirez activer une réponse automatique."; "Your vacation message must not end with a single dot on a line." = "Le message de vacances ne doit pas se terminer par une ligne ne contenant qu'un point."; @@ -40,6 +41,9 @@ "Keep a copy" = "Garder une copie"; "Please specify an address to which you want to forward your messages." = "Veuillez définir une adresse à laquelle vous désirez transférer automatiquement vos nouveaux messages."; +"You are not allowed to forward your messages to an external email address." = "Il est interdit de renvoyer vos messages vers une adresse externe."; +"You are not allowed to forward your messages to an internal email address." = "Il est interdit de renvoyer vos messages vers une adresse interne."; + /* d & t */ "Current Time Zone :" = "Fuseau horaire en cours :"; diff --git a/UI/PreferencesUI/German.lproj/Localizable.strings b/UI/PreferencesUI/German.lproj/Localizable.strings index 9b66de389d..473fa77061 100644 --- a/UI/PreferencesUI/German.lproj/Localizable.strings +++ b/UI/PreferencesUI/German.lproj/Localizable.strings @@ -29,6 +29,7 @@ "Days between responses :" = "Tage zwischen automatischen Abwesenheitsnachrichten:"; "Do not send responses to mailing lists" = "Keine automatischen Abwesenheitsnachrichten an Mailinglisten senden"; "Disable auto reply on" = "Automatische Abwesenheitsnachricht abschalten am"; +"Always send vacation message response" = "Immer Abwesenheitsmeldung senden"; "Please specify your message and your email addresses for which you want to enable auto reply." = "Bitte ihren Nachrichtentext und ihre E-Mail-Adressen angeben, für die automatische Abwesenheitsnachrichten aktiviert werden sollen."; "Your vacation message must not end with a single dot on a line." = "Ihre Abwesenheitsnachricht darf nicht mit einem alleinstehenden Punkt in einer Zeile enden."; @@ -40,6 +41,9 @@ "Keep a copy" = "Eine Kopie behalten"; "Please specify an address to which you want to forward your messages." = "Bitte Adresse angeben, an die Ihre Nachrichten weitergeleitet werden sollen."; +"You are not allowed to forward your messages to an external email address." = "Es ist Ihnen nicht erlaubt, Ihre Nachrichten an externe E-Mail-Adressen weiterzuleiten."; +"You are not allowed to forward your messages to an internal email address." = "Es ist Ihnen nicht erlaubt, Ihre Nachrichten an interne E-Mail-Adressen weiterzuleiten."; + /* d & t */ "Current Time Zone :" = "Aktuelle Zeitzone:"; diff --git a/UI/PreferencesUI/Hungarian.lproj/Localizable.strings b/UI/PreferencesUI/Hungarian.lproj/Localizable.strings index 9532bf3b34..b90ff22979 100644 --- a/UI/PreferencesUI/Hungarian.lproj/Localizable.strings +++ b/UI/PreferencesUI/Hungarian.lproj/Localizable.strings @@ -29,6 +29,7 @@ "Days between responses :" = "Válaszok közötti napok száma:"; "Do not send responses to mailing lists" = "Levelező listákra válasz mellőzése"; "Disable auto reply on" = "Automatikus válasz tiltása"; +"Always send vacation message response" = "Mindig küldjön távollét üzenet választ"; "Please specify your message and your email addresses for which you want to enable auto reply." = "Kérem adja meg az üzenetét valamint a címeket, amelyekre engedélyezi az automatikus válasz küldését."; "Your vacation message must not end with a single dot on a line." = "A távollét üzenet utolsó sora nem tartalmazhat egy egyedülálló . karatert."; @@ -40,6 +41,9 @@ "Keep a copy" = "Másolat megtartása"; "Please specify an address to which you want to forward your messages." = "Kérem adjon meg egy címet, amelyre a leveleit továbbítani kívánja."; +"You are not allowed to forward your messages to an external email address." = "Ön számára nem endélyezett az üzenetek továbbítása külső email címre."; +"You are not allowed to forward your messages to an internal email address." = "Ön számára nem endélyezett az üzenetek továbbítása belső email címre."; + /* d & t */ "Current Time Zone :" = "Időzóna :"; From c20ca0e33dd3e25ba41f7b2a2cd70a1c39d1e125 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Thu, 12 Feb 2015 09:29:40 -0500 Subject: [PATCH 18/22] Fix exception in set operation of sogo-tool --- NEWS | 3 ++- Tools/SOGoToolUserPreferences.m | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index faa64df668..1d47813870 100644 --- a/NEWS +++ b/NEWS @@ -16,7 +16,8 @@ Bug fixes - (regression) fixed sending a message when mail module is not active (#3088) - mail lables with blanks are not handled correctly (#3078) - fixed BlackBerry issues sending multiple mails over EAS (#3095) - - fixed plain/text mails showing on one line on Android/EAS (#3055) + - fixed plain/text mails showing on one line on Android/EAS (#3055) + - fixed exception in sogo-tool when parsing arguments of a set operation 2.2.15 (2015-01-30) ------------------- diff --git a/Tools/SOGoToolUserPreferences.m b/Tools/SOGoToolUserPreferences.m index a6255d6f04..4f981cb4fa 100644 --- a/Tools/SOGoToolUserPreferences.m +++ b/Tools/SOGoToolUserPreferences.m @@ -254,7 +254,7 @@ - (BOOL) run // // to achieve what we want. // - if (o && [o count] == 1) + if (o && [o isKindOfClass: [NSDictionary class]] && [o count] == 1) { [source setObject: [[o allValues] lastObject] forKey: key]; } From aae76dc4e6ce1909a1aeaee9500ec65e8e67aec8 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Thu, 12 Feb 2015 09:57:10 -0500 Subject: [PATCH 19/22] Limit curl request for webcalendars to 60 seconds --- SoObjects/Appointments/SOGoWebAppointmentFolder.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SoObjects/Appointments/SOGoWebAppointmentFolder.m b/SoObjects/Appointments/SOGoWebAppointmentFolder.m index 3bd6c42062..cb4c7543c8 100644 --- a/SoObjects/Appointments/SOGoWebAppointmentFolder.m +++ b/SoObjects/Appointments/SOGoWebAppointmentFolder.m @@ -1,6 +1,6 @@ /* SOGoWebAppointmentFolder.m - this file is part of SOGo * - * Copyright (C) 2009-2014 Inverse inc. + * Copyright (C) 2009-2015 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 @@ -137,6 +137,7 @@ - (NSDictionary *) loadWebCalendar curl_easy_setopt (curl, CURLOPT_URL, [location UTF8String]); curl_easy_setopt (curl, CURLOPT_SSL_VERIFYPEER, 0L); curl_easy_setopt (curl, CURLOPT_SSL_VERIFYHOST, 0L); + curl_easy_setopt (curl, CURLOPT_TIMEOUT, 60L); authInfos = [self _loadAuthData]; if (authInfos) From a80d75d09cd0b6f310455e33847ae62433e258ca Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Thu, 12 Feb 2015 10:27:10 -0500 Subject: [PATCH 20/22] Preparation for the release --- Documentation/docinfo.xml | 6 +++--- Documentation/includes/global-attributes.asciidoc | 2 +- NEWS | 2 +- Version | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Documentation/docinfo.xml b/Documentation/docinfo.xml index 00fc549484..8340a32faa 100644 --- a/Documentation/docinfo.xml +++ b/Documentation/docinfo.xml @@ -1,7 +1,7 @@ -Version 2.2.15 - January 2015 -for version 2.2.15 -2015-01-30 +Version 2.2.16 - February 2015 +for version 2.2.16 +2015-02-12 Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". diff --git a/Documentation/includes/global-attributes.asciidoc b/Documentation/includes/global-attributes.asciidoc index 0cbd771aea..6ca1caa2fc 100644 --- a/Documentation/includes/global-attributes.asciidoc +++ b/Documentation/includes/global-attributes.asciidoc @@ -13,6 +13,6 @@ // TODO have the build system take care of this -:release_version: 2.2.15 +:release_version: 2.2.16 // vim: set syntax=asciidoc tabstop=2 shiftwidth=2 expandtab: diff --git a/NEWS b/NEWS index 1d47813870..693d0f2502 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,4 @@ -2.2.16 (2015-02-DD) +2.2.16 (2015-02-12) ------------------- New features diff --git a/Version b/Version index 13e56d03bb..135790138e 100644 --- a/Version +++ b/Version @@ -4,4 +4,4 @@ MAJOR_VERSION=2 MINOR_VERSION=2 -SUBMINOR_VERSION=15 +SUBMINOR_VERSION=16 From 72b210cd2ebccc8e9cdc13c23abb76b7f455b780 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Thu, 12 Feb 2015 10:29:46 -0500 Subject: [PATCH 21/22] Fixed typo --- NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 693d0f2502..c10c2facc3 100644 --- a/NEWS +++ b/NEWS @@ -14,7 +14,7 @@ Enhancements Bug fixes - (regression) fixed sending a message when mail module is not active (#3088) - - mail lables with blanks are not handled correctly (#3078) + - mail labels with blanks are not handled correctly (#3078) - fixed BlackBerry issues sending multiple mails over EAS (#3095) - fixed plain/text mails showing on one line on Android/EAS (#3055) - fixed exception in sogo-tool when parsing arguments of a set operation From b26ea30b1b794e983ea272b5de713b0205fda0d8 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Thu, 12 Feb 2015 11:06:57 -0500 Subject: [PATCH 22/22] Update ChangeLog --- ChangeLog | 218 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 218 insertions(+) diff --git a/ChangeLog b/ChangeLog index ab90551ac4..2402f9b7e5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,221 @@ +commit 72b210cd2ebccc8e9cdc13c23abb76b7f455b780 +Author: Ludovic Marcotte +Date: Thu Feb 12 10:29:46 2015 -0500 + + Fixed typo + +M NEWS + +commit a80d75d09cd0b6f310455e33847ae62433e258ca +Author: Ludovic Marcotte +Date: Thu Feb 12 10:27:10 2015 -0500 + + Preparation for the release + +M Documentation/docinfo.xml +M Documentation/includes/global-attributes.asciidoc +M NEWS +M Version + +commit aae76dc4e6ce1909a1aeaee9500ec65e8e67aec8 +Author: Ludovic Marcotte +Date: Thu Feb 12 09:57:10 2015 -0500 + + Limit curl request for webcalendars to 60 seconds + +M SoObjects/Appointments/SOGoWebAppointmentFolder.m + +commit c20ca0e33dd3e25ba41f7b2a2cd70a1c39d1e125 +Author: Francis Lachapelle +Date: Thu Feb 12 09:29:40 2015 -0500 + + Fix exception in set operation of sogo-tool + +M NEWS +M Tools/SOGoToolUserPreferences.m + +commit 601a9ca5598490f839938884f20d0a366388ed4b +Author: Francis Lachapelle +Date: Thu Feb 12 09:09:18 2015 -0500 + + Update translations + +M NEWS +M UI/PreferencesUI/Czech.lproj/Localizable.strings +M UI/PreferencesUI/Finnish.lproj/Localizable.strings +M UI/PreferencesUI/French.lproj/Localizable.strings +M UI/PreferencesUI/German.lproj/Localizable.strings +M UI/PreferencesUI/Hungarian.lproj/Localizable.strings + +commit d7c283f7511c7753f2cf0fc5af0e2eaea826b66f +Author: Ludovic Marcotte +Date: Thu Feb 12 08:49:17 2015 -0500 + + improved fetching of text parts over EAS + +M ActiveSync/SOGoMailObject+ActiveSync.m +M NEWS + +commit f3325b8b0d59a730716090b8f5e1319ce3edfd70 +Author: Ludovic Marcotte +Date: Wed Feb 11 18:13:36 2015 -0500 + + Updated NEWS file wrt fixes + +M NEWS + +commit b4ea4d7e9fd90520675452bdcbf70155d6b87eef +Author: Ludovic Marcotte +Date: Wed Feb 11 14:39:57 2015 -0500 + + Improvement over previous commit + +M UI/Templates/PreferencesUI/UIxPreferences.wox +M UI/WebServerResources/UIxPreferences.js + +commit 9447437d6fd9da2701312363ae92427d2404749a +Author: Ludovic Marcotte +Date: Wed Feb 11 14:33:32 2015 -0500 + + Added missing strings from previous commit + +M UI/PreferencesUI/English.lproj/Localizable.strings + +commit 322f72626a3253f9d290cfb6d83ff8f5fac2a4e4 +Author: Ludovic Marcotte +Date: Wed Feb 11 14:30:40 2015 -0500 + + now possible to limit automatic forwards to internal/external domains + +M Documentation/SOGoInstallationGuide.asciidoc +M NEWS +M SoObjects/SOGo/SOGoDomainDefaults.h +M SoObjects/SOGo/SOGoDomainDefaults.m +M UI/PreferencesUI/UIxPreferences.m +M UI/Templates/PreferencesUI/UIxPreferences.wox +M UI/WebServerResources/UIxPreferences.js + +commit 55ae4cb8c0390f2007ea08896e1adcb722e72c10 +Author: Ludovic Marcotte +Date: Wed Feb 11 12:59:04 2015 -0500 + + First pass at EAS' best practices for SOGo + +M Documentation/SOGoInstallationGuide.asciidoc +M NEWS + +commit e5d01428ad074d45ed8719b3aaac5d09537faba4 +Author: Ludovic Marcotte +Date: Wed Feb 11 11:31:35 2015 -0500 + + now possible for SOGo to change the sambaNTPassword/sambaLMPassword + +M Documentation/SOGoInstallationGuide.asciidoc +M NEWS +M SoObjects/SOGo/GNUmakefile +M SoObjects/SOGo/LDAPSource.h +M SoObjects/SOGo/LDAPSource.m +M SoObjects/SOGo/NSData+Crypto.h +M SoObjects/SOGo/NSData+Crypto.m +M SoObjects/SOGo/NSString+Crypto.h +M SoObjects/SOGo/NSString+Crypto.m +A SoObjects/SOGo/lmhash.c +A SoObjects/SOGo/lmhash.h +M Tools/SOGoTool.h +M Tools/SOGoTool.m + +commit 82178fd6ceb5c4cb9acb10a4be06c022c895de7a +Author: Ludovic Marcotte +Date: Wed Feb 11 08:31:32 2015 -0500 + + Initial patch from tfu for bug #3055 + +M ActiveSync/SOGoMailObject+ActiveSync.m + +commit 6cf1ec998e33990e77725b9c84bb3ba7ec34dcbc +Author: Ludovic Marcotte +Date: Tue Feb 10 07:09:31 2015 -0500 + + Updated NEWS file for the #3095 bug fix in SOPE + +M NEWS + +commit 6c9b1a494fa1f0a44b118f6c4a399e958796704d +Author: Ludovic Marcotte +Date: Mon Feb 9 16:12:59 2015 -0500 + + Fix for bug #2332 + +M NEWS +M SoObjects/SOGo/SOGoSieveManager.m +M UI/PreferencesUI/English.lproj/Localizable.strings +M UI/PreferencesUI/UIxPreferences.m +M UI/Templates/PreferencesUI/UIxPreferences.wox + +commit 98e4c8ca55b0424111bd7c98060f689316008572 +Author: Ludovic Marcotte +Date: Mon Feb 9 09:10:55 2015 -0500 + + Fixed doc regarder domain vs. system settings + +M Documentation/SOGoInstallationGuide.asciidoc + +commit 3731819e1565a6198237218dff078047628b1316 +Author: Ludovic Marcotte +Date: Thu Feb 5 16:21:27 2015 -0500 + + Added patch from tfu for #2995 + +M ActiveSync/SOGoMailObject+ActiveSync.m +M Documentation/SOGoInstallationGuide.asciidoc +M NEWS + +commit eca22caefc921fa713c2b83e24831f52b397eca7 +Author: Ludovic Marcotte +Date: Thu Feb 5 11:14:53 2015 -0500 + + Fix for bug #3078 + +M NEWS +M UI/MailerUI/UIxMailFolderActions.m + +commit 923bcf8ae291f574feb611d80c8b5a861dcb663a +Author: Ludovic Marcotte +Date: Thu Feb 5 09:29:29 2015 -0500 + + Applied patch for #3092 + +M SOPE/GDLContentStore/GCSChannelManager.m + +commit 0b44fa81f4c1ec9c5b812d799bf76399ce240b5b +Author: Francis Lachapelle +Date: Tue Feb 3 13:20:57 2015 -0500 + + Update NEWS file + +M NEWS + +commit 776b17ff202c45ff63bfc5144dd0ccc37a2f3e58 +Author: Francis Lachapelle +Date: Tue Feb 3 12:06:28 2015 -0500 + + Fix mail editor when not called from mail module + + Fixes #3088 + +M UI/WebServerResources/UIxMailEditor.js + +commit 2aa528dacca6c61d194bd2603cf0ba0d5a436647 +Author: Ludovic Marcotte +Date: Fri Jan 30 11:08:43 2015 -0500 + + Preparation for the release + +M ChangeLog +M Documentation/docinfo.xml +M Documentation/includes/global-attributes.asciidoc +M Version + commit d1d398091961f5d497b67313e098a8a5624089f4 Author: Francis Lachapelle Date: Fri Jan 30 11:03:38 2015 -0500