]> err.no Git - scalable-opengroupware.org/commitdiff
fixes for SOGo bug #1069 and some API rewrite in SoObjects
authorznek <znek@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Wed, 22 Dec 2004 17:25:25 +0000 (17:25 +0000)
committerznek <znek@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Wed, 22 Dec 2004 17:25:25 +0000 (17:25 +0000)
git-svn-id: http://svn.opengroupware.org/SOGo/trunk@483 d1b88da0-ebda-0310-925b-ed51d893ca5b

15 files changed:
SOGo/SoObjects/Appointments/SOGoAppointmentFolder.h
SOGo/SoObjects/Appointments/SOGoAppointmentFolder.m
SOGo/SoObjects/Appointments/SOGoGroupAppointmentFolder.m
SOGo/SoObjects/Appointments/Version
SOGo/SoObjects/ChangeLog
SOGo/UI/Scheduler/ChangeLog
SOGo/UI/Scheduler/English.lproj/default.strings
SOGo/UI/Scheduler/UIxAppointmentEditor.m
SOGo/UI/Scheduler/UIxAppointmentEditor.wox
SOGo/UI/Scheduler/UIxAppointmentProposal.m
SOGo/UI/Scheduler/UIxCalView.m
SOGo/UI/Scheduler/Version
SOGoLogic/ChangeLog
SOGoLogic/SOGoAppointment.m
SOGoLogic/Version

index 2e62d93236ea64a0a9c9794d58beb2f9c500e1c6..112010b6235fd13a8ead6a307e593f4b79aba1a1 100644 (file)
   from:(NSCalendarDate *)_startDate
   to:(NSCalendarDate *)_endDate;
 
-- (NSArray *)fetchCoreInfosFromFolder:(OCSFolder *)_folder
+- (NSArray *)fetchFields:(NSArray *)_fields
   from:(NSCalendarDate *)_startDate
   to:(NSCalendarDate *)_endDate;
 
 - (NSArray *)fetchCoreInfosFrom:(NSCalendarDate *)_startDate
   to:(NSCalendarDate *)_endDate;
 
-- (NSArray *)fetchOverviewInfosFromFolder:(OCSFolder *)_folder
-  from:(NSCalendarDate *)_startDate
+- (NSArray *)fetchOverviewInfosFrom:(NSCalendarDate *)_startDate
   to:(NSCalendarDate *)_endDate;
 
-- (NSArray *)fetchOverviewInfosFrom:(NSCalendarDate *)_startDate
+- (NSArray *)fetchFreebusyInfosFrom:(NSCalendarDate *)_startDate
   to:(NSCalendarDate *)_endDate;
 
 /* URL generation */
index 9412ffb57d0673fd825264ba5d64289a0f953bc1..b70e5c12c690150ee4f297a9f1a9877052e028ac 100644 (file)
@@ -173,6 +173,7 @@ static NSTimeZone *MET = nil;
   return ma;
 }
 
+
 - (NSArray *)fetchFields:(NSArray *)_fields
   fromFolder:(OCSFolder *)_folder
   from:(NSCalendarDate *)_startDate
@@ -208,39 +209,56 @@ static NSTimeZone *MET = nil;
   return records;
 }
 
-- (NSArray *)fetchOverviewInfosFromFolder:(OCSFolder *)_folder
+/* override this in subclasses */
+- (NSArray *)fetchFields:(NSArray *)_fields
   from:(NSCalendarDate *)_startDate
