* Boston, MA 02111-1307, USA.
*/
+#include <math.h>
+
#import <NGObjWeb/SoObject.h>
#import <NGObjWeb/WORequest.h>
#import <NGObjWeb/NSException+HTTP.h>
#import <NGCards/iCalEvent.h>
#import <NGCards/iCalPerson.h>
-#import <SoObjects/SOGo/AgenorUserManager.h>
#import <SoObjects/SOGo/SOGoUser.h>
#import <SoObjects/SOGo/SOGoContentObject.h>
#import <SoObjects/Appointments/SOGoAppointmentFolder.h>
aptEndDate = nil;
item = nil;
event = nil;
+ isAllDay = NO;
}
return self;
[[self clientObject] baseURL]];
}
-- (NSString *) _toolbarForCalObject
-{
- SOGoUser *currentUser;
- SOGoAppointmentObject *clientObject;
- NSString *filename, *email;
- iCalPerson *person;
- iCalPersonPartStat participationStatus;
-
- clientObject = [self clientObject];
- currentUser = [[self context] activeUser];
- email = [currentUser email];
- if ([clientObject isOrganizer: email
- orOwner: [currentUser login]])
- filename = @"SOGoAppointmentObject.toolbar";
- else
- {
- if ([clientObject isParticipant: email])
- {
- person = [[clientObject component: NO] findParticipantWithEmail: email];
- participationStatus = [person participationStatus];
- if (participationStatus == iCalPersonPartStatAccepted)
- filename = @"SOGoAppointmentObjectDecline.toolbar";
- else if (participationStatus == iCalPersonPartStatDeclined)
- filename = @"SOGoAppointmentObjectAccept.toolbar";
- else
- filename = @"SOGoAppointmentObjectAcceptOrDecline.toolbar";
- }
- else
- filename = @"SOGoComponentClose.toolbar";
- }
-
- return filename;
-}
-
-- (NSString *) toolbar
-{
- return ([self _toolbarForCalObject]);
-}
-
/* 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"];
}