]> err.no Git - scalable-opengroupware.org/commitdiff
git-svn-id: http://svn.opengroupware.org/SOGo/trunk@246 d1b88da0-ebda-0310-925b-ed51d...
authorhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Mon, 16 Aug 2004 09:24:40 +0000 (09:24 +0000)
committerhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Mon, 16 Aug 2004 09:24:40 +0000 (09:24 +0000)
SOGo/SoObjects/Appointments/ChangeLog
SOGo/SoObjects/Appointments/SOGoAppointmentFolder.h
SOGo/SoObjects/Appointments/SOGoAppointmentFolder.m
SOGo/SoObjects/Appointments/SOGoAppointmentObject.h
SOGo/SoObjects/Appointments/SOGoAppointmentObject.m
SOGo/SoObjects/Appointments/Version
SOGo/UI/Scheduler/UIxAppointmentProposal.wox

index 806892590f311ba82a1259a9c15718efeacd98e3..099263e4d512234e97394d2539bfa5628147d736 100644 (file)
@@ -1,5 +1,9 @@
 2004-08-16  Helge Hess  <helge.hess@skyrix.com>
 
+       * SOGoAppointmentObject.m, SOGoAppointmentFolder.m: moved calendar
+         folder lookup methods to folder class (the object uses its container
+         to lookup the folder) (v0.9.9)
+
        * SOGoAppointmentObject.m: finished multi folder storage methods
          (v0.9.8)
 
index 819a7b7927b568db4d3ebca0615dc474a9a66f2d..3bd0874dfcee16bb18fa229cf3f41d43725768c6 100644 (file)
 
 - (NSString *)baseURLForAptWithUID:(NSString *)_uid inContext:(id)_ctx;
 
+/* folder management */
+
+- (id)lookupHomeFolderForUID:(NSString *)_uid inContext:(id)_ctx;
+
+- (NSArray *)lookupCalendarFoldersForUIDs:(NSArray *)_uids inContext:(id)_ctx;
+
+- (NSArray *)uidsFromICalPersons:(NSArray *)_persons;
+- (NSArray *)lookupCalendarFoldersForICalPerson:(NSArray *)_persons
+  inContext:(id)_ctx;
+
 @end
 
 #endif /* __Appointments_SOGoAppointmentFolder_H__ */
index 320c35e8ec538ea01e1187897ef84e1324b992ae..24f7b923731f6a87724df76f9371e0810a920ed3 100644 (file)
@@ -21,7 +21,9 @@
 // $Id$
 
 #include "SOGoAppointmentFolder.h"
+#include <SOGoLogic/AgenorUserManager.h>
 #include <OGoContentStore/OCSFolder.h>
+#include <NGiCal/NGiCal.h>
 #include "common.h"
 #include <unistd.h>
 #include <stdlib.h>
@@ -232,6 +234,119 @@ static NSTimeZone *MET = nil;
   return [url stringByAppendingString:_uid];
 }
 
