diff --git a/SoObjects/Appointments/iCalEntityObject+SOGo.m b/SoObjects/Appointments/iCalEntityObject+SOGo.m index 9a3052ac1..abd91346d 100644 --- a/SoObjects/Appointments/iCalEntityObject+SOGo.m +++ b/SoObjects/Appointments/iCalEntityObject+SOGo.m @@ -78,14 +78,12 @@ NSNumber *iCalDistantFutureNumber = nil; NSArray *elements; NSMutableArray *attendees; NSDictionary *contactData; - NSMutableDictionary *data, *organizerData, *attendeeData, *alarmData; + NSMutableDictionary *data, *organizerData, *attendeeData; NSEnumerator *attendeesList; NSString *uid, *domain, *sentBy; NSObject *source; SOGoUserManager *um; iCalPerson *organizer, *currentAttendee; - iCalAlarm *alarm; - iCalTrigger *trigger; id value; um = [SOGoUserManager sharedUserManager]; @@ -183,35 +181,6 @@ NSNumber *iCalDistantFutureNumber = nil; if ([attendees count]) [data setObject: attendees forKey: @"attendees"]; - // Alarm - if ([self hasAlarms]) - { - alarm = [self firstSupportedAlarm]; // only consider the first alarm with a supported action - trigger = [alarm trigger]; - if (![[trigger valueType] length] || [[trigger valueType] caseInsensitiveCompare: @"DURATION"] == NSOrderedSame) - { - alarmData = [NSMutableDictionary dictionaryWithObjectsAndKeys: - [[alarm action] lowercaseString], @"action", - nil]; - [alarmData addEntriesFromDictionary: [trigger asDictionary]]; - attendees = [NSMutableArray array]; - attendeesList = [[alarm attendees] objectEnumerator]; - while ((currentAttendee = [attendeesList nextObject])) - { - attendeeData = [NSMutableDictionary dictionaryWithObjectsAndKeys: - [currentAttendee rfc822Email], @"email", - [currentAttendee cnWithoutQuotes], @"name", - nil]; - if ([currentAttendee uid]) [attendeeData setObject: [currentAttendee uid] forKey: @"uid"]; - [attendees addObject: attendeeData]; - } - if ([attendees count]) - [alarmData setObject: attendees forKey: @"attendees"]; - - [data setObject: alarmData forKey: @"alarm"]; - } - } - return data; } @@ -367,7 +336,6 @@ NSNumber *iCalDistantFutureNumber = nil; if (anAlarm) { [self addToAlarms: anAlarm]; - [anAlarm release]; } } diff --git a/UI/Scheduler/UIxAppointmentEditor.m b/UI/Scheduler/UIxAppointmentEditor.m index 1b62cc8f9..586b43792 100644 --- a/UI/Scheduler/UIxAppointmentEditor.m +++ b/UI/Scheduler/UIxAppointmentEditor.m @@ -545,8 +545,8 @@ * @apiExample {curl} Example usage: * curl -i http://localhost/SOGo/so/sogo1/Calendar/personal/71B6-54904400-1-7C308500.ics/view * - * @apiParam {Number} [resetAlarm] Mark alarm as triggered if set to 1 - * @apiParam {Number} [snoozeAlarm] Snooze the alarm for this number of minutes + * @apiParam {Number} [resetAlarm] Mark alarm as triggered if set to 1 + * @apiParam {Number} [snoozeAlarm] Snooze the alarm for this number of minutes * * @apiSuccess (Success 200) {String} id Event ID * @apiSuccess (Success 200) {String} pid Calendar ID (event's folder) @@ -682,6 +682,7 @@ [NSNumber numberWithBool: [self isReadOnly]], @"isReadOnly", [dateFormatter formattedDate: eventStartDate], @"localizedStartDate", [dateFormatter formattedDate: eventEndDate], @"localizedEndDate", + [self loadAlarm], @"alarm", nil]; if (!isAllDay) diff --git a/UI/Scheduler/UIxComponentEditor.h b/UI/Scheduler/UIxComponentEditor.h index 5e984faef..38c452b00 100644 --- a/UI/Scheduler/UIxComponentEditor.h +++ b/UI/Scheduler/UIxComponentEditor.h @@ -36,6 +36,7 @@ - (BOOL) isReadOnly; - (void) setAttributes: (NSDictionary *) attributes; +- (NSDictionary *) loadAlarm; + (NSArray *) reminderValues; @end diff --git a/UI/Scheduler/UIxComponentEditor.m b/UI/Scheduler/UIxComponentEditor.m index eb01fe635..05309418f 100644 --- a/UI/Scheduler/UIxComponentEditor.m +++ b/UI/Scheduler/UIxComponentEditor.m @@ -545,6 +545,56 @@ static NSArray *reminderValues = nil; } } +- (NSDictionary *) loadAlarm +{ + NSArray *attendees; + NSMutableDictionary *alarmData; + NSString *ownerId, *email; + iCalAlarm *anAlarm; + iCalPerson *aAttendee; + iCalTrigger *trigger; + SOGoUser *owner; + BOOL emailOrganizer, emailAttendees; + int count, max; + + alarmData = nil; + if ([component hasAlarms]) + { + anAlarm = [component firstSupportedAlarm]; + trigger = [anAlarm trigger]; + if (![[trigger valueType] length] || [[trigger valueType] caseInsensitiveCompare: @"DURATION"] == NSOrderedSame) + { + alarmData = [NSMutableDictionary dictionaryWithObjectsAndKeys: + [[anAlarm action] lowercaseString], @"action", + nil]; + [alarmData addEntriesFromDictionary: [trigger asDictionary]]; + + emailOrganizer = NO; + emailAttendees = NO; + attendees = [anAlarm attendees]; + ownerId = [[self clientObject] ownerInContext: nil]; + owner = [SOGoUser userWithLogin: ownerId]; + email = [[owner defaultIdentity] objectForKey: @"email"]; + max = [attendees count]; + for (count = 0; + !(emailOrganizer && emailAttendees) + && count < max; + count++) + { + aAttendee = [attendees objectAtIndex: count]; + if ([[aAttendee rfc822Email] isEqualToString: email]) + emailOrganizer = YES; + else + emailAttendees = YES; + } + [alarmData setObject: [NSNumber numberWithBool: emailOrganizer] forKey: @"organizer"]; + [alarmData setObject: [NSNumber numberWithBool: emailAttendees] forKey: @"attendees"]; + } + } + + return alarmData; +} + - (void) setAttributes: (NSDictionary *) data { NSCalendarDate *now; @@ -757,7 +807,7 @@ static NSArray *reminderValues = nil; // ? @"true" // : @"false"); //} -// + //- (BOOL) userHasRSVP //{ // return ([self getEventRWType] == 1);