+  to:(NSCalendarDate *)_endDate 
+{
+  OCSFolder *folder;
+  
+  if ((folder = [self ocsFolder]) == nil) {
+    [self errorWithFormat:@"(%s): missing folder for fetch!",
+      __PRETTY_FUNCTION__];
+    return nil;
+  }
+  return [self fetchFields:_fields
+               fromFolder:folder
+               from:_startDate
+               to:_endDate];
+}
+
+
+- (NSArray *)fetchFreebusyInfosFrom:(NSCalendarDate *)_startDate
   to:(NSCalendarDate *)_endDate
 {
   static NSArray *infos = nil;
   if(!infos) {
     infos = [[NSArray arrayWithObjects:@"uid", @"startdate", @"enddate",
-                                       @"title", @"location", @"orgmail",
-                                       @"status", @"ispublic", @"iscycle",
-                                       @"isallday",
                                        nil] retain];
   }
   return [self fetchFields:infos
-               fromFolder:_folder
                from:_startDate
                to:_endDate];
 }
 
+
 - (NSArray *)fetchOverviewInfosFrom:(NSCalendarDate *)_startDate
   to:(NSCalendarDate *)_endDate
 {
-  OCSFolder *folder;
-  
-  if ((folder = [self ocsFolder]) == nil) {
-    [self errorWithFormat:@"(%s): missing folder for fetch!",
-                            __PRETTY_FUNCTION__];
-    return nil;
+  static NSArray *infos = nil;
+  if(!infos) {
+    infos = [[NSArray arrayWithObjects:@"uid", @"startdate", @"enddate",
+                                       @"title", @"location", @"orgmail",
+                                       @"status", @"ispublic", @"iscycle",
+                                       @"isallday",
+                                       nil] retain];
   }
-  return [self fetchOverviewInfosFromFolder:folder from:_startDate to:_endDate];
+  return [self fetchFields:infos
+               from:_startDate
+               to:_endDate];
 }
 
-- (NSArray *)fetchCoreInfosFromFolder:(OCSFolder *)_folder
-  from:(NSCalendarDate *)_startDate
+- (NSArray *)fetchCoreInfosFrom:(NSCalendarDate *)_startDate
   to:(NSCalendarDate *)_endDate 
 {
   static NSArray *infos = nil;
@@ -254,25 +272,10 @@ static NSTimeZone *MET = nil;
                                        nil] retain];
   }
   return [self fetchFields:infos
-               fromFolder:_folder
                from:_startDate
                to:_endDate];
 }
 
-- (NSArray *)fetchCoreInfosFrom:(NSCalendarDate *)_startDate
-  to:(NSCalendarDate *)_endDate 
-{
-  /* this is the primary API */
-  OCSFolder *folder;
-  
-  if ((folder = [self ocsFolder]) == nil) {
-    [self errorWithFormat:@"(%s): missing folder for fetch!",
-                            __PRETTY_FUNCTION__];
-    return nil;
-  }
-  return [self fetchCoreInfosFromFolder:folder from:_startDate to:_endDate];
-}
-
 /* URL generation */
 
 - (NSString *)baseURLForAptWithUID:(NSString *)_uid inContext:(id)_ctx {
index 5df39046ecd9dbf644c17fa66bd31fc22d2d0a31..b5c04a2aeffa571fe42fd6f5e24105a4baa1881c 100644 (file)
   return aptFolder;
 }
 
-- (NSArray *)fetchCoreInfosFrom:(NSCalendarDate *)_startDate
-  to:(NSCalendarDate *)_endDate
-  folder:(SOGoAppointmentFolder *)_folder
+/* overridden */
+- (NSArray *)fetchFields:(NSArray *)_fields
+  from:(NSCalendarDate *)_startDate
+  to:(NSCalendarDate *)_endDate 
 {
-  if (![_folder isNotNull])
-    return nil;
-  return [_folder fetchCoreInfosFrom:_startDate to:_endDate];
-}
-
-- (NSArray *)fetchCoreInfosFrom:(NSCalendarDate *)_startDate
-  to:(NSCalendarDate *)_endDate
-  memberFolders:(NSArray *)_folders
-{
-  NSMutableArray *result;
+  NSArray             *folders;
+  NSMutableArray      *result;
   NSMutableDictionary *uidToRecord;
-  unsigned i, count;
+  unsigned            i, count;
+
+  if ((folders = [[self container] valueForKey:@"memberFolders"]) == nil) {
+    [self errorWithFormat:@"calendar container has no 'memberFolders'?!"];
+    return nil;
+  }
   
   [self resetFolderCaches];
   
-  if ((count = [_folders count]) == 0)
+  if ((count = [folders count]) == 0)
     return [NSArray array];
   
   if (self->uidToFolder == nil)
   result      = [NSMutableArray arrayWithCapacity:(7 * count)];
   for (i = 0; i < count; i++) {
     SOGoAppointmentFolder *aptFolder;
-    id           results;
-    NSDictionary *record;
-    
+    id                    results;
+    NSDictionary          *record;
+
     aptFolder = [self calendarFolderForMemberFolder:
-                       [_folders objectAtIndex:i]];
+                       [folders objectAtIndex:i]];
     if (![aptFolder isNotNull]) {
       [self debugWithFormat:@"did not find a Calendar folder in folder: %@",
-             [_folders objectAtIndex:i]];
+             [folders objectAtIndex:i]];
       continue;
     }
     
-    results = [self fetchCoreInfosFrom:_startDate to:_endDate 
-                   folder:aptFolder];
+    results = [aptFolder fetchFields:_fields
+                         from:_startDate
+                         to:_endDate];
     if (![results isNotNull]) continue;
     
     results = [results objectEnumerator];
       }
       
       if ((existingRecord = [uidToRecord objectForKey:uid]) == nil) {
-       /* record not yet in result set */
-       [uidToRecord setObject:record forKey:uid];
-       [result addObject:record];
-       
-       [self->uidToFolder setObject:aptFolder forKey:uid];
+        /* record not yet in result set */
+        [uidToRecord setObject:record forKey:uid];
+        [result addObject:record];
+        
+        [self->uidToFolder setObject:aptFolder forKey:uid];
       }
       else if ([self doesRecord:existingRecord conflictWith:record]) {
-       /* record already registered and it conflicts (diff values) */
-       NSDictionary *newRecord;
-       int idx;
-       
-       newRecord = [self _registerConflictingRecord:record 
-                         inRecord:existingRecord];
-       [uidToRecord setObject:newRecord forKey:uid];
-       
-       if ((idx = [result indexOfObject:existingRecord]) != NSNotFound)
-         [result replaceObjectAtIndex:idx withObject:newRecord];
+        /* record already registered and it conflicts (diff values) */
+        NSDictionary *newRecord;
+        int idx;
+        
+        newRecord = [self _registerConflictingRecord:record 
+                          inRecord:existingRecord];
+        [uidToRecord setObject:newRecord forKey:uid];
+        
+        if ((idx = [result indexOfObject:existingRecord]) != NSNotFound)
+          [result replaceObjectAtIndex:idx withObject:newRecord];
       }
       else {
-       /* record already registered, but values in sync, nothing to do */
+        /* record already registered, but values in sync, nothing to do */
       }
     }
   }
   return result;
 }
 
-- (NSArray *)fetchCoreInfosFrom:(NSCalendarDate *)_startDate
-  to:(NSCalendarDate *)_endDate
-{
-  /* this is the main dispatcher method */
-  NSArray *folders;
-  
-  if ((folders = [[self container] valueForKey:@"memberFolders"]) == nil) {
-    [self errorWithFormat:@"calendar container has no 'memberFolders'?!"];
-    return nil;
-  }
-  
-  return [self fetchCoreInfosFrom:_startDate to:_endDate 
-              memberFolders:folders];
-}
 
 /* URL generation */
 
index ed0844b5214e3d239647af679740e1007b124006..f8410775076ce16b370eda49013e4f4b474f3de5 100644 (file)
@@ -1,6 +1,6 @@
 # Version file
 
-SUBMINOR_VERSION:=23
+SUBMINOR_VERSION:=24
 
 # v0.9.19 requires NGiCal  v4.5.36
 # v0.9.13 requires libSOGo v0.9.26