+/* folder management */
+
+- (id)lookupHomeFolderForUID:(NSString *)_uid inContext:(id)_ctx {
+  // TODO: DUP to SOGoGroupFolder
+  NSException *error = nil;
+  NSArray     *path;
+  id          ctx, result;
+
+  if (![_uid isNotNull])
+    return nil;
+  
+  if (_ctx == nil) _ctx = [[WOApplication application] context];
+  
+  /* create subcontext, so that we don't destroy our environment */
+  
+  if ((ctx = [_ctx createSubContext]) == nil) {
+    [self logWithFormat:@"ERROR: could not create SOPE subcontext!"];
+    return nil;
+  }
+  
+  /* build path */
+  
+  path = _uid != nil ? [NSArray arrayWithObjects:&_uid count:1] : nil;
+  
+  /* traverse path */
+  
+  result = [[ctx application] traversePathArray:path inContext:ctx
+                             error:&error acquire:NO];
+  if (error != nil) {
+    [self logWithFormat:@"ERROR: folder lookup failed (uid=%@): %@",
+           _uid, error];
+    return nil;
+  }
+  
+  [self debugWithFormat:@"Note: got folder for uid %@ path %@: %@",
+         _uid, [path componentsJoinedByString:@"=>"], result];
+  return result;
+}
+
+- (NSArray *)lookupCalendarFoldersForUIDs:(NSArray *)_uids inContext:(id)_ctx {
+  /* Note: can return NSNull objects in the array! */
+  NSMutableArray *folders;
+  NSEnumerator *e;
+  NSString     *uid;
+  
+  if ([_uids count] == 0) return nil;
+  folders = [NSMutableArray arrayWithCapacity:16];
+  e = [_uids objectEnumerator];
+  while ((uid = [e nextObject])) {
+    id folder;
+    
+    folder = [self lookupHomeFolderForUID:uid inContext:nil];
+    if ([folder isNotNull]) {
+      folder = [folder lookupName:@"Calendar" inContext:nil acquire:NO];
+      if ([folder isKindOfClass:[NSException class]])
+       folder = nil;
+    }
+    if (![folder isNotNull])
+      [self logWithFormat:@"Note: did not find folder for uid: '%@'", uid];
+    
+    /* Note: intentionally add 'null' folders to allow a mapping */
+    [folders addObject:folder ? folder : [NSNull null]];
+  }
+  return folders;
+}
+
+- (NSArray *)uidsFromICalPersons:(NSArray *)_persons {
+  /* Note: can return NSNull objects in the array! */
+  NSMutableArray    *uids;
+  AgenorUserManager *um;
+  unsigned i, count;
+  
+  if (_persons == nil)
+    return nil;
+  
+  count = [_persons count];
+  uids  = [NSMutableArray arrayWithCapacity:count + 1];
+  um    = [AgenorUserManager sharedUserManager];
+  
+  for (i = 0; i < count; i++) {
+    iCalPerson *person;
+    NSString   *email;
+    NSString   *uid;
+    
+    person = [_persons objectAtIndex:i];
+    email  = [person email];
+    if ([email isNotNull]) {
+      uid = [um getUIDForEmail:email];
+      if ([uid isNotNull]) {
+       if ([uid hasPrefix:@"mailto:"])
+         uid = [uid substringFromIndex:7];
+      }
+    }
+    else
+      uid = nil;
+    
+    [uids addObject:(uid != nil ? uid : (id)[NSNull null])];
+  }
+  return uids;
+}
+
+- (NSArray *)lookupCalendarFoldersForICalPerson:(NSArray *)_persons
+  inContext:(id)_ctx
+{
+  /* Note: can return NSNull objects in the array! */
+  NSArray *uids;
+
+  if ((uids = [self uidsFromICalPersons:_persons]) == nil)
+    return nil;
+  
+  return [self lookupCalendarFoldersForUIDs:uids inContext:_ctx];
+}
+
 /* GET */
 
 - (id)GETAction:(WOContext *)_ctx {
index e4d5beeea51e1f7a8104ca159aaf78ce5a0d3b47..feb854d5b1117cd42ec0601ef52510e76ac2bd9e 100644 (file)
@@ -36,7 +36,7 @@
         appointments with an externally generated unique key.
 */
 
-@class NSString, NSException;
+@class NSString, NSArray, NSException;
 
 @interface SOGoAppointmentObject : SOGoContentObject
 {
 
 - (NSString *)iCalString;
 
+/* folder management */
+
+- (id)lookupHomeFolderForUID:(NSString *)_uid inContext:(id)_ctx;
+- (NSArray *)lookupCalendarFoldersForUIDs:(NSArray *)_uids inContext:(id)_ctx;
+
 /* raw saving */
 
 - (NSException *)primarySaveContentString:(NSString *)_iCalString;
index 0c30e0898fea6ef8a26c80501e1552c37d6c2fed..badce9c45f8e93c325f101961c6eb3bb16b4c063 100644 (file)
@@ -42,7 +42,7 @@
 
 - (NSArray *)attendeeUIDsFromAppointment:(SOGoAppointment *)_apt {
   AgenorUserManager *um;
-  NSMutableArray *uids;
+  NSMutableArray    *uids;
   NSArray  *attendees;
   unsigned i, count;
   NSString *email, *uid;
@@ -56,7 +56,7 @@
   uids = [NSMutableArray arrayWithCapacity:count + 1];
   
   um = [AgenorUserManager sharedUserManager];
-
+  
   /* add organizer */
   
   email = [[_apt organizer] email];
 
 /* folder management */
 
-- (id)_primaryLookupFolderForUID:(NSString *)_uid inContext:(id)_ctx {
-  // TODO: DUP to SOGoGroupFolder
-  NSException *error = nil;
-  NSArray     *path;
-  id          ctx, result;
-  
-  if (_ctx == nil) _ctx = [[WOApplication application] context];
-  
-  /* create subcontext, so that we don't destroy our environment */
-  
-  if ((ctx = [_ctx createSubContext]) == nil) {
-    [self logWithFormat:@"ERROR: could not create SOPE subcontext!"];
-    return nil;
-  }
-  
-  /* build path */
-  
-  path = _uid != nil ? [NSArray arrayWithObjects:&_uid count:1] : nil;
-  
-  /* traverse path */
-  
-  result = [[ctx application] traversePathArray:path inContext:ctx
-                             error:&error acquire:NO];
-  if (error != nil) {
-    [self logWithFormat:@"ERROR: folder lookup failed (uid=%@): %@",
-           _uid, error];
-    return nil;
-  }
-  
-  [self debugWithFormat:@"Note: got folder for uid %@ path %@: %@",
-         _uid, [path componentsJoinedByString:@"=>"], result];
-  return result;
+- (id)lookupHomeFolderForUID:(NSString *)_uid inContext:(id)_ctx {
+  return [[self container] lookupHomeFolderForUID:_uid inContext:_ctx];
 }
 - (NSArray *)lookupCalendarFoldersForUIDs:(NSArray *)_uids inContext:(id)_ctx {
-  NSMutableArray *folders;
-  NSEnumerator *e;
-  NSString     *uid;
-  
-  if ([_uids count] == 0) return nil;
-  folders = [NSMutableArray arrayWithCapacity:16];
-  e = [_uids objectEnumerator];
-  while ((uid = [e nextObject])) {
-    id folder;
-    
-    folder = [self _primaryLookupFolderForUID:uid inContext:nil];
-    folder = [folder lookupName:@"Calendar" inContext:nil acquire:NO];
-    if (![folder isNotNull]) {
-      [self logWithFormat:@"Note: did not find folder for uid: '%@'", uid];
-      continue;
-    }
-
-    [folders addObject:folder];
-  }
-  return folders;
+  return [[self container] lookupCalendarFoldersForUIDs:_uids inContext:_ctx];
 }
 
 /* store in all the other folders */
   while ((folder = [e nextObject])) {
     NSException           *error;
     SOGoAppointmentObject *apt;
-
+    
+    if (![folder isNotNull]) /* no folder was found for given UID */
+      continue;
+    
     apt = [folder lookupName:[self nameInContainer] inContext:ctx
                  acquire:NO];
     if (![apt isNotNull]) {
index 4ae9cc8ef19a020a9044f7ebfa7f4c8be6754990..5099e3e0974aff09ab786266fe47d76cbb5ee60f 100644 (file)
@@ -1,3 +1,3 @@
 # $Id: Version,v 1.9 2004/05/19 14:30:45 helge Exp $
 
-SUBMINOR_VERSION:=8
+SUBMINOR_VERSION:=9
index 323ca06359b682af7d78cc4a986767c8b732c5ea..42ee2516b07c2ecfb48c0e20e5b980f37e210374 100644 (file)
@@ -59,7 +59,7 @@
                       <var:component className="UIxDatePickerScript" />
                       <var:component className="UIxDatePicker"
                                      const:dateID="startDate"
-                                     date="aptStartDate"
+                                     date="startDate"
                                      label:label="browse start date"
                       />
                     </span>
@@ -73,7 +73,7 @@
                   <td align="left" bgcolor="#FFFFF0" class="aptview_text" >
                     <var:component className="UIxDatePicker"
                                    const:dateID="endDate"
-                                   date="aptEndDate"
+                                   date="endDate"
                                    label:label="browse end date"
                     />
                   </td>