diff --git a/ChangeLog b/ChangeLog index 0f3382cea..fa46cd56d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2006-12-15 Wolfgang Sourdeau + * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the + new acl facilities method from sope-gdl/GCSFolder.m. + * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders -roleOfUser:uidinContext:context]): new method that returns SOGoRole_Assistant when the user is an assistant or a delegate on diff --git a/SoObjects/SOGo/SOGoAclsFolder.h b/SoObjects/SOGo/SOGoAclsFolder.h index f290ba436..108db62b5 100644 --- a/SoObjects/SOGo/SOGoAclsFolder.h +++ b/SoObjects/SOGo/SOGoAclsFolder.h @@ -23,11 +23,16 @@ #ifndef SOGOACLSFOLDER_H #define SOGOACLSFOLDER_H -#import "SOGoFolder.h" +#import -@interface SOGoAclsFolder : SOGoFolder +@class NSString; +@class GCSFolder; +@class SOGoObject; + +@interface SOGoAclsFolder : NSObject { -// SOGoObject *clientObject; + NSString *ocsPath; + GCSFolder *ocsFolder; } + (id) aclsFolder; diff --git a/SoObjects/SOGo/SOGoAclsFolder.m b/SoObjects/SOGo/SOGoAclsFolder.m index 3b0e6a932..3613f1ed6 100644 --- a/SoObjects/SOGo/SOGoAclsFolder.m +++ b/SoObjects/SOGo/SOGoAclsFolder.m @@ -24,27 +24,18 @@ #import #import -#import -#import +#import +#import #import #import #import +#import +#import "SOGoFolder.h" #import "SOGoAclsFolder.h" -static NSArray *fields = nil; - @implementation SOGoAclsFolder -+ (void) initialize -{ - if (!fields) - { - fields = [NSArray arrayWithObjects: @"uid", @"object", @"role", nil]; - [fields retain]; - } -} - + (id) aclsFolder { id aclsFolder; @@ -55,20 +46,80 @@ static NSArray *fields = nil; return aclsFolder; } +- (id) init +{ + if ((self = [super init])) + { + ocsPath = nil; + ocsFolder = nil; + } + + return self; +} + +- (void) dealloc +{ + if (ocsPath) + [ocsPath release]; + if (ocsFolder) + [ocsFolder release]; + [super dealloc]; +} + +- (void) setOCSPath: (NSString *) newOCSPath +{ + if (ocsPath) + [ocsPath release]; + ocsPath = newOCSPath; + if (ocsPath) + [ocsPath retain]; +} + +- (GCSFolderManager *)folderManager { + return [GCSFolderManager defaultFolderManager]; +} + +- (GCSFolder *)ocsFolderForPath:(NSString *)_path { + return [[self folderManager] folderAtPath:_path]; +} + +- (GCSFolder *) ocsFolder { + GCSFolder *folder; + + if (!ocsFolder) + ocsFolder = [[self ocsFolderForPath: ocsPath] retain]; + + if ([ocsFolder isNotNull]) + folder = ocsFolder; + else + folder = nil; + + return folder; +} + - (NSString *) _ocsPathForObject: (SOGoObject *) object { NSString *pathForObject; id currentObject; + BOOL done; + NSLog (@"lookup ocs path for '%@' (%s)", [object nameInContainer], [object class]->name); pathForObject = nil; currentObject = object; - while (currentObject && !pathForObject) + done = NO; + while (currentObject && !done) if ([currentObject isKindOfClass: [SOGoFolder class]]) - pathForObject = [NSString stringWithFormat: @"%@/acls", - [(SOGoFolder *) currentObject ocsPath]]; + { + pathForObject = [(SOGoFolder *) currentObject ocsPath]; + done = YES; +// if (!pathForObject) +// currentObject = [currentObject container]; + } else currentObject = [currentObject container]; + NSLog (@"path found = '%@'", pathForObject); + return pathForObject; } @@ -83,9 +134,9 @@ static NSArray *fields = nil; = [NSString stringWithFormat: @"/%@", [[object pathArrayToSoObject] componentsJoinedByString: @"/"]]; qualifier - = [EOQualifier qualifierWithQualifierFormat: @"object = %@", objectPath]; + = [EOQualifier qualifierWithQualifierFormat: @"c_object = %@", objectPath]; - return [[self ocsFolder] fetchFields: fields matchingQualifier: qualifier]; + return [[self ocsFolder] fetchAclMatchingQualifier: qualifier]; } - (NSArray *) aclsForObject: (SOGoObject *) object @@ -101,12 +152,12 @@ static NSArray *fields = nil; = [NSString stringWithFormat: @"/%@", [[object pathArrayToSoObject] componentsJoinedByString: @"/"]]; qualifier = [EOQualifier - qualifierWithQualifierFormat: @"(object = %@) AND (uid = %@)", + qualifierWithQualifierFormat: @"(c_object = %@) AND (c_uid = %@)", objectPath, uid]; - records = [[self ocsFolder] fetchFields: fields matchingQualifier: qualifier]; + records = [[self ocsFolder] fetchAclMatchingQualifier: qualifier]; - return [records valueForKey: @"role"]; + return [records valueForKey: @"c_role"]; } - (void) removeUsersWithRole: (NSString *) role @@ -116,12 +167,12 @@ static NSArray *fields = nil; NSString *deleteSQL; EOAdaptorChannel *channel; - channel = [folder acquireQuickChannel]; + channel = [folder acquireAclChannel]; deleteSQL = [NSString stringWithFormat: @"DELETE FROM %@" - @" WHERE object = '%@'" - @" AND role = '%@'", - [folder quickTableName], objectPath, role]; + @" WHERE c_object = '%@'" + @" AND c_role = '%@'", + [folder aclTableName], objectPath, role]; [channel evaluateExpressionX: deleteSQL]; } @@ -133,16 +184,16 @@ static NSArray *fields = nil; NSString *SQL; EOAdaptorChannel *channel; - channel = [folder acquireQuickChannel]; + channel = [folder acquireAclChannel]; SQL = [NSString stringWithFormat: @"DELETE FROM %@" - @" WHERE object = '%@'" - @" AND uid = '%@'", - [folder quickTableName], objectPath, uid]; + @" WHERE c_object = '%@'" + @" AND c_uid = '%@'", + [folder aclTableName], objectPath, uid]; [channel evaluateExpressionX: SQL]; SQL = [NSString stringWithFormat: @"INSERT INTO %@" - @" (object, uid, role)" - @" VALUES ('%@', '%@', '%@')", [folder quickTableName], + @" (c_object, c_uid, c_role)" + @" VALUES ('%@', '%@', '%@')", [folder aclTableName], objectPath, uid, role]; [channel evaluateExpressionX: SQL]; }