Fix for feature #3079

Monotone-Parent: 1de4349e78aa0e2e7b5b5f1107576ae89d90f64e
Monotone-Revision: 56b6e4ca9c570a4e36d00e32127d539e82da7293

Monotone-Author: flachapelle@inverse.ca
Monotone-Date: 2008-11-05T17:26:02
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
Francis Lachapelle 2008-11-05 17:26:02 +00:00
parent d54abbdcfe
commit 5100d6611d
14 changed files with 221 additions and 5 deletions

View File

@ -57,7 +57,8 @@ SOGo_HEADER_FILES = \
NSDictionary+BSJSONAdditions.h \
NSScanner+BSJSONAdditions.h \
\
WORequest+SOGo.h
WORequest+SOGo.h \
WOContext+SOGo.h
# SOGoCustomGroupFolder.m \
# SOGoGroupsFolder.m \
@ -101,7 +102,8 @@ SOGo_OBJC_FILES = \
NSDictionary+BSJSONAdditions.m \
NSScanner+BSJSONAdditions.m \
\
WORequest+SOGo.m
WORequest+SOGo.m \
WOContext+SOGo.m
SOGo_RESOURCE_FILES = \
DAVReportMap.plist

View File

@ -0,0 +1,34 @@
/* WOContext+SOGo.h - this file is part of SOGo
*
* Copyright (C) 2008 Inverse inc.
*
* Author: Francis Lachapelle <flachapelle@inverse.ca>
*
* 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
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This file is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#ifndef WOCONTEXT_SOGo_H
#define WOCONTEXT_SOGo_H
#import <NGObjWeb/WOContext.h>
@interface WOContext (SOGoSOPEUtilities)
- (NSArray *)resourceLookupLanguages;
@end
#endif /* WOcontext_SOGo_H */

View File

@ -0,0 +1,53 @@
/* WOContext+SOGo.m - this file is part of SOGo
*
* Copyright (C) 2008 Inverse inc.
*
* Author: Francis Lachapelle <flachapelle@inverse.ca>
*
* 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
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This file is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#import <Foundation/NSArray.h>
#import <Foundation/NSDictionary.h>
#import <NGObjWeb/WOContext.h>
#import <NGObjWeb/WORequest.h>
#import <NGObjWeb/WOSession.h>
#import <SoObjects/SOGo/SOGoUser.h>
#import "WOContext+SOGo.h"
@implementation WOContext (SOGoSOPEUtilities)
- (NSArray *) resourceLookupLanguages
{
NSMutableArray *languages;
languages = [NSMutableArray array];
if (activeUser && [activeUser language])
[languages addObject: [activeUser language]];
if ([self hasSession])
[languages addObjectsFromArray: [[self session] languages]];
else
[languages addObjectsFromArray: [[self request] browserLanguages]];
return languages;
}
@end

View File

@ -20,6 +20,7 @@
* Boston, MA 02111-1307, USA.
*/
#import <Foundation/NSArray.h>
#import <Foundation/NSDictionary.h>
#import <NGObjWeb/SoObjectRequestHandler.h>

View File

@ -6,3 +6,19 @@
"Password:" = "Wachtwoord:";
"Connect" = "Inloggen";
"Wrong username or password." = "Wrong username or password.";
"cookiesNotEnabled" = "You cannot login because your browser's cookies are disabled. Please enable cookies in your browser's settings and try again.";
"browserNotCompatible" = "We've detected that your browser version is currently not supported on this site. Our recommendation is to use Firefox. Click on the link bellow to download the most current version of this browser.";
"alternativeBrowsers" = "Alternatively, you can also use the following compatible browsers";
"alternativeBrowserSafari" = "Alternatively, you can also use Safari.";
"Download" = "Download";
"Language:" = "Language:";
"choose" = "Choose ...";
"English" = "English";
"French" = "French";
"German" = "German";
"Italian" = "Italian";
"Spanish" = "Spanish";

View File

@ -14,3 +14,11 @@
"alternativeBrowsers" = "Alternatively, you can also use the following compatible browsers";
"alternativeBrowserSafari" = "Alternatively, you can also use Safari.";
"Download" = "Download";
"Language:" = "Language:";
"choose" = "Choose ...";
"English" = "English";
"French" = "French";
"German" = "German";
"Italian" = "Italian";
"Spanish" = "Spanish";

View File

@ -14,3 +14,11 @@
"alternativeBrowsers" = "Comme alternative, vous pouvez aussi utiliser les navigateurs suivants:";
"alternativeBrowserSafari" = "Comme alternative, vous pouvez aussi utiliser Safari.";
"Download" = "Télécharger";
"Language:" = "Langue:";
"choose" = "Choisir ...";
"English" = "Anglais";
"French" = "Français";
"German" = "Allemand";
"Italian" = "Italien";
"Spanish" = "Espagnol";

View File

