Monotone-Parent: 1b89ce2fe004930400d04b4bed9edb04d4d4fa82
Monotone-Revision: c33c456b52c6e6d4ee1f29bfd9ca57096b8d13be Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2007-04-11T19:07:54 Monotone-Branch: ca.inverse.sogomaint-2.0.2
parent
772b31b277
commit
828d3b2818
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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];
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue