]> err.no Git - scalable-opengroupware.org/commitdiff
git-svn-id: http://svn.opengroupware.org/SOGo/trunk@174 d1b88da0-ebda-0310-925b-ed51d...
authorhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Wed, 11 Aug 2004 12:26:30 +0000 (12:26 +0000)
committerhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Wed, 11 Aug 2004 12:26:30 +0000 (12:26 +0000)
17 files changed:
SOGo/Main/TODO [new file with mode: 0644]
SOGo/Main/product.plist
SOGo/SoObjects/SOGo/ChangeLog
SOGo/SoObjects/SOGo/GNUmakefile
SOGo/SoObjects/SOGo/README
SOGo/SoObjects/SOGo/SOGoCustomGroupFolder.h [new file with mode: 0644]
SOGo/SoObjects/SOGo/SOGoCustomGroupFolder.m [new file with mode: 0644]
SOGo/SoObjects/SOGo/SOGoGroupFolder.h [new file with mode: 0644]
SOGo/SoObjects/SOGo/SOGoGroupFolder.m [new file with mode: 0644]
SOGo/SoObjects/SOGo/SOGoGroupsFolder.h [new file with mode: 0644]
SOGo/SoObjects/SOGo/SOGoGroupsFolder.m [new file with mode: 0644]
SOGo/SoObjects/SOGo/SOGoObject.h
SOGo/SoObjects/SOGo/SOGoObject.m
SOGo/SoObjects/SOGo/SOGoUserFolder.h
SOGo/SoObjects/SOGo/SOGoUserFolder.m
SOGo/SoObjects/SOGo/Version [new file with mode: 0644]
SOGo/UI/Common/UIxAppNavView.m

diff --git a/SOGo/Main/TODO b/SOGo/Main/TODO
new file mode 100644 (file)
index 0000000..b377c1e
--- /dev/null
@@ -0,0 +1,7 @@
+# $Id$
+
+- add a 'view' page for Groups (SOGoGroupsFolder)
+  (initially empty ...)
+
+- add a 'view' page for custom groups (SOGoCustomGroupFolder)
+  - or: a generic one for groups?
index d017ef2427cf60bdba0c527c259942ec36b74ca9..d2e944f51fad6db0094ee59a05e0730c36cd1eb2 100644 (file)
         };
       };
     };
+    
+    SOGoGroupsFolder = {
+      superclass    = "SOGoObject";
+      methods = {
+      };
+    };
+    SOGoGroupFolder = {
+      superclass    = "SOGoObject";
+      methods = {
+      };
+    };
+    SOGoCustomGroupFolder = {
+      superclass    = "SOGoGroupFolder";
+      methods = {
+      };
+    };
   };
 }
index 5bf70eebc2e0479af5c3cac7682f315ffbd43004..11e4c4f405ec8210aeddd6d7fe5c008d85322a8b 100644 (file)
@@ -1,3 +1,11 @@
+2004-08-11    <helge@agenor.opengroupware.org>
+
+       * v0.9.6
+
+       * SOGoUserFolder.m: added "Groups" folder name and lookup
+
+       * added: SOGoGroupsFolder, SOGoGroupFolder, SOGoCustomGroupFolder
+
 2004-07-02  Helge Hess  <helge.hess@opengroupware.org>
 
        * SOGoObject.m: added -delete method (but not yet implemented)
index de2ccd9f70a84bb4422056f0040409a97c778ea2..a0a3e95d8f6a319e09012b38eeb0c29607c220ae 100644 (file)
@@ -15,12 +15,18 @@ libSOGo_HEADER_FILES = \
        SOGoFolder.h            \
        SOGoContentObject.h     \
        SOGoUserFolder.h        \
+       SOGoGroupsFolder.h      \
+       SOGoGroupFolder.h       \
+       SOGoCustomGroupFolder.h \
 
 libSOGo_OBJC_FILES = \
        SOGoObject.m            \
        SOGoFolder.m            \
        SOGoContentObject.m     \
        SOGoUserFolder.m        \
+       SOGoGroupsFolder.m      \
+       SOGoGroupFolder.m       \
+       SOGoCustomGroupFolder.m \
 
 -include GNUmakefile.preamble
 include $(GNUSTEP_MAKEFILES)/library.make
index d7d99df101989753df2d6121fd29e52a46501911..84e5bc92b0ab87a8e61bcc36e35328d532d088bb 100644 (file)
@@ -5,7 +5,7 @@ libSOGo
 
 Common SOGo objects.
 
