diff --git a/ChangeLog b/ChangeLog index c1de9d920..18a80e335 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2007-06-07 Wolfgang Sourdeau + * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions + -_setupContext]): take the range of dates specified by the popup + into account. + * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of WODirectAction that returns WOResponse objects with the events or todos satisfying the parameters passed in the url. diff --git a/UI/Scheduler/UIxCalListingActions.m b/UI/Scheduler/UIxCalListingActions.m index 64cfdf364..246462dc4 100644 --- a/UI/Scheduler/UIxCalListingActions.m +++ b/UI/Scheduler/UIxCalListingActions.m @@ -65,6 +65,76 @@ [super dealloc]; } +- (void) _setupDatesWithPopup: (NSString *) popupValue + andUserTZ: (NSTimeZone *) userTZ +{ + NSCalendarDate *newDate; + NSString *param; + + if ([popupValue isEqualToString: @"view_today"]) + { + newDate = [NSCalendarDate calendarDate]; + [newDate setTimeZone: userTZ]; + startDate = [newDate beginOfDay]; + endDate = [newDate endOfDay]; + } + else if ([popupValue isEqualToString: @"view_all"]) + { + startDate = nil; + endDate = nil; + } + else if ([popupValue isEqualToString: @"view_next7"]) + { + newDate = [NSCalendarDate calendarDate]; + [newDate setTimeZone: userTZ]; + startDate = [newDate beginOfDay]; + endDate = [[startDate dateByAddingYears: 0 months: 0 days: 6] endOfDay]; + } + else if ([popupValue isEqualToString: @"view_next14"]) + { + newDate = [NSCalendarDate calendarDate]; + [newDate setTimeZone: userTZ]; + startDate = [newDate beginOfDay]; + endDate = [[startDate dateByAddingYears: 0 months: 0 days: 13] endOfDay]; + } + else if ([popupValue isEqualToString: @"view_next31"]) + { + newDate = [NSCalendarDate calendarDate]; + [newDate setTimeZone: userTZ]; + startDate = [newDate beginOfDay]; + endDate = [[startDate dateByAddingYears: 0 months: 0 days: 30] endOfDay]; + } + else if ([popupValue isEqualToString: @"view_thismonth"]) + { + newDate = [NSCalendarDate calendarDate]; + [newDate setTimeZone: userTZ]; + startDate = [[newDate firstDayOfMonth] beginOfDay]; + endDate = [[newDate lastDayOfMonth] endOfDay]; + } + else if ([popupValue isEqualToString: @"view_future"]) + { + newDate = [NSCalendarDate calendarDate]; + [newDate setTimeZone: userTZ]; + startDate = [newDate beginOfDay]; + endDate = [NSCalendarDate distantFuture]; + } + else if ([popupValue isEqualToString: @"view_selectedday"]) + { + param = [request formValueForKey: @"day"]; + if ([param length] > 0) + startDate = [[NSCalendarDate dateFromShortDateString: param + andShortTimeString: nil + inTimeZone: userTZ] beginOfDay]; + else + { + newDate = [NSCalendarDate calendarDate]; + [newDate setTimeZone: userTZ]; + startDate = [newDate beginOfDay]; + } + endDate = [startDate endOfDay]; + } +} + - (void) _setupContext { SOGoUser *user; @@ -76,21 +146,27 @@ userTZ = [user timeZone]; request = [context request]; - param = [request formValueForKey: @"sd"]; + param = [request formValueForKey: @"filterpopup"]; if ([param length] > 0) - startDate = [[NSCalendarDate dateFromShortDateString: param - andShortTimeString: nil - inTimeZone: userTZ] beginOfDay]; + [self _setupDatesWithPopup: param andUserTZ: userTZ]; else - startDate = nil; - - param = [request formValueForKey: @"sd"]; - if ([param length] > 0) - endDate = [[NSCalendarDate dateFromShortDateString: param - andShortTimeString: nil - inTimeZone: userTZ] endOfDay]; - else - endDate = nil; + { + param = [request formValueForKey: @"sd"]; + if ([param length] > 0) + startDate = [[NSCalendarDate dateFromShortDateString: param + andShortTimeString: nil + inTimeZone: userTZ] beginOfDay]; + else + startDate = nil; + + param = [request formValueForKey: @"sd"]; + if ([param length] > 0) + endDate = [[NSCalendarDate dateFromShortDateString: param + andShortTimeString: nil + inTimeZone: userTZ] endOfDay]; + else + endDate = nil; + } } - (void) _updatePrivacyInComponent: (NSMutableDictionary *) component @@ -222,7 +298,7 @@ [self _setupContext]; fields = [NSArray arrayWithObjects: @"c_name", @"owner", @"status", - @"startdate", @"enddate", @"location", nil]; + @"title", @"startdate", @"enddate", @"location", nil]; events = [self _fetchFields: fields forComponentOfType: @"vevent"]; return [self _responseWithData: events];