parent
aee42f76f0
commit
41967d3eec
2
NEWS
2
NEWS
|
@ -8,7 +8,7 @@ Enhancements
|
||||||
- [core] now possible to {un}subscribe to folders using sogo-tool
|
- [core] now possible to {un}subscribe to folders using sogo-tool
|
||||||
|
|
||||||
Bug fixes
|
Bug fixes
|
||||||
-
|
- [web] respect SOGoLanguage and SOGoSupportedLanguages (#4169)
|
||||||
|
|
||||||
3.2.9 (2017-05-09)
|
3.2.9 (2017-05-09)
|
||||||
------------------
|
------------------
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
SOGoEnableDomainBasedUID = NO;
|
SOGoEnableDomainBasedUID = NO;
|
||||||
|
|
||||||
SOGoLoginModule = "Mail";
|
SOGoLoginModule = "Mail";
|
||||||
|
WODefaultLanguages = ();
|
||||||
SOGoLanguage = "English";
|
SOGoLanguage = "English";
|
||||||
SOGoSupportedLanguages = (
|
SOGoSupportedLanguages = (
|
||||||
"Arabic",
|
"Arabic",
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#import <NGObjWeb/WORequest.h>
|
#import <NGObjWeb/WORequest.h>
|
||||||
|
|
||||||
#import "SOGoDomainDefaults.h"
|
#import "SOGoDomainDefaults.h"
|
||||||
|
#import "SOGoSystemDefaults.h"
|
||||||
#import "SOGoUser.h"
|
#import "SOGoUser.h"
|
||||||
|
|
||||||
#import "WOContext+SOGo.h"
|
#import "WOContext+SOGo.h"
|
||||||
|
@ -31,14 +32,21 @@
|
||||||
- (NSArray *) resourceLookupLanguages
|
- (NSArray *) resourceLookupLanguages
|
||||||
{
|
{
|
||||||
NSMutableArray *languages;
|
NSMutableArray *languages;
|
||||||
NSArray *browserLanguages;
|
NSArray *browserLanguages, *supportedLanguages;
|
||||||
|
SOGoSystemDefaults *sd;
|
||||||
SOGoUser *user;
|
SOGoUser *user;
|
||||||
NSString *language, *theme;
|
NSString *language, *theme;
|
||||||
|
|
||||||
languages = [NSMutableArray array];
|
languages = [NSMutableArray array];
|
||||||
user = [self activeUser];
|
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 length] > 0)
|
||||||
{
|
{
|
||||||
if ([theme hasSuffix: @"/"])
|
if ([theme hasSuffix: @"/"])
|
||||||
|
@ -52,18 +60,28 @@
|
||||||
|
|
||||||
if (!user || [[user login] isEqualToString: @"anonymous"])
|
if (!user || [[user login] isEqualToString: @"anonymous"])
|
||||||
{
|
{
|
||||||
|
// Use browser's languages
|
||||||
browserLanguages = [[self request] browserLanguages];
|
browserLanguages = [[self request] browserLanguages];
|
||||||
[languages addObjectsFromArray: browserLanguages];
|
[languages addObjectsFromArray: browserLanguages];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// Use user's language or domain's language
|
||||||
language = [[user userDefaults] language];
|
language = [[user userDefaults] language];
|
||||||
[languages addObject: language];
|
[languages addObject: language];
|
||||||
language = [[user domainDefaults] language];
|
language = [[user domainDefaults] language];
|
||||||
[languages addObject: 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
|
@end
|
||||||
|
|
|
@ -72,6 +72,11 @@
|
||||||
|
|
||||||
/* accessors */
|
/* accessors */
|
||||||
|
|
||||||
|
- (NSString *) modulePath
|
||||||
|
{
|
||||||
|
return @"";
|
||||||
|
}
|
||||||
|
|
||||||
//- (NSString *) connectURL
|
//- (NSString *) connectURL
|
||||||
//{
|
//{
|
||||||
// return [NSString stringWithFormat: @"%@/connect", [self applicationPath]];
|
// return [NSString stringWithFormat: @"%@/connect", [self applicationPath]];
|
||||||
|
@ -525,6 +530,11 @@
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (NSString *) language
|
||||||
|
{
|
||||||
|
return [[context resourceLookupLanguages] objectAtIndex: 0];
|
||||||
|
}
|
||||||
|
|
||||||
- (NSArray *) languages
|
- (NSArray *) languages
|
||||||
{
|
{
|
||||||
return [[SOGoSystemDefaults sharedSystemDefaults] supportedLanguages];
|
return [[SOGoSystemDefaults sharedSystemDefaults] supportedLanguages];
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
>
|
>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var cookieUsername = '<var:string var:value="cookieUsername" const:escapeHTML="NO"/>';
|
var cookieUsername = '<var:string var:value="cookieUsername" const:escapeHTML="NO"/>';
|
||||||
|
var language = '<var:string var:value="language" const:escapeHTML="NO"/>';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
|
@ -56,7 +57,7 @@
|
||||||
<md-icon>language</md-icon>
|
<md-icon>language</md-icon>
|
||||||
<md-input-container class="md-flex">
|
<md-input-container class="md-flex">
|
||||||
<label><var:string label:value="choose"/></label>
|
<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">
|
<var:foreach list="languages" item="item">
|
||||||
<md-option var:value="item">
|
<md-option var:value="item">
|
||||||
<var:string value="languageText"/>
|
<var:string value="languageText"/>
|
||||||
|
|
|
@ -13,20 +13,21 @@
|
||||||
function LoginController($scope, $window, $timeout, Dialog, $mdDialog, Authentication) {
|
function LoginController($scope, $window, $timeout, Dialog, $mdDialog, Authentication) {
|
||||||
var vm = this;
|
var vm = this;
|
||||||
|
|
||||||
vm.creds = {
|
this.$onInit = function() {
|
||||||
username: $window.cookieUsername,
|
this.creds = {
|
||||||
password: null,
|
username: $window.cookieUsername,
|
||||||
rememberLogin: angular.isDefined($window.cookieUsername) && $window.cookieUsername.length > 0
|
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
|
this.login = function() {
|
||||||
vm.showLogin = false;
|
|
||||||
$timeout(function() { vm.showLogin = true; }, 100);
|
|
||||||
|
|
||||||
function login() {
|
|
||||||
vm.loginState = 'authenticating';
|
vm.loginState = 'authenticating';
|
||||||
Authentication.login(vm.creds)
|
Authentication.login(vm.creds)
|
||||||
.then(function(data) {
|
.then(function(data) {
|
||||||
|
@ -45,9 +46,9 @@
|
||||||
vm.errorMessage = msg.error;
|
vm.errorMessage = msg.error;
|
||||||
});
|
});
|
||||||
return false;
|
return false;
|
||||||
}
|
};
|
||||||
|
|
||||||
function showAbout($event) {
|
this.showAbout = function($event) {
|
||||||
$mdDialog.show({
|
$mdDialog.show({
|
||||||
targetEvent: $event,
|
targetEvent: $event,
|
||||||
templateUrl: 'aboutBox.html',
|
templateUrl: 'aboutBox.html',
|
||||||
|
@ -60,7 +61,12 @@
|
||||||
$mdDialog.hide();
|
$mdDialog.hide();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
|
this.changeLanguage = function($event) {
|
||||||
|
// Reload page
|
||||||
|
$window.location.href = ApplicationBaseURL + 'login?language=' + this.creds.language;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
angular
|
angular
|
||||||
|
|
Loading…
Reference in New Issue