-Note that the SOPE objects are registered by the Main bundle products.plist.
+NOTE: the SOPE objects are registered by the Main bundle products.plist.
 
 Class Hierarchy
 ===============
@@ -14,4 +14,11 @@ Class Hierarchy
     SOGoObject
       SOGoContentObject
       SOGoFolder
-        SOGoUserFolder
+        SOGoUserFolder     - the "home" directory
+    SOGoGroupsFolder       - intermediate folder
+    SOGoGroupFolder        - a folder representing a set of people
+      SOGoCustomGroupFolder - a custom group (eg '_custom_helge,znek')
+
+TODO
+====
+- why is SOGoUserFolder an OCS folder?
diff --git a/SOGo/SoObjects/SOGo/SOGoCustomGroupFolder.h b/SOGo/SoObjects/SOGo/SOGoCustomGroupFolder.h
new file mode 100644 (file)
index 0000000..56d6884
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+  Copyright (C) 2004 SKYRIX Software AG
+
+  This file is part of OpenGroupware.org.
+
+  OGo is free software; you can redistribute it and/or modify it under
+  the terms of the GNU Lesser General Public License as published by the
+  Free Software Foundation; either version 2, or (at your option) any
+  later version.
+
+  OGo is distributed in the hope that it will be useful, but WITHOUT ANY
+  WARRANTY; without even the implied warranty of MERCHANTABILITY or
+  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
+  License for more details.
+
+  You should have received a copy of the GNU Lesser General Public
+  License along with OGo; see the file COPYING.  If not, write to the
+  Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+  02111-1307, USA.
+*/
+// $Id: SOGoCustomGroupFolder.h 107 2004-06-30 10:26:46Z helge $
+
+#ifndef __SOGo_SOGoCustomGroupFolder_H__
+#define __SOGo_SOGoCustomGroupFolder_H__
+
+#include <SOGo/SOGoGroupFolder.h>
+
+/*
+  SOGoCustomGroupFolder
+    same parent/child like SOGoGroupFolder
+
+  This is a specific group folder for 'custom' groups. Group members are
+  currently encoded as the folder name in the URL like
+    _custom_znek,helge
+*/
+
+@class NSArray;
+
+@interface SOGoCustomGroupFolder : SOGoGroupFolder
+{
+  NSArray *uids;
+}
+
+/* accessors */
+
+- (NSArray *)uids;
+
+/* pathes */
+
+@end
+
+#endif /* __SOGo_SOGoCustomGroupFolder_H__ */
diff --git a/SOGo/SoObjects/SOGo/SOGoCustomGroupFolder.m b/SOGo/SoObjects/SOGo/SOGoCustomGroupFolder.m
new file mode 100644 (file)
index 0000000..7683829
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+  Copyright (C) 2004 SKYRIX Software AG
+
+  This file is part of OpenGroupware.org.
+
+  OGo is free software; you can redistribute it and/or modify it under
+  the terms of the GNU Lesser General Public License as published by the
+  Free Software Foundation; either version 2, or (at your option) any
+  later version.
+
+  OGo is distributed in the hope that it will be useful, but WITHOUT ANY
+  WARRANTY; without even the implied warranty of MERCHANTABILITY or
+  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
+  License for more details.
+
+  You should have received a copy of the GNU Lesser General Public
+  License along with OGo; see the file COPYING.  If not, write to the
+  Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+  02111-1307, USA.
+*/
+// $Id: SOGoCustomGroupFolder.m 115 2004-06-30 11:57:37Z helge $
+
+#include "SOGoCustomGroupFolder.h"
+#include "common.h"
+
+@implementation SOGoCustomGroupFolder
+
+static NSString *SOGoUIDSeparator = @",";
+
+- (void)dealloc {
+  [self->uids release];
+  [super dealloc];
+}
+
+/* accessors */
+
+- (NSArray *)unescapeURLComponents:(NSArray *)_parts {
+#warning TODO: implement URL UID unescaping if necessary
+  // Note: remember URL encoding!
+  return _parts;
+}
+
+- (NSArray *)uids {
+  NSArray  *a;
+  NSString *s;
+  
+  if (self->uids != nil)
+    return self->uids;
+  
+  s = [self nameInContainer];
+  if (![s hasPrefix:@"_custom_"]) {
+    [self logWithFormat:@"WARNING: incorrect custom group folder name: '%@'",
+           s];
+    return nil;
+  }
+  
+  s = [s substringFromIndex:8];
+  a = [s componentsSeparatedByString:SOGoUIDSeparator];
+  a = [self unescapeURLComponents:a];
+  self->uids = [a copy];
+  
+  if ([self->uids count] < 2)
+    [self debugWithFormat:@"Note: less than two custom group members!"];
+  
+  return self->uids;
+}
+
+@end /* SOGoCustomGroupFolder */
diff --git a/SOGo/SoObjects/SOGo/SOGoGroupFolder.h b/SOGo/SoObjects/SOGo/SOGoGroupFolder.h
new file mode 100644 (file)
index 0000000..cef1d07
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+  Copyright (C) 2004 SKYRIX Software AG
+
+  This file is part of OpenGroupware.org.
+
+  OGo is free software; you can redistribute it and/or modify it under
+  the terms of the GNU Lesser General Public License as published by the
+  Free Software Foundation; either version 2, or (at your option) any
+  later version.
+
+  OGo is distributed in the hope that it will be useful, but WITHOUT ANY
+  WARRANTY; without even the implied warranty of MERCHANTABILITY or
+  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
+  License for more details.
+
+  You should have received a copy of the GNU Lesser General Public
+  License along with OGo; see the file COPYING.  If not, write to the
+  Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+  02111-1307, USA.
+*/
+// $Id: SOGoGroupFolder.h 107 2004-06-30 10:26:46Z helge $
+
+#ifndef __SOGo_SOGoGroupFolder_H__
+#define __SOGo_SOGoGroupFolder_H__
+
+#include <SOGo/SOGoObject.h>
+
+/*
+  SOGoGroupFolder
+    Parent object: the SOGoGroupsFolder
+    Child objects:
+*/
+
+@interface SOGoGroupFolder : SOGoObject
+{
+}
+
+/* accessors */
+
+- (NSArray *)uids;
+
+/* pathes */
+
+@end
+
+#endif /* __SOGo_SOGoGroupFolder_H__ */
diff --git a/SOGo/SoObjects/SOGo/SOGoGroupFolder.m b/SOGo/SoObjects/SOGo/SOGoGroupFolder.m
new file mode 100644 (file)
index 0000000..4ab8839
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+  Copyright (C) 2004 SKYRIX Software AG
+
+  This file is part of OpenGroupware.org.
+
+  OGo is free software; you can redistribute it and/or modify it under
+  the terms of the GNU Lesser General Public License as published by the
+  Free Software Foundation; either version 2, or (at your option) any
+  later version.
+
+  OGo is distributed in the hope that it will be useful, but WITHOUT ANY
+  WARRANTY; without even the implied warranty of MERCHANTABILITY or
+  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
+  License for more details.
+
+  You should have received a copy of the GNU Lesser General Public
+  License along with OGo; see the file COPYING.  If not, write to the
+  Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+  02111-1307, USA.
+*/
+// $Id: SOGoGroupFolder.m 115 2004-06-30 11:57:37Z helge $
+
+#include "SOGoGroupFolder.h"
+#include "common.h"
+
+@implementation SOGoGroupFolder
+
+- (void)dealloc {
+  [super dealloc];
+}
+
+/* accessors */
+
+/* SOPE */
+
+- (BOOL)isFolderish {
+  return YES;
+}
+
+/* looking up shared objects */
+
+- (SOGoGroupFolder *)lookupGroupFolder {
+  return [[self container] lookupGroupFolder];
+}
+
+/* pathes */
+
+/* name lookup */
+
+@end /* SOGoGroupFolder */
diff --git a/SOGo/SoObjects/SOGo/SOGoGroupsFolder.h b/SOGo/SoObjects/SOGo/SOGoGroupsFolder.h
new file mode 100644 (file)
index 0000000..fc93240
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+  Copyright (C) 2004 SKYRIX Software AG
+
+  This file is part of OpenGroupware.org.
+
+  OGo is free software; you can redistribute it and/or modify it under
+  the terms of the GNU Lesser General Public License as published by the
+  Free Software Foundation; either version 2, or (at your option) any
+  later version.
+
+  OGo is distributed in the hope that it will be useful, but WITHOUT ANY
+  WARRANTY; without even the implied warranty of MERCHANTABILITY or
+  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
+  License for more details.
+
+  You should have received a copy of the GNU Lesser General Public
+  License along with OGo; see the file COPYING.  If not, write to the
+  Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+  02111-1307, USA.
+*/
+// $Id: SOGoGroupsFolder.h 107 2004-06-30 10:26:46Z helge $
+
+#ifndef __SOGo_SOGoGroupsFolder_H__
+#define __SOGo_SOGoGroupsFolder_H__
+
+#include <SOGo/SOGoObject.h>
+
+/*
+  SOGoGroupsFolder
+    Parent object: the SOGoUserFolder
+    Child objects: SOGoGroupFolder objects
+      '_custom_*': SOGoCustomGroupFolder
+  
+  This object represents a collection of groups, its the "Groups" in such a
+  path:
+    /SOGo/so/znek/Groups/sales
+  
+  It also acts as a factory for the proper group folders, eg "custom" groups
+  (arbitary person collections) or later on cookie based configured groups or
+  groups stored in LDAP.
+*/
+
+@class NSString;
+
+@interface SOGoGroupsFolder : SOGoObject
+{
+}
+
+/* accessors */
+
+/* looking up shared objects */
+
+- (SOGoGroupsFolder *)lookupGroupsFolder;
+
+/* pathes */
+
+@end
+
+#endif /* __SOGo_SOGoGroupsFolder_H__ */
diff --git a/SOGo/SoObjects/SOGo/SOGoGroupsFolder.m b/SOGo/SoObjects/SOGo/SOGoGroupsFolder.m
new file mode 100644 (file)
index 0000000..ee71c7f
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+  Copyright (C) 2004 SKYRIX Software AG
+
+  This file is part of OpenGroupware.org.
+
+  OGo is free software; you can redistribute it and/or modify it under
+  the terms of the GNU Lesser General Public License as published by the
+  Free Software Foundation; either version 2, or (at your option) any
+  later version.
+
+  OGo is distributed in the hope that it will be useful, but WITHOUT ANY
+  WARRANTY; without even the implied warranty of MERCHANTABILITY or
+  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
+  License for more details.
+
+  You should have received a copy of the GNU Lesser General Public
+  License along with OGo; see the file COPYING.  If not, write to the
+  Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+  02111-1307, USA.
+*/
+// $Id: SOGoGroupsFolder.m 115 2004-06-30 11:57:37Z helge $
+
+#include "SOGoGroupsFolder.h"
+#include "common.h"
+
+@implementation SOGoGroupsFolder
+
+- (void)dealloc {
+  [super dealloc];
+}
+
+/* accessors */
+
+/* SOPE */
+
+- (BOOL)isFolderish {
+  return YES;
+}
+
+/* looking up shared objects */
+
+- (SOGoGroupsFolder *)lookupGroupsFolder {
+  return self;
+}
+
+/* pathes */
+
+/* name lookup */
+
+- (id)customGroup:(NSString *)_key inContext:(id)_ctx {
+  static Class groupClass = Nil;
+  id group;
+  
+  if (groupClass == Nil)
+    groupClass = NSClassFromString(@"SOGoCustomGroupFolder");
+  if (groupClass == Nil) {
+    [self logWithFormat:@"ERROR: missing SOGoCustomGroupFolder class!"];
+    return nil;
+  }
+  
+  group = [[groupClass alloc] initWithName:_key inContainer:self];
+  return [group autorelease];
+}
+
+- (id)lookupName:(NSString *)_key inContext:(id)_ctx acquire:(BOOL)_flag {
+  id obj;
+  
+  /* first check attributes directly bound to the application */
+  if ((obj = [super lookupName:_key inContext:_ctx acquire:NO]))
+    return obj;
+  
+  if ([_key hasPrefix:@"_custom_"])
+    return [self customGroup:_key inContext:_ctx];
+  
+  /* return 404 to stop acquisition */
+  return [NSException exceptionWithHTTPStatus:404 /* Not Found */];
+}
+
+@end /* SOGoGroupsFolder */
index 22e2855673c416e78889060ab57f58a43af81ddf..92095ccea6dee588c193173b9ee2e8511286e36f 100644 (file)
@@ -27,7 +27,7 @@
 
 @class NSString, NSMutableString, NSException;
 @class OCSFolderManager, OCSFolder;