index 104f80edb97a2711ccb5690311b44ba055bbf044..2fe96be7d1417739de71eb5462f134e9e6590bac 100644 (file)
@@ -1,3 +1,15 @@
+2004-12-22  Marcus Mueller  <znek@mulle-kybernetik.com>
+
+       * v0.9.24
+
+       * Appointments/SOGoAppointmentFolder.[hm]: added -fetchFreebusy...
+         Removed all -fetchXXXInfosFromFolder: methods. There's a single
+         method to override now, making the job in SOGoGroupAppointmentFolder
+         much easier (to understand).
+
+       * Appointments/SOGoGroupAppointmentFolder.m: added necessary fetch
+         abstraction.
+
 2004-12-17  Marcus Mueller  <znek@mulle-kybernetik.com>
 
        * Appointments/SOGoAppointmentFolder.[hm]: added "partstates" to
index 47c3242a244d2e3945dcf5233dfe65c6985ba966..105655d8c9a27d96afa73261fee54e2cbc12dddc 100644 (file)
@@ -1,3 +1,19 @@
+2004-12-22  Marcus Mueller  <znek@mulle-kybernetik.com>
+
+       * v0.9.108
+
+       * UIxAppointmentEditor.m: added "check for conflict" checkbox and
+         appropriate logic. This closes SOGo bug #1069. Localized error
+         messages.
+
+       * UIxAppointmentProposal.m: changed fetchCoreInfos... to new
+         fetchFreebusy... method.
+
+       * English.lproj/default.strings: provided localized error messages
+
+       * UIxCalView.m: rewrite of _fetchCoreInfosForUIDs: to adapt to the
+         newer API of SoObjects (this was still some old OCS based code).
+
 2004-12-21  Marcus Mueller  <znek@mulle-kybernetik.com>
 
        * v0.9.107
index 910eebed8841e31a54a4b5e06d5258fe5b8a7b72..eea0128552caf32db848f60f4121e8103e847d5d 100644 (file)
 "partStat_DELEGATED"   = "Delegated";
 "partStat_OTHER"       = "???";
 
+/* Appointments (error messages) */
+
+"Conflicts found!"             = "One or more conflicts were found.";
+"Invalid iCal data!"           = "Invalid iCalendar data ...";
+"Could not create iCal data!"  = "Could not create iCalendar data ...";
+
 
 /* Searching */
 
index 4ed4388dcc0d04452a84ee1074cb1050f332460c..67af9b86c02e1b0643488189b317f83eb5bc1663 100644 (file)
   NSString       *title;
   NSString       *location;
   NSString       *comment;
-  NSArray        *participants; /* array of iCalPerson's */
-  NSArray        *resources;    /* array of iCalPerson's */
+  NSArray        *participants;     /* array of iCalPerson's */
+  NSArray        *resources;        /* array of iCalPerson's */
   NSString       *priority;
   NSArray        *categories;
   NSString       *accessClass;
-  BOOL           isPrivate;     /* default: NO */
+  BOOL           isPrivate;         /* default: NO */
+  BOOL           checkForConflicts; /* default: NO */
 }
 
 - (NSString *)iCalStringTemplate;
@@ -54,6 +55,9 @@
 - (void)setIsPrivate:(BOOL)_yn;
 - (void)setAccessClass:(NSString *)_class;
 
+- (void)setCheckForConflicts:(BOOL)_checkForConflicts;
+- (BOOL)checkForConflicts;
+  
 - (NSString *)_completeURIForMethod:(NSString *)_method;
 
 - (NSArray *)getICalPersonsFromFormValues:(NSArray *)_values
 @end
 
 #include "common.h"
+#include <NGiCal/NGiCal.h>
+#include <NGExtensions/NGCalendarDateRange.h>
 #include <SOGoUI/SOGoDateFormatter.h>
 #include <SOGoLogic/SOGoAppointment.h>
 #include <Appointments/SOGoAppointmentFolder.h>
 #include <Appointments/SOGoAppointmentObject.h>
