Load alarm from UIxComponentEditor

The alarm attributes are now loaded from UIxComponentEditor and not
iCalEntityObject so we can determine if the component's owner is part of
the alarm's attendees.
pull/91/head
Francis Lachapelle 2015-06-22 09:20:35 -04:00
parent d89f02ff53
commit 8402152a59
4 changed files with 56 additions and 36 deletions

View File

@ -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 <SOGoSource> *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];
}
}

View File

@ -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)

View File

@ -36,6 +36,7 @@
- (BOOL) isReadOnly;
- (void) setAttributes: (NSDictionary *) attributes;
- (NSDictionary *) loadAlarm;
+ (NSArray *) reminderValues;
@end

View File

@ -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);