-@class SOGoUserFolder;
+@class SOGoUserFolder, SOGoGroupsFolder;
 
 @interface SOGoObject : NSObject
 {
@@ -45,6 +45,7 @@
 /* looking up shared objects */
 
 - (SOGoUserFolder *)lookupUserFolder;
+- (SOGoGroupsFolder *)lookupGroupsFolder;
 
 /* operations */
 
index b558aba0114e812b015dc23f9b36f857a10f8b3b..b18e7a4639f0897cdecc2498ec8aa9056d893fdb 100644 (file)
@@ -21,6 +21,7 @@
 // $Id$
 
 #include "SOGoObject.h"
+#include "SOGoUserFolder.h"
 #include "common.h"
 
 @implementation SOGoObject
@@ -65,6 +66,9 @@
   
   return [self->container lookupUserFolder];
 }
+- (SOGoGroupsFolder *)lookupGroupsFolder {
+  return [[self lookupUserFolder] lookupGroupsFolder];
+}
 
 /* operations */
 
index 69454f17a64c9b8a24c955efcf4af3c4531c33c2..0198b999ebaae720e30661fb8abc4ff6b3e30c4e 100644 (file)
 
 #include <SOGo/SOGoFolder.h>
 
+/*
+  SOGoUserFolder
+    Parent object: the root object (SoApplication object)
+    Child objects: 
+      'Groups':   SOGoGroupsFolder
+      'Calendar': SOGoAppointmentFolder
+  
+  The SOGoUserFolder is the "home directory" of the user where all his 
+  processing starts. It is the 'znek' in such a path:
+    /SOGo/so/znek/Calendar
+*/
+
 @class NSString;
 
 @interface SOGoUserFolder : SOGoFolder