-#include <NGiCal/NGiCal.h>
 #include <SOGoLogic/AgenorUserManager.h>
 #include "iCalPerson+UIx.h"
 #include "UIxComponent+Agenor.h"
@@ -90,6 +95,7 @@
   self = [super init];
   if(self) {
     [self setIsPrivate:NO];
+    [self setCheckForConflicts:NO];
   }
   return self;
 }
     [self setAccessClass:@"PUBLIC"];
   self->isPrivate = _yn;
 }
-
 - (BOOL)isPrivate {
   return self->isPrivate;
 }
 
+- (void)setCheckForConflicts:(BOOL)_checkForConflicts {
+  self->checkForConflicts = _checkForConflicts;
+}
+- (BOOL)checkForConflicts {
+  return self->checkForConflicts;
+}
+
 
 /* transparency */
 
 }
 
 
+/* conflict management */
+
+- (BOOL)containsConflict:(SOGoAppointment *)_apt {
+  NSArray               *attendees, *uids;
+  SOGoAppointmentFolder *groupCalendar;
+  NSArray               *infos;
+  NSArray               *ranges;
+  id                    folder;
+
+  [self logWithFormat:@"search from %@ to %@", 
+         [_apt startDate], [_apt endDate]];
+
+  folder    = [[self clientObject] container];
+  attendees = [_apt attendees];
+  uids      = [folder uidsFromICalPersons:attendees];
+  if ([uids count] == 0) {
+    [self logWithFormat:@"Note: no UIDs selected."];
+    return NO;
+  }
+
+  groupCalendar = [folder lookupGroupCalendarFolderForUIDs:uids
+                          inContext:[self context]];
+  [self debugWithFormat:@"group calendar: %@", groupCalendar];
+  
+  if (![groupCalendar respondsToSelector:@selector(fetchFreebusyInfosFrom:to:)]) {
+    [self errorWithFormat:@"invalid folder to run freebusy query on!"];
+    return NO;
+  }
+
+  infos = [groupCalendar fetchFreebusyInfosFrom:[_apt startDate]
+                         to:[_apt endDate]];
+  [self debugWithFormat:@"  process: %d events", [infos count]];
+
+  ranges = [infos arrayByCreatingDateRangesFromObjectsWithStartDateKey:@"startDate"
+                  andEndDateKey:@"endDate"];
+  ranges = [ranges arrayByCompactingContainedDateRanges];
+  [self debugWithFormat:@"  blocked ranges: %@", ranges];
+
+  return [ranges count] != 0 ? YES : NO;
+}
+
+
 /* actions */
 
 - (BOOL)shouldTakeValuesFromRequest:(WORequest *)_rq inContext:(WOContext*)_c{
   
   apt = [[SOGoAppointment alloc] initWithICalString:[self iCalString]];
   if (apt == nil) {
-    [self setErrorText:@"Invalid iCalendar data ..."]; // localize
+    NSString *s;
+    
+    s = [self labelForKey:@"Invalid iCal data!"];
+    [self setErrorText:s];
     return self;
   }
   
     [p setParticipationStatus:iCalPersonPartStatAccepted];
   }
 
+  if ([self checkForConflicts]) {
+    if ([self containsConflict:apt]) {
+      NSString *s;
+      
+      s = [self labelForKey:@"Conflicts found!"];
+      [self setErrorText:s];
+      [apt release];
+      return self;
+    }
+  }
   content = [apt iCalString];
   [apt release]; apt = nil;
   
   if (content == nil) {
-    [self setErrorText:@"Could not create iCalendar data ..."]; // localize
+    NSString *s;
+    
+    s = [self labelForKey:@"Could not create iCal data!"];
+    [self setErrorText:s];
     return self;
   }
   