@ -6,3 +6,19 @@
"Password:" = "Passwort:";
"Connect" = "Verbinden";
"Wrong username or password." = "Wrong username or password.";
"cookiesNotEnabled" = "You cannot login because your browser's cookies are disabled. Please enable cookies in your browser's settings and try again.";
"browserNotCompatible" = "We've detected that your browser version is currently not supported on this site. Our recommendation is to use Firefox. Click on the link bellow to download the most current version of this browser.";
"alternativeBrowsers" = "Alternatively, you can also use the following compatible browsers";
"alternativeBrowserSafari" = "Alternatively, you can also use Safari.";
"Download" = "Download";
"Language:" = "Language:";
"choose" = "Choose ...";
"English" = "English";
"French" = "French";
"German" = "German";
"Italian" = "Italian";
"Spanish" = "Spanish";

View File

@ -13,3 +13,11 @@
"alternativeBrowsers" = "Alternativamente, puoi utilizzare questi browser compatibili";
"alternativeBrowserSafari" = "Alternativamente, puoi utilizzare Safari.";
"Download" = "Scarica";
"Language:" = "Language:";
"choose" = "Choose ...";
"English" = "English";
"French" = "French";
"German" = "German";
"Italian" = "Italian";
"Spanish" = "Spanish";

View File

@ -26,6 +26,9 @@
#import <UI/SOGoUI/UIxComponent.h>
@interface SOGoRootPage : UIxComponent
{
id item;
}
@end

View File

@ -38,6 +38,8 @@
#import "SOGoRootPage.h"
static NSArray *supportedLanguages = nil;
@interface SOGoRootPage (crashAdditions)
- (void) segfault;
@ -46,6 +48,12 @@
@implementation SOGoRootPage
+ (void) initialize
{
if (!supportedLanguages)
supportedLanguages = [NSArray arrayWithObjects: @"English", @"French", @"German", @"Italian", @"Spanish", nil];
}
/* accessors */
- (NSString *) connectURL
@ -60,14 +68,16 @@
WORequest *request;
WOCookie *authCookie;
SOGoWebAuthenticator *auth;
SOGoUser *user;
NSString *cookieValue, *cookieString;
NSString *userName, *password;
NSString *userName, *password, *language;
auth = [[WOApplication application]
authenticatorInContext: context];
request = [context request];
userName = [request formValueForKey: @"userName"];
password = [request formValueForKey: @"password"];
language = [request formValueForKey: @"language"];
if ([auth checkLogin: userName password: password])
{
[self logWithFormat: @"successful login for user '%@'", userName];
@ -80,6 +90,13 @@
value: cookieValue];
[authCookie setPath: @"/"];
[response addCookie: authCookie];
if (language)
{
user = [SOGoUser userWithLogin: userName roles: nil];
[[user userDefaults] setObject: language forKey: @"Language"];
[[user userDefaults] synchronize];
}
}
else
{
@ -151,4 +168,34 @@
return ([[self loginSuffix] length]);
}
- (void) setItem: (id) _item
{
ASSIGN (item, _item);
}
- (id) item
{
return item;
}
- (NSArray *) languages
{
return supportedLanguages;
}
- (NSString *) language
{
return [SOGoUser language];
}
- (NSString *) languageText
{
NSString *text;
text = [self labelForKey: item];
return text;
}
@end /* SOGoRootPage */

View File

@ -16,3 +16,11 @@
"alternativeBrowsers" = "Alternativamente, también puede usar uno se los siguientes navegadores compatibles: ";
"alternativeBrowserSafari" = "Alternativamente, puede usar Safari.";
"Download" = "Descarga";
"Language:" = "Language:";
"choose" = "Choose ...";
"English" = "English";
"French" = "French";
"German" = "German";
"Italian" = "Italian";
"Spanish" = "Spanish";

View File

@ -23,6 +23,15 @@
<label><var:string label:value="Password:"/><br/>
<input class="textField" id="password"
name="password" type="password" var:value="password" /><br/></label>
<label><var:string label:value="Language:"/><br/>
<var:popup const:id="language" const:name="language"
list="languages"
item="item"
var:selection="item"
var:value="item"
string="languageText"
label:noSelectionString="choose"
/><br/></label>
<div id="loginButton">
<input class="button" id="submit" name="submit" type="submit" label:value="Connect" />
</div>

View File

@ -19,7 +19,8 @@ function onLoginClick(event) {
var userNameField = $("userName");
var userName = userNameField.value;
var password = $("password").value;
var language = $("language").value;
if (userName.length > 0) {
startAnimation($("loginButton"), $("submit"));
@ -28,7 +29,9 @@ function onLoginClick(event) {
&& !userName.endsWith(loginSuffix))
userName += loginSuffix;
var url = $("connectForm").getAttribute("action");
var parameters = ("userName=" + encodeURIComponent(userName) + "&password=" + encodeURIComponent(password));
var parameters = ("userName=" + encodeURIComponent(userName) +
"&password=" + encodeURIComponent(password) +
((language == "WONoSelectionString")?"":("&language=" + language)));
document.cookie = "";
triggerAjaxRequest(url, onLoginCallback, null, parameters,
{ "Content-type": "application/x-www-form-urlencoded",