index f67aab943d5f301d961faa5dd132130155d16924..2c135af4a59777ffe2b6b0af7c7b7c8a81fda52b 100644 (file)
@@ -40,6 +40,9 @@
 - (SOGoUserFolder *)lookupUserFolder {
   return self;
 }
+- (SOGoGroupsFolder *)lookupGroupsFolder {
+  return [self lookupName:@"Groups" inContext:nil acquire:NO];
+}
 
 /* pathes */
 
   return [calendar autorelease];
 }
 
+- (id)groupsFolder:(NSString *)_key inContext:(id)_ctx {
+  static Class fldClass = Nil;
+  id folder;
+  
+  if (fldClass == Nil)
+    fldClass = NSClassFromString(@"SOGoGroupsFolder");
+  if (fldClass == Nil) {
+    [self logWithFormat:@"ERROR: missing SOGoGroupsFolder class!"];
+    return nil;
+  }
+  
+  folder = [[fldClass alloc] initWithName:_key inContainer:self];
+  return [folder autorelease];
+}
+
 - (id)lookupName:(NSString *)_key inContext:(id)_ctx acquire:(BOOL)_flag {
   id obj;
   
   if ([_key isEqualToString:@"Calendar"])
     return [self privateCalendar:_key inContext:_ctx];
   
+  if ([_key isEqualToString:@"Groups"])
+    return [self groupsFolder:_key inContext:_ctx];
+  
   /* return 404 to stop acquisition */
   return [NSException exceptionWithHTTPStatus:404 /* Not Found */];
 }