index d8dbd0c79b4f34a8b5a32b3f7c84a3be7936a241..b05ca9250919ebeea9e585da8c0d517e4bd6beb4 100644 (file)
                   </span>
                 </td>
               </tr>
+              <tr valign="top">
+                <td align="right" width="15%">
+                  <span class="aptview_text">
+                    <var:string label:value="Constraints" />:
+                  </span>
+                </td>
+                <td align="left" bgcolor="#FFFFF0">
+                  <span class="aptview_text">
+                    <input type="checkbox"
+                           var:selection="checkForConflicts"
+                           var:checked="checkForConflicts"
+                    /> <var:string label:value="check for conflicts" />
+                  </span>
+                </td>
+              </tr>
             </table>
           </td>
         </tr>
index 6065c624db46add8dc1c40e233806824b0f36a53..0415de82f2d3d38c8273e00dc8bab7a3b96719b4 100644 (file)
 - (id)proposalSearchAction {
   NSArray               *attendees, *uids;
   SOGoAppointmentFolder *groupCalendar;
-  NSArray *coreInfos;
+  NSArray *infos;
   NSArray *ranges;
   
   [self logWithFormat:@"search from %@ to %@", 
                                       inContext:[self context]];
   [self debugWithFormat:@"group calendar: %@", groupCalendar];
   
-  if (![groupCalendar respondsToSelector:@selector(fetchCoreInfosFrom:to:)]) {
+  if (![groupCalendar respondsToSelector:@selector(fetchFreebusyInfosFrom:to:)]) {
     return [NSException exceptionWithHTTPStatus:500 /* Internal Error */
                        reason:@"invalid folder to run proposal query on!"];
   }
   
-  // TODO: just query startdate and enddate ... (freebusy)
-  coreInfos = [groupCalendar fetchCoreInfosFrom:[self startDate]
-                            to:[self endDate]];
-  [self debugWithFormat:@"  process: %d events", [coreInfos count]];
+  infos = [groupCalendar fetchFreebusyInfosFrom:[self startDate]
+                         to:[self endDate]];
+  [self debugWithFormat:@"  process: %d events", [infos count]];
 
-  ranges = [coreInfos arrayByCreatingDateRangesFromObjectsWithStartDateKey:
+  ranges = [infos arrayByCreatingDateRangesFromObjectsWithStartDateKey:
                        @"startDate"
                      andEndDateKey:@"endDate"];
   ranges = [ranges arrayByCompactingContainedDateRanges];
index c1e7d0d4b694000ead26ab673c65e02da63482b4..6d13a1469541eb63fc725b4be13058e760c6e55f 100644 (file)
@@ -334,45 +334,26 @@ static BOOL shouldDisplayWeekend = NO;
   ma    = [NSMutableArray arrayWithCapacity:count * 10];
   
   for (i = 0; i < count; i++) {
-    OCSFolder *folder;
-    NSString *path;
-    NSString *uid;
-    NSArray  *res;
-       
-    uid = [_uids objectAtIndex:i];
-    if ([uid length] == 0) continue;
-
-    path = [[@"/Users/" stringByAppendingString:uid]
-                       stringByAppendingString:@"/Calendar"];
-    
-    if ((folder = [[self clientObject] ocsFolderForPath:path]) == nil) {
-      [self errorWithFormat:@"did not find user: %@", uid];
-      continue;
-    }
-    
-    res = [[self clientObject] fetchOverviewInfosFromFolder:folder 
-                                                from:[self startDate]
-                               to:[self endDate]];
-    if (res == nil) {
-      [self errorWithFormat:@"fetch failed for user: %@", uid];
-      continue;
-    }
+    SOGoAppointmentFolder *folder;
+    NSArray               *res;
+    int                   j, rcount;
+
+    folder = [[self clientObject] lookupGroupCalendarFolderForUIDs:_uids
+                                  inContext:[self context]];
+    res = [folder fetchOverviewInfosFrom:[self startDate]
+                  to:[self endDate]];
 
     /* perform uniquing */
-    {
-      int j, rcount;
+    for (j = 0, rcount = [res count]; j < rcount; j++) {
+      NSDictionary *record;
       
-      for (j = 0, rcount = [res count]; j < rcount; j++) {
-        NSDictionary *record;
-        
-        record = [res objectAtIndex:j];
-    
-        if ([_uniquer containsObject:[record valueForKey:@"uid"]])
-          continue;
-       
-        [ma addObject:record];
-        [_uniquer addObject:[record valueForKey:@"uid"]];
-      }
+      record = [res objectAtIndex:j];
+  
+      if ([_uniquer containsObject:[record valueForKey:@"uid"]])
+        continue;
+
+      [ma addObject:record];
+      [_uniquer addObject:[record valueForKey:@"uid"]];
     }
   }
   return ma;
@@ -390,13 +371,16 @@ static BOOL shouldDisplayWeekend = NO;
   self->appointments =
     [[aptFolder fetchOverviewInfosFrom:[self startDate]
                 to:[self endDate]] retain];
-  
+
+  /* ZNeK: this is dead code, isn't it? -> check */
   uids = [[[[self context] request] formValueForKey:@"uids"] stringValue];
   uids = [uids length] > 0 ? [uids componentsSeparatedByString:@","] : nil;
   if ([uids count] > 0) {
     NSMutableSet *availUIDs;
     id tmp;
-    
+
+    [self errorWithFormat:@"fetchCoreInfos called for 'uids' form value"];
+
     /* make appointments unique, prefer the own "versions" */
     tmp = [self->appointments valueForKey:@"uid"];
     availUIDs = [[NSMutableSet alloc] initWithArray:tmp];
index 3d3bba2d15be0f72de1c1c24605816a9b31342c9..c10fc5798907d1081fdae53810b09fb96437002f 100644 (file)
@@ -1,6 +1,6 @@
 # $Id$
 
-SUBMINOR_VERSION:=107
+SUBMINOR_VERSION:=108
 
 # v0.9.107 requires WOExtensions v4.5.21
 # v0.9.105 requires NGObjWeb     v4.5.102
index 24f8b6b2429401c813dde47ed5ed745acc7ee6f4..a49b50e4bb16e68df9b458d8108a591ae632c7b3 100644 (file)
@@ -1,3 +1,8 @@
+2004-12-22  Marcus Mueller  <znek@mulle-kybernetik.com>
+
+       * SOGoAppointment.m: transparency is supported by NGiCal, thus fixed
+         the bogus implementation (v0.9.33)
+
 2004-12-17  Marcus Mueller  <znek@mulle-kybernetik.com>
 
        * v0.9.32
index 802e89aa3100e9750b25498b303eeff2ff3fa2d7..0d5e9f11bc3ac3953af4b6cd1a4ee42c642edf8c 100644 (file)
@@ -282,11 +282,10 @@ static NGLogger                  *logger = nil;
 }
 
 - (void)setTransparency:(NSString *)_value {
-  [self debugWithFormat:@"transparency currently unsupported by iCalEvent!"];
+  [self->event setTransparency:_value];
 }
 - (NSString *)transparency {
-  [self debugWithFormat:@"returning bogus transparency information!"];
-  return @"TRANSPARENT";
+  return [self->event transparency];
 }
 - (BOOL)isTransparent {
   return [[self transparency] isEqualToString:@"TRANSPARENT"];
index 2ab989269ad87f26a552b06917b1417ecb469116..6e58687bb7866c5aea8db8a8d423ba57137f7022 100644 (file)
@@ -1,6 +1,6 @@
 # Version file
 
-SUBMINOR_VERSION:=32
+SUBMINOR_VERSION:=33
 
 # v0.9.32 requires NGiCal        v4.5.37
 # v0.9.31 requires NGiCal        v4.5.36