]> err.no Git - scalable-opengroupware.org/blobdiff - UI/Scheduler/UIxAppointmentEditor.m
git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1163 d1b88da0-ebda-0310...
[scalable-opengroupware.org] / UI / Scheduler / UIxAppointmentEditor.m
index 3f1fa9b0718ed522d7410808ea1b2d783f9dfb93..f4f041979508939748be44434a7fd7543f8e2bab 100644 (file)
@@ -20,6 +20,8 @@
  * Boston, MA 02111-1307, USA.
  */
 
+#include <math.h>
+
 #import <NGObjWeb/SoObject.h>
 #import <NGObjWeb/WORequest.h>
 #import <NGObjWeb/NSException+HTTP.h>
@@ -28,7 +30,6 @@
 #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>
@@ -47,6 +48,7 @@
       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"];
 }