diff --git a/SOGo/SoObjects/SOGo/Version b/SOGo/SoObjects/SOGo/Version
new file mode 100644 (file)
index 0000000..d085094
--- /dev/null
@@ -0,0 +1,3 @@
+# $Id: Version 170 2004-08-11 10:45:40Z helge $
+
+SUBMINOR_VERSION:=6
index 2094c588506893b0440bd0f3589db848ea5dd3ef..e8cb9eb239f4eb2da2c484240015009a14994d33 100644 (file)
@@ -69,7 +69,7 @@
   for (i = 0; i < count; i++) {
     NSString *name;
     id obj;
-        
+    
     obj = [traversalObjects objectAtIndex:i];
     
     name = [obj davDisplayName];
     if (![name hasPrefix:@"sogod"]) {
       NSMutableDictionary *c;
       NSString *url;
-
+      
       url = [obj baseURLInContext:[self context]];
-      if(![url hasSuffix:@"/"]) {
-          url = [url stringByAppendingString:@"/"];
-      }
+      if (![url hasSuffix:@"/"])
+       url = [url stringByAppendingString:@"/"];
+      
       c = [[NSMutableDictionary alloc] initWithCapacity:2];
       [c setObject:name forKey:@"name"];
       [c setObject:url forKey:@"url"];