From 41967d3eecab40fac33cbd713a08bb065064948e Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Thu, 18 May 2017 22:28:05 -0400 Subject: [PATCH] Respect languages preferences on login page Fixes #4169 --- NEWS | 2 +- SoObjects/SOGo/SOGoDefaults.plist | 1 + SoObjects/SOGo/WOContext+SOGo.m | 26 +++++++++++++--- UI/MainUI/SOGoRootPage.m | 10 +++++++ UI/Templates/MainUI/SOGoRootPage.wox | 3 +- UI/WebServerResources/js/Main/Main.app.js | 36 +++++++++++++---------- 6 files changed, 57 insertions(+), 21 deletions(-) diff --git a/NEWS b/NEWS index e09b77dc9..161d0a087 100644 --- a/NEWS +++ b/NEWS @@ -8,7 +8,7 @@ Enhancements - [core] now possible to {un}subscribe to folders using sogo-tool Bug fixes - - + - [web] respect SOGoLanguage and SOGoSupportedLanguages (#4169) 3.2.9 (2017-05-09) ------------------ diff --git a/SoObjects/SOGo/SOGoDefaults.plist b/SoObjects/SOGo/SOGoDefaults.plist index 5f7ba4ba3..da7b3417d 100644 --- a/SoObjects/SOGo/SOGoDefaults.plist +++ b/SoObjects/SOGo/SOGoDefaults.plist @@ -39,6 +39,7 @@ SOGoEnableDomainBasedUID = NO; SOGoLoginModule = "Mail"; + WODefaultLanguages = (); SOGoLanguage = "English"; SOGoSupportedLanguages = ( "Arabic", diff --git a/SoObjects/SOGo/WOContext+SOGo.m b/SoObjects/SOGo/WOContext+SOGo.m index 18c4286b6..7ce6407fe 100644 --- a/SoObjects/SOGo/WOContext+SOGo.m +++ b/SoObjects/SOGo/WOContext+SOGo.m @@ -22,6 +22,7 @@ #import #import "SOGoDomainDefaults.h" +#import "SOGoSystemDefaults.h" #import "SOGoUser.h" #import "WOContext+SOGo.h" @@ -31,14 +32,21 @@ - (NSArray *) resourceLookupLanguages { NSMutableArray *languages; - NSArray *browserLanguages; + NSArray *browserLanguages, *supportedLanguages; + SOGoSystemDefaults *sd; SOGoUser *user; NSString *language, *theme; - + languages = [NSMutableArray array]; user = [self activeUser]; - theme = [[self request] formValueForKey: @"theme"]; + // Retrieve language parameter + language = [[self request] formValueForKey: @"language"]; + if ([language length] > 0) + [languages addObject: language]; + + // Retrieve theme argument + theme = [[self request] formValueForKey: @"theme"]; if ([theme length] > 0) { if ([theme hasSuffix: @"/"]) @@ -52,18 +60,28 @@ if (!user || [[user login] isEqualToString: @"anonymous"]) { + // Use browser's languages browserLanguages = [[self request] browserLanguages]; [languages addObjectsFromArray: browserLanguages]; } else { + // Use user's language or domain's language language = [[user userDefaults] language]; [languages addObject: language]; language = [[user domainDefaults] language]; [languages addObject: language]; } - return languages; + // Return the first language matching a supported language or the SOGoLanguage + // default if none is matching. + sd = [SOGoSystemDefaults sharedSystemDefaults]; + supportedLanguages = [sd supportedLanguages]; + language = [languages firstObjectCommonWithArray: supportedLanguages]; + if (!(language && [language isKindOfClass: [NSString class]])) + language = [sd stringForKey: @"SOGoLanguage"]; + + return [NSArray arrayWithObject: language]; } @end diff --git a/UI/MainUI/SOGoRootPage.m b/UI/MainUI/SOGoRootPage.m index d7b356f77..80952dc63 100644 --- a/UI/MainUI/SOGoRootPage.m +++ b/UI/MainUI/SOGoRootPage.m @@ -72,6 +72,11 @@ /* accessors */ +- (NSString *) modulePath +{ + return @""; +} + //- (NSString *) connectURL //{ // return [NSString stringWithFormat: @"%@/connect", [self applicationPath]]; @@ -525,6 +530,11 @@ return item; } +- (NSString *) language +{ + return [[context resourceLookupLanguages] objectAtIndex: 0]; +} + - (NSArray *) languages { return [[SOGoSystemDefaults sharedSystemDefaults] supportedLanguages]; diff --git a/UI/Templates/MainUI/SOGoRootPage.wox b/UI/Templates/MainUI/SOGoRootPage.wox index 4a8cc4eea..fbc2123e7 100644 --- a/UI/Templates/MainUI/SOGoRootPage.wox +++ b/UI/Templates/MainUI/SOGoRootPage.wox @@ -11,6 +11,7 @@ >