]> err.no Git - scalable-opengroupware.org/blobdiff - UI/Scheduler/UIxAppointmentEditor.m
git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1196 d1b88da0-ebda-0310...
[scalable-opengroupware.org] / UI / Scheduler / UIxAppointmentEditor.m
index a88b3f3829bfdbba85f901ded60eb519456ad2ec..de4e0c4722bffef7142a4d26930e0627125ab332 100644 (file)
@@ -29,6 +29,7 @@
 
 #import <NGCards/iCalEvent.h>
 #import <NGCards/iCalPerson.h>
+#import <NGCards/iCalRecurrenceRule.h>
 
 #import <SoObjects/SOGo/SOGoUser.h>
 #import <SoObjects/SOGo/SOGoContentObject.h>
       aptEndDate = nil;
       item = nil;
       event = nil;
+      repeat = nil;
       isAllDay = NO;
     }
 
   return self;
 }
 
+- (void) dealloc
+{
+  [item release];
+  [repeat release];
+  [aptStartDate release];
+  [aptEndDate release];
+  [super dealloc];
+}
+
 /* template values */
 - (iCalEvent *) event
 {
 
 - (void) setItem: (NSString *) newItem
 {
-  item = newItem;
+  ASSIGN (item, newItem);
 }
 
 - (NSString *) item
 //   return reminder;
 // }
 
+- (NSString *) reminder
+{
+  return @"";
+}
+
+- (void) setReminder: (NSString *) newReminder
+{
+}
+
 - (NSString *) itemReminderText
 {
   NSString *text;
 
 - (NSString *) repeat
 {
-  return @"";
+  return repeat;
 }
 
 - (void) setRepeat: (NSString *) newRepeat
 {
-}
-
-- (NSString *) reminder
-{
-  return @"";
-}
-
-- (void) setReminder: (NSString *) newReminder
-{
+  ASSIGN (repeat, newRepeat);
 }
 
 /* actions */
   NSCalendarDate *startDate, *endDate;
   NSString *duration;
   unsigned int minutes;
+  iCalRecurrenceRule *rule;
 
   event = (iCalEvent *) [[self clientObject] component: NO];
   if (event)
   ASSIGN (aptStartDate, startDate);
   ASSIGN (aptEndDate, endDate);
 
-
-  /* here comes the code for initializing repeat, reminder and isAllDay... */
+  // We initialize our repeat ivars
+  if ([event hasRecurrenceRules])
+    {
+      repeat = @"CUSTOM";
+
+      rule = [[event recurrenceRules] lastObject];
+
+      if ([rule frequency] == iCalRecurrenceFrequenceWeekly)
+       {
+         if ([rule repeatInterval] == 1)
+           repeat = @"WEEKLY";
+         else if ([rule repeatInterval] == 2)
+           repeat = @"BI-WEEKLY";
+       }
+      else if ([rule frequency] == iCalRecurrenceFrequenceDaily)
+       {
+         if ([rule byDayMask] == (iCalWeekDayMonday
+                                  | iCalWeekDayTuesday
+                                  | iCalWeekDayWednesday
+                                  | iCalWeekDayThursday
+                                  | iCalWeekDayFriday))
+           repeat = @"EVERY WEEKDAY";
+         else if (![rule byDayMask])
+           repeat = @"DAILY";
+       }
+      else if ([rule frequency] == iCalRecurrenceFrequenceMonthly
+              && [rule repeatInterval] == 1)
+       repeat = @"MONTHLY";
+      else if ([rule frequency] == iCalRecurrenceFrequenceYearly
+              && [rule repeatInterval] == 1)
+       repeat = @"YEARLY";
+    }
+  else
+    DESTROY(repeat);
 
   return self;
 }
   NSString *iCalString;
 
   clientObject = [self clientObject];
+  NSLog(@"saveAction, clientObject = %@", clientObject);
+
   iCalString = [[clientObject calendar: NO] versitString];
+
+  NSLog(@"saveAction, iCalString = %@", iCalString);
   [clientObject saveContentString: iCalString];
 
   return [self jsCloseWithRefreshMethod: @"refreshEventsAndDisplay()"];
 {
   SOGoAppointmentObject *clientObject;
   int nbrDays;
+  iCalRecurrenceRule *rule;
 
   clientObject = [self clientObject];
   event = (iCalEvent *) [clientObject component: YES];
     }
   if ([clientObject isNew])
     [event setTransparency: @"OPAQUE"];
+
+  // We remove any repeat rules
+  if (!repeat && [event hasRecurrenceRules])
+    [event removeAllRecurrenceRules];
+  else if (!([repeat caseInsensitiveCompare: @"-"] == NSOrderedSame
+            || [repeat caseInsensitiveCompare: @"CUSTOM"] == NSOrderedSame))
+    {
+      rule = [iCalRecurrenceRule new];
+
+      [rule setInterval: @"1"];
+      if ([repeat caseInsensitiveCompare: @"BI-WEEKLY"] == NSOrderedSame)
+       {
+         [rule setFrequency: iCalRecurrenceFrequenceWeekly];
+         [rule setInterval: @"2"];
+       }
+      else if ([repeat caseInsensitiveCompare: @"EVERY WEEKDAY"] == NSOrderedSame)
+       {
+         [rule setByDayMask: (iCalWeekDayMonday
+                              |iCalWeekDayTuesday
+                              |iCalWeekDayWednesday
+                              |iCalWeekDayThursday
+                              |iCalWeekDayFriday)];
+         [rule setFrequency: iCalRecurrenceFrequenceDaily];
+       }
+      else
+       [rule setFrequency:
+               (iCalRecurrenceFrequency) [rule valueForFrequency: repeat]];
+      [event setRecurrenceRules: [NSArray arrayWithObject: rule]];
+      [rule release];
+    }
 }
 
 // TODO: add tentatively