Monotone-Parent: 1b89ce2fe004930400d04b4bed9edb04d4d4fa82

Monotone-Revision: c33c456b52c6e6d4ee1f29bfd9ca57096b8d13be

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2007-04-11T19:07:54
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
Wolfgang Sourdeau 2007-04-11 19:07:54 +00:00
parent 772b31b277
commit 828d3b2818
3 changed files with 129 additions and 46 deletions

View File

@ -1,5 +1,8 @@
2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
from SOGoObject.m.
* SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
every subclass to access [WOApplication context] without having to
invoke it more than once.

View File

@ -43,31 +43,38 @@
NSString *email;
NSUserDefaults *userDefaults;
NSUserDefaults *userSettings;
NSTimeZone *userTimeZone;
}
+ (SOGoUser *) userWithLogin: (NSString *) login
andRoles: (NSArray *) roles;
/* properties */
- (NSString *)email;
- (NSString *)cn;
- (NSURL *)freeBusyURL;
- (NSString *) email;
- (NSString *) cn;
- (NSURL *) freeBusyURL;
/* shares and identities */
- (NSString *)primaryIMAP4AccountString;
- (NSString *)primaryMailServer;
- (NSArray *)additionalIMAP4AccountStrings;
- (NSArray *)additionalEMailAddresses;
- (NSDictionary *)additionalIMAP4AccountsAndEMails;
- (NSString *) primaryIMAP4AccountString;
- (NSString *) primaryMailServer;
- (NSArray *) additionalIMAP4AccountStrings;
- (NSArray *) additionalEMailAddresses;
- (NSDictionary *) additionalIMAP4AccountsAndEMails;
/* defaults */
- (NSUserDefaults *) userDefaults;
- (NSUserDefaults *) userSettings;
- (NSTimeZone *) timeZone;
- (NSTimeZone *) serverTimeZone;
/* folders */
- (id)homeFolderInContext:(id)_ctx;
- (id)schedulingCalendarInContext:(id)_ctx;
- (id) homeFolderInContext: (id) _ctx;
- (id) schedulingCalendarInContext: (id) _ctx;
- (NSArray *) rolesForObject: (NSObject *) object
inContext: (WOContext *) context;

View File

