diff --git a/ChangeLog b/ChangeLog index 486a42fe5..145fe1899 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,8 @@ -2011-10-03 Wolfgang Sourdeau +2011-10-04 Wolfgang Sourdeau + + * SoObjects/SOGo/SOGoObject.m (-davComplianceClassesInContext:): + take all the supported DAV object classes in charge, in order to + simplify the handling of those on topmost folders. * OpenChange/MAPIStoreFolder.m (-deleteMessageWithMID:andFlags:): invoke "prepareDelete" on the message object when available. diff --git a/SoObjects/Appointments/SOGoAppointmentFolder.m b/SoObjects/Appointments/SOGoAppointmentFolder.m index 95c81a274..5561a004e 100644 --- a/SoObjects/Appointments/SOGoAppointmentFolder.m +++ b/SoObjects/Appointments/SOGoAppointmentFolder.m @@ -1964,23 +1964,6 @@ firstInstanceCalendarDateRange: (NGCalendarDateRange *) fir return obj; } -- (NSArray *) davComplianceClassesInContext: (id)_ctx -{ - NSMutableArray *classes; - NSArray *primaryClasses; - - classes = [NSMutableArray array]; - - primaryClasses = [super davComplianceClassesInContext: _ctx]; - if (primaryClasses) - [classes addObjectsFromArray: primaryClasses]; - [classes addObject: @"calendar-access"]; - //[classes addObject: @"calendar-schedule"]; - [classes addObject: @"calendar-auto-schedule"]; - - return classes; -} - - (NSArray *) groupDavResourceType { return [NSArray arrayWithObjects: @"vevent-collection", diff --git a/SoObjects/Appointments/SOGoAppointmentFolders.m b/SoObjects/Appointments/SOGoAppointmentFolders.m index 798fe85bf..b721ed057 100644 --- a/SoObjects/Appointments/SOGoAppointmentFolders.m +++ b/SoObjects/Appointments/SOGoAppointmentFolders.m @@ -371,24 +371,6 @@ static SoSecurityManager *sm = nil; return error; } -- (NSArray *) davComplianceClassesInContext: (id)_ctx -{ - NSMutableArray *classes; - NSArray *primaryClasses; - - classes = [NSMutableArray array]; - - primaryClasses = [super davComplianceClassesInContext: _ctx]; - if (primaryClasses) - [classes addObjectsFromArray: primaryClasses]; - [classes addObject: @"calendar-access"]; - //[classes addObject: @"calendar-schedule"]; - [classes addObject: @"calendar-auto-schedule"]; - - - return classes; -} - - (SOGoWebDAVValue *) davCalendarComponentSet { static SOGoWebDAVValue *componentSet = nil; diff --git a/SoObjects/Contacts/SOGoContactGCSFolder.m b/SoObjects/Contacts/SOGoContactGCSFolder.m index fdf4e28af..e7128ed01 100644 --- a/SoObjects/Contacts/SOGoContactGCSFolder.m +++ b/SoObjects/Contacts/SOGoContactGCSFolder.m @@ -321,23 +321,6 @@ static NSArray *folderListingFields = nil; return davSQLFieldsTable; } -- (NSArray *) davComplianceClassesInContext: (id)_ctx -{ - NSMutableArray *classes; - NSArray *primaryClasses; - - classes = [NSMutableArray new]; - [classes autorelease]; - - primaryClasses = [super davComplianceClassesInContext: _ctx]; - if (primaryClasses) - [classes addObjectsFromArray: primaryClasses]; - [classes addObject: @"access-control"]; - [classes addObject: @"addressbook-access"]; - - return classes; -} - - (NSString *) groupDavResourceType { return @"vcard-collection"; diff --git a/SoObjects/SOGo/SOGoObject.m b/SoObjects/SOGo/SOGoObject.m index 18c2212a1..afaad3013 100644 --- a/SoObjects/SOGo/SOGoObject.m +++ b/SoObjects/SOGo/SOGoObject.m @@ -1121,21 +1121,102 @@ - (NSArray *) davComplianceClassesInContext: (WOContext *) localContext { - static NSMutableArray *newClasses = nil; - NSArray *selfClasses; + NSMutableArray *classes; + static NSArray *calendarClasses = nil, *contactsClasses = nil, + *upperClasses = nil; + NSArray *caldavClasses; + BOOL found = NO, needCalDAVClasses = NO, needCardDAVClasses = NO; + NSUInteger count, max; - if (!newClasses) + /* popuplate static arrays */ + if (!upperClasses) { - newClasses - = [[super davComplianceClassesInContext: localContext] mutableCopy]; - selfClasses = [NSArray arrayWithObjects: @"access-control", - @"calendar-access", @"calendar-schedule", - @"calendar-auto-schedule", @"calendar-proxy", - nil]; - [newClasses addObjectsFromArray: selfClasses]; + upperClasses = [NSArray arrayWithObjects: + NSClassFromString (@"SOGoPublicBaseFolder"), + NSClassFromString (@"SOGoUserFolder"), + nil]; + [upperClasses retain]; } - return newClasses; + if (!calendarClasses) + { + calendarClasses + = [NSArray arrayWithObjects: + NSClassFromString (@"SOGoAppointmentFolders"), + NSClassFromString (@"SOGoAppointmentFolder"), + nil]; + [calendarClasses retain]; + } + + if (!contactsClasses) + { + contactsClasses + = [NSArray arrayWithObjects: + NSClassFromString (@"SOGoContactFolders"), + NSClassFromString (@"SOGoContacGCSFolder"), + NSClassFromString (@"SOGoContactSourceFolder"), + nil]; + [contactsClasses retain]; + } + + /* determine which kind of object we are dealing with */ + if ([self isFolderish]) + { + max = [upperClasses count]; + for (count = 0; !found && count < max; count++) + { + if ([self isKindOfClass: [upperClasses objectAtIndex: count]]) + { + found = YES; + needCalDAVClasses = YES; + needCardDAVClasses = YES; + } + } + + max = [calendarClasses count]; + for (count = 0; !found && count < max; count++) + { + if ([self isKindOfClass: [calendarClasses objectAtIndex: count]]) + { + found = YES; + needCalDAVClasses = YES; + } + } + + max = [contactsClasses count]; + for (count = 0; !found && count < max; count++) + { + if ([self isKindOfClass: [contactsClasses objectAtIndex: count]]) + { + found = YES; + needCardDAVClasses = YES; + } + } + } + + /* prepare the array */ + classes = [[super davComplianceClassesInContext: localContext] + mutableCopy]; + if (!classes) + classes = [NSMutableArray new]; + [classes autorelease]; + + /* generic */ + [classes addObject: @"access-control"]; + + /* CardDAV */ + if (needCardDAVClasses) + [classes addObject: @"addressbook"]; + + /* CalDAV */ + if (needCalDAVClasses) + { + caldavClasses = [NSArray arrayWithObjects: @"calendar-access", @"calendar-schedule", + @"calendar-auto-schedule", @"calendar-proxy", nil]; + [classes addObjectsFromArray: caldavClasses]; + } + + return classes; } /* dav acls */