From 71d412614913463c56d6510d64b90a66738eb787 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Mon, 23 Mar 2009 21:19:55 +0000 Subject: [PATCH] See ChangeLog Monotone-Parent: 1da41bffe0d25476b6f909fd1621c5026cdf59ee Monotone-Revision: ab9ae63478f08b1ff94c2872ca40ff73a041a9a7 Monotone-Author: flachapelle@inverse.ca Monotone-Date: 2009-03-23T21:19:55 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 13 +++++- NEWS | 8 +++- .../Appointments/SOGoAppointmentFolder.h | 1 + .../Appointments/SOGoAppointmentFolder.m | 31 +++++++++++++ .../Appointments/SOGoAppointmentObject.m | 42 +++++++++++------- UI/WebServerResources/lori-login.jpg | Bin 7861 -> 0 bytes 6 files changed, 75 insertions(+), 20 deletions(-) delete mode 100644 UI/WebServerResources/lori-login.jpg diff --git a/ChangeLog b/ChangeLog index bc719d828..dfe5f1f99 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2009-03-23 Francis Lachapelle + + * SoObjects/Appointments/SOGoAppointmentObject.m + ([SOGoAppointmentObject -_lookupEvent:forUID:]): when looking for + an event for a specific user, we now search into all the user's + calendar folders. + + * SoObjects/Appointments/SOGoAppointmentFolder.m + ([SOGoAppointmentFolder -lookupCalendarFoldersForUID:]): new + method that returns an array of a user's calendar folders + excluding the subscriptions. + 2009-03-23 Wolfgang Sourdeau * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder @@ -16,7 +28,6 @@ * SoObjects/SOGo/SOGoUser.m: Don't retain/release the language ivar. - 2009-03-22 Wolfgang Sourdeau * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): cache the diff --git a/NEWS b/NEWS index 8dfb2d775..993843c9e 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,9 @@ -1.0-20090317 ------------ +1.0-2009 +-------- +- when the status of an attendee changes, the event of an organizer is now updated correctly if it doesn't reside in the personal folder + +1.0-20090317 (1.0.0) +--------------- - when double-clicking in the all-day zone (day & week views), the "All Day event" checkbox is now automatically checked - replaced the JavaScript FastInit class by the dom:loaded event of Prototype JS - also updated Prototype JS to fix issues with IE7 diff --git a/SoObjects/Appointments/SOGoAppointmentFolder.h b/SoObjects/Appointments/SOGoAppointmentFolder.h index ff7925290..66e5548f6 100644 --- a/SoObjects/Appointments/SOGoAppointmentFolder.h +++ b/SoObjects/Appointments/SOGoAppointmentFolder.h @@ -107,6 +107,7 @@ inContext: (id) _ctx; - (SOGoAppointmentFolder *) lookupCalendarFolderForUID: (NSString *) uid; +- (NSArray *) lookupCalendarFoldersForUID: (NSString *) theUID; - (NSArray *) lookupCalendarFoldersForUIDs: (NSArray *) _uids inContext: (id) _ctx; - (NSArray *) lookupFreeBusyObjectsForUIDs: (NSArray *) _uids diff --git a/SoObjects/Appointments/SOGoAppointmentFolder.m b/SoObjects/Appointments/SOGoAppointmentFolder.m index 44f6bf655..2ec5c945f 100644 --- a/SoObjects/Appointments/SOGoAppointmentFolder.m +++ b/SoObjects/Appointments/SOGoAppointmentFolder.m @@ -2406,6 +2406,37 @@ firstInstanceCalendarDateRange: (NGCalendarDateRange *) fir return (SOGoAppointmentFolder *) currentContainer; } +// +// This method returns an array containing all the calendar folders +// of a specific user, excluding her/his subscriptions. +// +- (NSArray *) lookupCalendarFoldersForUID: (NSString *) theUID +{ + NSArray *aFolders; + NSEnumerator *e; + NSMutableArray *aUserFolders; + SOGoAppointmentFolders *aParent; + SOGoFolder *aContainer, *aFolder; + + aUserFolders = [NSMutableArray arrayWithCapacity: 16]; + aContainer = [[container container] container]; + aContainer = [aContainer lookupName: theUID + inContext: context + acquire: NO]; + aParent = [aContainer lookupName: @"Calendar" + inContext: context + acquire: NO]; + aFolders = [aParent subFolders]; + e = [aFolders objectEnumerator]; + while ( (aFolder = [e nextObject]) ) + { + if (![aFolder isSubscription]) + [aUserFolders addObject: aFolder]; + } + + return aUserFolders; +} + - (NSArray *) lookupCalendarFoldersForUIDs: (NSArray *) _uids inContext: (id)_ctx { diff --git a/SoObjects/Appointments/SOGoAppointmentObject.m b/SoObjects/Appointments/SOGoAppointmentObject.m index 740d5922e..7c6758eca 100644 --- a/SoObjects/Appointments/SOGoAppointmentObject.m +++ b/SoObjects/Appointments/SOGoAppointmentObject.m @@ -173,24 +173,31 @@ { SOGoAppointmentFolder *folder; SOGoAppointmentObject *object; + NSArray *folders; + NSEnumerator *e; NSString *possibleName; -#warning Should call lookupCalendarFoldersForUIDs to search among all folders - folder = [container lookupCalendarFolderForUID: uid]; - object = [folder lookupName: nameInContainer - inContext: context acquire: NO]; - if ([object isKindOfClass: [NSException class]]) + object = nil; + folders = [container lookupCalendarFoldersForUID: uid]; + e = [folders objectEnumerator]; + while ( object == nil && (folder = [e nextObject]) ) { - possibleName = [folder resourceNameForEventUID: eventUID]; - if (possibleName) + object = [folder lookupName: nameInContainer + inContext: context + acquire: NO]; + if ([object isKindOfClass: [NSException class]]) { - object = [folder lookupName: possibleName - inContext: context acquire: NO]; - if ([object isKindOfClass: [NSException class]]) + possibleName = [folder resourceNameForEventUID: eventUID]; + if (possibleName) + { + object = [folder lookupName: possibleName + inContext: context acquire: NO]; + if ([object isKindOfClass: [NSException class]]) + object = nil; + } + else object = nil; } - else - object = nil; } if (!object) @@ -281,8 +288,9 @@ NSCalendarDate *currentId; NSString *calendarContent; int max, count; - -#warning Should call lookupCalendarFoldersForUIDs to search among all folders + + // Invitations are always written to the personal folder; it's not necessay + // to look into all folders of the user folder = [container lookupCalendarFolderForUID: theUID]; object = [folder lookupName: nameInContainer inContext: context acquire: NO]; @@ -293,7 +301,7 @@ else { calendar = [object calendar: NO secure: NO]; - + // If recurrenceId is defined, remove the occurence from // the repeating event. occurences = [calendar events]; @@ -314,9 +322,9 @@ // Add an date exception. event = (iCalRepeatableEntityObject*)[calendar firstChildWithTag: [object componentTag]]; [event addToExceptionDates: recurrenceId]; - + [event increaseSequence]; - + // We generate the updated iCalendar file and we save it // in the database. calendarContent = [calendar versitString]; diff --git a/UI/WebServerResources/lori-login.jpg b/UI/WebServerResources/lori-login.jpg deleted file mode 100644 index 7ab42d121e19921b798c31fad3efe3ccee1cb29b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7861 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