From eeec8328c067c34d3583304874da9d685ca63c07 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Fri, 31 Aug 2018 09:31:18 -0400 Subject: [PATCH] Handle exception when saving calendar properties --- UI/Scheduler/UIxCalendarProperties.m | 119 +++++++++++++++------------ 1 file changed, 67 insertions(+), 52 deletions(-) diff --git a/UI/Scheduler/UIxCalendarProperties.m b/UI/Scheduler/UIxCalendarProperties.m index 43d168fe2..3932c2983 100644 --- a/UI/Scheduler/UIxCalendarProperties.m +++ b/UI/Scheduler/UIxCalendarProperties.m @@ -1,6 +1,6 @@ /* UIxCalendarProperties.m - this file is part of SOGo * - * Copyright (C) 2008-2015 Inverse inc. + * Copyright (C) 2008-2018 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,8 +21,10 @@ #import #import +#import #import +#import #import #import @@ -73,65 +75,78 @@ - (WOResponse *) savePropertiesAction { WORequest *request; - NSDictionary *params; + WOResponse *response; + NSDictionary *params, *message; id o, values; request = [context request]; params = [[request contentAsString] objectFromJSONString]; + response = [self responseWith204]; - o = [params objectForKey: @"name"]; - if ([o isKindOfClass: [NSString class]]) - [calendar renameTo: o]; - - o = [params objectForKey: @"color"]; - if ([o isKindOfClass: [NSString class]]) - [calendar setCalendarColor: o]; - - o = [params objectForKey: @"includeInFreeBusy"]; - if ([o isKindOfClass: [NSNumber class]]) - [calendar setIncludeInFreeBusy: [o boolValue]]; - - o = [params objectForKey: @"showCalendarAlarms"]; - if ([o isKindOfClass: [NSNumber class]]) - [calendar setShowCalendarAlarms: [o boolValue]]; - - o = [params objectForKey: @"showCalendarTasks"]; - if ([o isKindOfClass: [NSNumber class]]) - [calendar setShowCalendarTasks: [o boolValue]]; - - o = [params objectForKey: @"showCalendarTasks"]; - if ([o isKindOfClass: [NSNumber class]]) - [calendar setShowCalendarTasks: [o boolValue]]; - - o = [params objectForKey: @"synchronize"]; - if ([o isKindOfClass: [NSNumber class]]) - [calendar setSynchronize: [o boolValue]]; - - o = [params objectForKey: @"reloadOnLogin"]; - if ([o isKindOfClass: [NSNumber class]] && [calendar isKindOfClass: [SOGoWebAppointmentFolder class]]) - [(SOGoWebAppointmentFolder *) calendar setReloadOnLogin: [o boolValue]]; - - values = [params objectForKey: @"notifications"]; - if ([values isKindOfClass: [NSDictionary class]]) + NS_DURING { - o = [values objectForKey: @"notifyOnPersonalModifications"]; - if ([o isKindOfClass: [NSNumber class]]) - [calendar setNotifyOnPersonalModifications: [o boolValue]]; - - o = [values objectForKey: @"notifyOnExternalModifications"]; - if ([o isKindOfClass: [NSNumber class]]) - [calendar setNotifyOnExternalModifications: [o boolValue]]; - - o = [values objectForKey: @"notifyUserOnPersonalModifications"]; - if ([o isKindOfClass: [NSNumber class]]) - [calendar setNotifyUserOnPersonalModifications: [o boolValue]]; - - o = [values objectForKey: @"notifiedUserOnPersonalModifications"]; + o = [params objectForKey: @"name"]; if ([o isKindOfClass: [NSString class]]) - [calendar setNotifiedUserOnPersonalModifications: o]; - } + [calendar renameTo: o]; - return [self responseWith204]; + o = [params objectForKey: @"color"]; + if ([o isKindOfClass: [NSString class]]) + [calendar setCalendarColor: o]; + + o = [params objectForKey: @"includeInFreeBusy"]; + if ([o isKindOfClass: [NSNumber class]]) + [calendar setIncludeInFreeBusy: [o boolValue]]; + + o = [params objectForKey: @"showCalendarAlarms"]; + if ([o isKindOfClass: [NSNumber class]]) + [calendar setShowCalendarAlarms: [o boolValue]]; + + o = [params objectForKey: @"showCalendarTasks"]; + if ([o isKindOfClass: [NSNumber class]]) + [calendar setShowCalendarTasks: [o boolValue]]; + + o = [params objectForKey: @"showCalendarTasks"]; + if ([o isKindOfClass: [NSNumber class]]) + [calendar setShowCalendarTasks: [o boolValue]]; + + o = [params objectForKey: @"synchronize"]; + if ([o isKindOfClass: [NSNumber class]]) + [calendar setSynchronize: [o boolValue]]; + + o = [params objectForKey: @"reloadOnLogin"]; + if ([o isKindOfClass: [NSNumber class]] && [calendar isKindOfClass: [SOGoWebAppointmentFolder class]]) + [(SOGoWebAppointmentFolder *) calendar setReloadOnLogin: [o boolValue]]; + + values = [params objectForKey: @"notifications"]; + if ([values isKindOfClass: [NSDictionary class]]) + { + o = [values objectForKey: @"notifyOnPersonalModifications"]; + if ([o isKindOfClass: [NSNumber class]]) + [calendar setNotifyOnPersonalModifications: [o boolValue]]; + + o = [values objectForKey: @"notifyOnExternalModifications"]; + if ([o isKindOfClass: [NSNumber class]]) + [calendar setNotifyOnExternalModifications: [o boolValue]]; + + o = [values objectForKey: @"notifyUserOnPersonalModifications"]; + if ([o isKindOfClass: [NSNumber class]]) + [calendar setNotifyUserOnPersonalModifications: [o boolValue]]; + + o = [values objectForKey: @"notifiedUserOnPersonalModifications"]; + if ([o isKindOfClass: [NSString class]]) + [calendar setNotifiedUserOnPersonalModifications: o]; + } + } + NS_HANDLER + { + message = [NSDictionary dictionaryWithObject: [localException reason] forKey: @"message"]; + response = [self responseWithStatus: 400 /* Bad Request */ + andString: [message jsonRepresentation]]; + + } + NS_ENDHANDLER; + + return response; } @end