diff --git a/ActiveSync/SOGoActiveSyncDispatcher.m b/ActiveSync/SOGoActiveSyncDispatcher.m index e275aaad4..596514619 100644 --- a/ActiveSync/SOGoActiveSyncDispatcher.m +++ b/ActiveSync/SOGoActiveSyncDispatcher.m @@ -2901,15 +2901,119 @@ void handle_eas_terminate(int signum) - (void) processSettings: (id ) theDocumentElement inResponse: (WOResponse *) theResponse { - + SOGoDomainDefaults *dd; + NSMutableDictionary *vacationOptions; NSMutableString *s; NSData *d; - + int OofState, time, i; + id setElements; + NSCalendarDate *endDate; + NSString *autoReplyText; + NSArray *OofMessages; + s = [NSMutableString string]; + [s appendString: @""]; [s appendString: @""]; [s appendString: @""]; - [s appendFormat: @" 1"]; + [s appendString: @"1"]; + + if ([(id)[[(id)[theDocumentElement getElementsByTagName: @"Oof"] lastObject] getElementsByTagName: @"Get"] lastObject]) + { + dd = [[context activeUser] domainDefaults]; + if ([dd vacationEnabled]) + { + vacationOptions = [[[[context activeUser] userDefaults] vacationOptions] mutableCopy]; + if (!vacationOptions) + vacationOptions = [NSMutableDictionary new]; + + if ([[vacationOptions objectForKey: @"enabled"] boolValue] && [[vacationOptions objectForKey: @"endDateEnabled"] intValue]) + OofState = 2; + else if ([[vacationOptions objectForKey: @"enabled"] boolValue]) + OofState = 1; + else + OofState = 0; + + [s appendString: @""]; + [s appendString: @"1"]; + [s appendString: @""]; + [s appendFormat: @"%d", OofState]; + + time = [[vacationOptions objectForKey: @"endDate"] intValue]; + + [s appendFormat: @"%@", [[NSCalendarDate calendarDate] activeSyncRepresentationInContext: context]]; + [s appendFormat: @"%@", [[NSCalendarDate dateWithTimeIntervalSince1970: time] activeSyncRepresentationInContext: context]]; + + [s appendFormat: @""]; + [s appendFormat: @""]; + [s appendFormat: @"%d", (OofState) ? 1 : 0]; + [s appendFormat: @"%@", [vacationOptions objectForKey: @"autoReplyText"]]; + [s appendFormat: @"TEXT"]; + [s appendFormat: @""]; + + [s appendFormat: @""]; + [s appendFormat: @""]; + [s appendFormat: @"0"]; + [s appendFormat: @""]; + [s appendFormat: @""]; + + [s appendFormat: @""]; + [s appendFormat: @""]; + [s appendFormat: @"0"]; + [s appendFormat: @""]; + [s appendFormat: @""]; + + [s appendString: @""]; + [s appendString: @""]; + } + } + + if ([(id)[[(id)[theDocumentElement getElementsByTagName: @"Oof"] lastObject] getElementsByTagName: @"Set"] lastObject]) + { + dd = [[context activeUser] domainDefaults]; + if ([dd vacationEnabled]) + { + setElements = [(id)[[(id)[theDocumentElement getElementsByTagName: @"Oof"] lastObject] getElementsByTagName: @"Set"] lastObject]; + OofState = [[[(id)[setElements getElementsByTagName: @"OofState"] lastObject] textValue] intValue]; + OofMessages = (id)[setElements getElementsByTagName: @"OofMessage"]; + + autoReplyText = [NSMutableString string]; + + for (i = 0; i < [OofMessages count]; i++) + { + if ([(id)[[OofMessages objectAtIndex: i] getElementsByTagName: @"AppliesToInternal"] lastObject]) + { + autoReplyText = [[(id)[[OofMessages objectAtIndex: i] getElementsByTagName: @"ReplyMessage"] lastObject] textValue]; + break; + } + } + + vacationOptions = [[[[context activeUser] userDefaults] vacationOptions] mutableCopy]; + + if (!vacationOptions) + vacationOptions = [NSMutableDictionary new]; + + [vacationOptions setObject: [NSNumber numberWithBool: (OofState > 0) ? YES : NO] + forKey: @"enabled"]; + + [vacationOptions setObject: [NSNumber numberWithBool: (OofState == 2) ? YES : NO] + forKey: @"endDateEnabled"]; + + endDate = [[[(id)[setElements getElementsByTagName: @"EndTime"] lastObject] textValue] calendarDate]; + + if (endDate) + [vacationOptions setObject: [NSNumber numberWithInt: [endDate timeIntervalSince1970]] forKey: @"endDate"]; + + if (autoReplyText) + [vacationOptions setObject: autoReplyText forKey: @"autoReplyText"]; + + [[[context activeUser] userDefaults] setVacationOptions: vacationOptions]; + [[[context activeUser] userDefaults] synchronize]; + + [s appendString: @"1"]; + } + } + [s appendString: @""]; d = [[s dataUsingEncoding: NSUTF8StringEncoding] xml2wbxml];