Respect languages preferences on login page

Fixes #4169
pull/236/head
Francis Lachapelle 2017-05-18 22:28:05 -04:00
parent aee42f76f0
commit 41967d3eec
6 changed files with 57 additions and 21 deletions

2
NEWS
View File

@ -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)
------------------

View File

@ -39,6 +39,7 @@
SOGoEnableDomainBasedUID = NO;
SOGoLoginModule = "Mail";
WODefaultLanguages = ();
SOGoLanguage = "English";
SOGoSupportedLanguages = (
"Arabic",

View File

@ -22,6 +22,7 @@
#import <NGObjWeb/WORequest.h>
#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

View File

@ -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];

View File

@ -11,6 +11,7 @@
>
<script type="text/javascript">
var cookieUsername = '<var:string var:value="cookieUsername" const:escapeHTML="NO"/>';
var language = '<var:string var:value="language" const:escapeHTML="NO"/>';
</script>
<!--
@ -56,7 +57,7 @@
<md-icon>language</md-icon>
<md-input-container class="md-flex">
<label><var:string label:value="choose"/></label>
<md-select ng-model="app.creds.language">
<md-select ng-model="app.creds.language" ng-change="app.changeLanguage($event)">
<var:foreach list="languages" item="item">
<md-option var:value="item">
<var:string value="languageText"/>

View File

@ -13,20 +13,21 @@
function LoginController($scope, $window, $timeout, Dialog, $mdDialog, Authentication) {
var vm = this;
vm.creds = {
username: $window.cookieUsername,
password: null,
rememberLogin: angular.isDefined($window.cookieUsername) && $window.cookieUsername.length > 0
this.$onInit = function() {
this.creds = {
username: $window.cookieUsername,
password: null,
language: $window.language,
rememberLogin: angular.isDefined($window.cookieUsername) && $window.cookieUsername.length > 0
};
this.loginState = false;
// Show login once everything is initialized
this.showLogin = false;
$timeout(function() { vm.showLogin = true; }, 100);
};
vm.login = login;
vm.loginState = false;
vm.showAbout = showAbout;
// Show login once everything is initialized
vm.showLogin = false;
$timeout(function() { vm.showLogin = true; }, 100);
function login() {
this.login = function() {
vm.loginState = 'authenticating';
Authentication.login(vm.creds)
.then(function(data) {
@ -45,9 +46,9 @@
vm.errorMessage = msg.error;
});
return false;
}
};
function showAbout($event) {
this.showAbout = function($event) {
$mdDialog.show({
targetEvent: $event,
templateUrl: 'aboutBox.html',
@ -60,7 +61,12 @@
$mdDialog.hide();
};
}
}
};
this.changeLanguage = function($event) {
// Reload page
$window.location.href = ApplicationBaseURL + 'login?language=' + this.creds.language;
};
}
angular