diff --git a/SOPE/NGCards/iCalRecurrenceRule.h b/SOPE/NGCards/iCalRecurrenceRule.h index ef39c3f14..0f8a728d3 100644 --- a/SOPE/NGCards/iCalRecurrenceRule.h +++ b/SOPE/NGCards/iCalRecurrenceRule.h @@ -102,6 +102,7 @@ extern NSString *iCalWeekDayString[]; - (int) repeatCount; - (void) setUntilDate: (NSCalendarDate *) _untilDate; +- (void) setUntil: (NSString *) _until; - (NSCalendarDate *) untilDate; - (BOOL) isInfinite; diff --git a/SoObjects/Appointments/iCalRepeatableEntityObject+SOGo.m b/SoObjects/Appointments/iCalRepeatableEntityObject+SOGo.m index 19bb1a536..9b59d2fdb 100644 --- a/SoObjects/Appointments/iCalRepeatableEntityObject+SOGo.m +++ b/SoObjects/Appointments/iCalRepeatableEntityObject+SOGo.m @@ -1,6 +1,6 @@ /* iCalRepeatableEntityObject+SOGo.m - this file is part of SOGo * - * Copyright (C) 2007-2017 Inverse inc. + * Copyright (C) 2007-2022 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 @@ -18,6 +18,7 @@ * Boston, MA 02111-1307, USA. */ +#import #import #import @@ -125,6 +126,17 @@ ud = [[context activeUser] userDefaults]; timeZone = [ud timeZone]; [untilDate setTimeZone: timeZone]; + + if ([(iCalEvent *)self isAllDay]) + { + NSInteger offset; + + // Convert the dates to the user's timezone + offset = [timeZone secondsFromGMTForDate: untilDate]; + untilDate = [untilDate dateByAddingYears:0 months:0 days:0 hours:0 minutes:0 + seconds:-offset]; + } + [repeat setObject: [untilDate iso8601DateString] forKey: @"until"]; } if ([[rule byDay] length]) @@ -260,14 +272,21 @@ calendarFormat: @"%Y-%m-%d"]; if (date) { - // Adjust timezone - ud = [[context activeUser] userDefaults]; - date = [NSCalendarDate dateWithYear: [date yearOfCommonEra] - month: [date monthOfYear] - day: [date dayOfMonth] - hour: 0 minute: 0 second: 0 - timeZone: [ud timeZone]]; - [rule setUntilDate: date]; + if (isAllDay) + { + [rule setUntil: [date descriptionWithCalendarFormat: @"%Y%m%d"]]; + } + else + { + // Adjust timezone + ud = [[context activeUser] userDefaults]; + date = [NSCalendarDate dateWithYear: [date yearOfCommonEra] + month: [date monthOfYear] + day: [date dayOfMonth] + hour: 0 minute: 0 second: 0 + timeZone: [ud timeZone]]; + [rule setUntilDate: date]; + } } } diff --git a/UI/Scheduler/UIxAppointmentEditor.m b/UI/Scheduler/UIxAppointmentEditor.m index 92d0d9e5a..54ff083dc 100644 --- a/UI/Scheduler/UIxAppointmentEditor.m +++ b/UI/Scheduler/UIxAppointmentEditor.m @@ -238,7 +238,10 @@ hours:[date hourOfDay] minutes:[date minuteOfHour] seconds:0]; - [rule setUntilDate: untilDate]; + if ([event isAllDay]) + [rule setUntil: [untilDate descriptionWithCalendarFormat: @"%Y%m%d"]]; + else + [rule setUntilDate: untilDate]; [date release]; } }