@ -26,17 +26,43 @@
#import "SOGoUser.h"
static NSTimeZone *serverTimeZone = nil;
@interface NSObject (SOGoRoles)
- (NSString *) roleOfUser: (NSString *) uid
inContext: (WOContext *) context;
- (NSArray *) rolesOfUser: (NSString *) uid
inContext: (WOContext *) context;
- (NSString *) roleOfUser: (NSString *) uid;
- (NSArray *) rolesOfUser: (NSString *) uid;
@end
@implementation SOGoUser
+ (void) initialize
{
NSString *tzName;
if (!serverTimeZone)
{
tzName = [[NSUserDefaults standardUserDefaults]
stringForKey: @"SOGoServerTimeZone"];
if (!tzName)
tzName = @"Canada/Eastern";
serverTimeZone = [NSTimeZone timeZoneWithName: tzName];
[serverTimeZone retain];
}
}
+ (SOGoUser *) userWithLogin: (NSString *) login
andRoles: (NSArray *) roles
{
SOGoUser *user;
user = [[self alloc] initWithLogin: login roles: roles];
[user autorelease];
return user;
}
- (id) init
{
if ((self = [super init]))
@ -48,56 +74,77 @@
return self;
}
- (void)dealloc {
[self->userDefaults release];
[self->userSettings release];
[self->cn release];
[self->email release];
- (void) dealloc
{
[userDefaults release];
[userSettings release];
[cn release];
[email release];
[super dealloc];
}
/* internals */
- (AgenorUserManager *)userManager {
- (AgenorUserManager *) userManager
{
static AgenorUserManager *um = nil;
if (um == nil) um = [[AgenorUserManager sharedUserManager] retain];
return um;
}
/* properties */
- (NSString *)email {
if (self->email == nil)
self->email = [[[self userManager] getEmailForUID:[self login]] copy];
return self->email;
- (NSString *) email
{
if (email == nil)
{
email = [[self userManager] getEmailForUID: [self login]];
[email retain];
}
return email;
}
- (NSString *)cn {
if (self->cn == nil)
self->cn = [[[self userManager] getCNForUID:[self login]] copy];
return self->cn;
- (NSString *) cn
{
if (cn == nil)
{
cn = [[self userManager] getCNForUID: [self login]];
[cn retain];
}
return cn;
}
- (NSString *)primaryIMAP4AccountString {
return [[self userManager] getIMAPAccountStringForUID:[self login]];
}
- (NSString *)primaryMailServer {
return [[self userManager] getServerForUID:[self login]];
- (NSString *) primaryIMAP4AccountString
{
return [[self userManager] getIMAPAccountStringForUID: [self login]];
}
- (NSArray *)additionalIMAP4AccountStrings {
return [[self userManager]getSharedMailboxAccountStringsForUID:[self login]];
}
- (NSArray *)additionalEMailAddresses {
return [[self userManager] getSharedMailboxEMailsForUID:[self login]];
- (NSString *) primaryMailServer
{
return [[self userManager] getServerForUID: [self login]];
}
- (NSDictionary *)additionalIMAP4AccountsAndEMails {
return [[self userManager] getSharedMailboxesAndEMailsForUID:[self login]];
- (NSArray *) additionalIMAP4AccountStrings
{
return [[self userManager]getSharedMailboxAccountStringsForUID: [self login]];
}
- (NSURL *)freeBusyURL {
return [[self userManager] getFreeBusyURLForUID:[self login]];
- (NSArray *) additionalEMailAddresses
{
return [[self userManager] getSharedMailboxEMailsForUID: [self login]];
}
- (NSDictionary *) additionalIMAP4AccountsAndEMails
{
return [[self userManager] getSharedMailboxesAndEMailsForUID: [self login]];
}
- (NSURL *) freeBusyURL
{
return [[self userManager] getFreeBusyURLForUID: [self login]];
}
/* defaults */
@ -124,12 +171,37 @@
return userSettings;
}
- (NSTimeZone *) timeZone
{
NSString *timeZoneName;
if (!userTimeZone)
{
timeZoneName = [[self userDefaults] stringForKey: @"TimeZone"];
if ([timeZoneName length] > 0)
userTimeZone = [NSTimeZone timeZoneWithName: timeZoneName];
else
userTimeZone = nil;
if (!userTimeZone)
userTimeZone = [self serverTimeZone];
[userTimeZone retain];
}
return userTimeZone;
}
- (NSTimeZone *) serverTimeZone
{
return serverTimeZone;
}
/* folders */
// TODO: those methods should check whether the traversal stack in the context
// already contains proper folders to improve caching behaviour
- (id)homeFolderInContext:(id)_ctx {
- (id) homeFolderInContext: (id) _ctx
{
/* Note: watch out for cyclic references */
// TODO: maybe we should add an [activeUser reset] method to SOPE
id folder;
@ -148,7 +220,8 @@
return folder;
}
- (id)schedulingCalendarInContext:(id)_ctx {
- (id) schedulingCalendarInContext: (id) _ctx
{
/* Note: watch out for cyclic references */
id folder;
@ -196,13 +269,13 @@
}
if ([object respondsToSelector: @selector (rolesOfUser:inContext:)])
{
sogoRoles = [object rolesOfUser: login inContext: context];
sogoRoles = [object rolesOfUser: login];
if (sogoRoles)
[rolesForObject addObjectsFromArray: sogoRoles];
}
if ([object respondsToSelector: @selector (roleOfUser:inContext:)])
{
role = [object roleOfUser: login inContext: context];
role = [object roleOfUser: login];
if (role)
[rolesForObject addObject: role];
}