2 Copyright (C) 2005 SKYRIX Software AG
4 This file is part of OpenGroupware.org.
6 OGo is free software; you can redistribute it and/or modify it under
7 the terms of the GNU Lesser General Public License as published by the
8 Free Software Foundation; either version 2, or (at your option) any
11 OGo is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
14 License for more details.
16 You should have received a copy of the GNU Lesser General Public
17 License along with OGo; see the file COPYING. If not, write to the
18 Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
22 #import <NGObjWeb/SoObject.h>
23 #import "AgenorUserManager.h"
24 #import "SOGoAclsFolder.h"
29 @interface NSObject (SOGoRoles)
31 - (NSString *) roleOfUser: (NSString *) uid
32 inContext: (WOContext *) context;
36 @implementation SOGoUser
39 [self->userDefaults release];
41 [self->email release];
47 - (AgenorUserManager *)userManager {
48 static AgenorUserManager *um = nil;
49 if (um == nil) um = [[AgenorUserManager sharedUserManager] retain];
56 if (self->email == nil)
57 self->email = [[[self userManager] getEmailForUID:[self login]] copy];
63 self->cn = [[[self userManager] getCNForUID:[self login]] copy];
67 - (NSString *)primaryIMAP4AccountString {
68 return [[self userManager] getIMAPAccountStringForUID:[self login]];
70 - (NSString *)primaryMailServer {
71 return [[self userManager] getServerForUID:[self login]];
74 - (NSArray *)additionalIMAP4AccountStrings {
75 return [[self userManager]getSharedMailboxAccountStringsForUID:[self login]];
77 - (NSArray *)additionalEMailAddresses {
78 return [[self userManager] getSharedMailboxEMailsForUID:[self login]];
81 - (NSDictionary *)additionalIMAP4AccountsAndEMails {
82 return [[self userManager] getSharedMailboxesAndEMailsForUID:[self login]];
85 - (NSURL *)freeBusyURL {
86 return [[self userManager] getFreeBusyURLForUID:[self login]];
91 - (NSUserDefaults *)userDefaults {
92 if (self->userDefaults == nil) {
94 [[[self userManager] getUserDefaultsForUID:[self login]] retain];
96 return self->userDefaults;
101 // TODO: those methods should check whether the traversal stack in the context
102 // already contains proper folders to improve caching behaviour
104 - (id)homeFolderInContext:(id)_ctx {
105 /* Note: watch out for cyclic references */
106 // TODO: maybe we should add an [activeUser reset] method to SOPE
109 folder = [(WOContext *)_ctx objectForKey:@"ActiveUserHomeFolder"];
111 return [folder isNotNull] ? folder : nil;
113 folder = [[WOApplication application] lookupName:[self login]
114 inContext:_ctx acquire:NO];
115 if ([folder isKindOfClass:[NSException class]])
118 [(WOContext *)_ctx setObject:folder ? folder : [NSNull null]
119 forKey: @"ActiveUserHomeFolder"];
123 - (id)schedulingCalendarInContext:(id)_ctx {
124 /* Note: watch out for cyclic references */
127 folder = [(WOContext *)_ctx objectForKey:@"ActiveUserCalendar"];
129 return [folder isNotNull] ? folder : nil;
131 folder = [self homeFolderInContext:_ctx];
132 if ([folder isKindOfClass:[NSException class]])
135 folder = [folder lookupName:@"Calendar" inContext:_ctx acquire:NO];
136 if ([folder isKindOfClass:[NSException class]])
139 [(WOContext *)_ctx setObject:folder ? folder : [NSNull null]
140 forKey:@"ActiveUserCalendar"];
144 - (NSArray *) rolesForObject: (NSObject *) object
145 inContext: (WOContext *) context
147 NSMutableArray *rolesForObject;
148 SOGoAclsFolder *aclsFolder;
153 = [NSMutableArray arrayWithArray: [super rolesForObject: object
154 inContext: context]];
155 if ([[object ownerInContext: context] isEqualToString: [self login]])
156 [rolesForObject addObject: SoRole_Owner];
157 if ([object isKindOfClass: [SOGoObject class]])
159 aclsFolder = [SOGoAclsFolder aclsFolder];
160 sogoRoles = [aclsFolder aclsForObject: (SOGoObject *) object
162 [rolesForObject addObjectsFromArray: sogoRoles];
164 if ([object respondsToSelector: @selector (roleOfUser:inContext:)])
166 role = [object roleOfUser: login inContext: context];
168 [rolesForObject addObject: role];
171 return rolesForObject;