* Boston, MA 02111-1307, USA.
*/
+#include <math.h>
+
#import <NGObjWeb/SoObject.h>
#import <NGObjWeb/WORequest.h>
#import <NGObjWeb/NSException+HTTP.h>
aptEndDate = nil;
item = nil;
event = nil;
+ isAllDay = NO;
}
return self;
/* icalendar values */
- (BOOL) isAllDay
{
- return NO;
+ NSString *hm;
+
+ hm = [self queryParameterForKey: @"hm"];
+
+ return (isAllDay
+ || (hm && [hm isEqualToString: @"allday"]));
}
- (void) setIsAllDay: (BOOL) newIsAllDay
{
+ isAllDay = newIsAllDay;
}
- (void) setAptStartDate: (NSCalendarDate *) newAptStartDate
if (event)
{
startDate = [event startDate];
- endDate = [event endDate];
+ isAllDay = [event isAllDay];
+ if (isAllDay)
+ endDate = [[event endDate] dateByAddingYears: 0 months: 0 days: -1];
+ else
+ endDate = [event endDate];
}
else
{
ASSIGN (aptStartDate, startDate);
ASSIGN (aptEndDate, endDate);
+
/* here comes the code for initializing repeat, reminder and isAllDay... */
return self;
iCalString = [[clientObject calendar: NO] versitString];
[clientObject saveContentString: iCalString];
- return [self jsCloseWithRefreshMethod: @"refreshAppointmentsAndDisplay()"];
+ return [self jsCloseWithRefreshMethod: @"refreshEventsAndDisplay()"];
}
- (BOOL) shouldTakeValuesFromRequest: (WORequest *) request
inContext: (WOContext*) context
{
+ NSString *actionName;
+
+ actionName = [[request requestHandlerPath] lastPathComponent];
+
return ([[self clientObject] isKindOfClass: [SOGoAppointmentObject class]]
- && [[request method] isEqualToString: @"POST"]);
+ && [actionName hasPrefix: @"save"]);
}
- (void) takeValuesFromRequest: (WORequest *) _rq
inContext: (WOContext *) _ctx
{
SOGoAppointmentObject *clientObject;
+ int nbrDays;
clientObject = [self clientObject];
event = (iCalEvent *) [clientObject component: YES];
[super takeValuesFromRequest: _rq inContext: _ctx];
- [event setStartDate: aptStartDate];
- [event setEndDate: aptEndDate];
+ if (isAllDay)
+ {
+ nbrDays = ((float) abs ([aptEndDate timeIntervalSinceDate: aptStartDate])
+ / 86400) + 1;
+ [event setAllDayWithStartDate: aptStartDate
+ duration: nbrDays];
+ }
+ else
+ {
+ [event setStartDate: aptStartDate];
+ [event setEndDate: aptEndDate];
+ }
if ([clientObject isNew])
[event setTransparency: @"OPAQUE"];
}