]> err.no Git - scalable-opengroupware.org/commitdiff
new "Contacts" product for SoObjects, minor build fix for SchedulerUI
authorznek <znek@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Wed, 25 Aug 2004 17:34:08 +0000 (17:34 +0000)
committerznek <znek@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Wed, 25 Aug 2004 17:34:08 +0000 (17:34 +0000)
git-svn-id: http://svn.opengroupware.org/SOGo/trunk@270 d1b88da0-ebda-0310-925b-ed51d893ca5b

17 files changed:
SOGo/SOGo.xcode/project.pbxproj
SOGo/SoObjects/ChangeLog [new file with mode: 0644]
SOGo/SoObjects/Contacts/ChangeLog [new file with mode: 0644]
SOGo/SoObjects/Contacts/GNUmakefile [new file with mode: 0644]
SOGo/SoObjects/Contacts/GNUmakefile.preamble [new file with mode: 0644]
SOGo/SoObjects/Contacts/Product.m [new file with mode: 0644]
SOGo/SoObjects/Contacts/SOGoContactFolder.h [new file with mode: 0644]
SOGo/SoObjects/Contacts/SOGoContactFolder.m [new file with mode: 0644]
SOGo/SoObjects/Contacts/SOGoContactObject.h [new file with mode: 0644]
SOGo/SoObjects/Contacts/SOGoContactObject.m [new file with mode: 0644]
SOGo/SoObjects/Contacts/Version [new file with mode: 0644]
SOGo/SoObjects/Contacts/common.h [new file with mode: 0644]
SOGo/SoObjects/Contacts/product.plist [new file with mode: 0644]
SOGo/SoObjects/GNUmakefile
SOGo/UI/Scheduler/ChangeLog
SOGo/UI/Scheduler/GNUmakefile.preamble
SOGo/UI/Scheduler/Version

index 2a96072f5cdd0d6c3f95f5fda63bf13a20ec9aa7..ccbc674562ef6236b08040e87ed2ee3fe2d42757 100644 (file)
                        refType = 4;
                        sourceTree = "<group>";
                };
+               ADDF4BDB06DCF5D400C4E7F8 = {
+                       children = (
+                               ADDF4BE306DCF5D400C4E7F8,
+                               ADDF4C0006DCF65700C4E7F8,
+                               ADDF4BEF06DCF60500C4E7F8,
+                               ADDF4BEC06DCF5FE00C4E7F8,
+                       );
+                       isa = PBXGroup;
+                       path = Contacts;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               ADDF4BDC06DCF5D400C4E7F8 = {
+                       fileEncoding = 4;
+                       indentWidth = 2;
+                       isa = PBXFileReference;
+                       lastKnownFileType = sourcecode.c.h;
+                       path = common.h;
+                       refType = 4;
+                       sourceTree = "<group>";
+                       tabWidth = 2;
+               };
+               ADDF4BDD06DCF5D400C4E7F8 = {
+                       explicitFileType = sourcecode.make;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = GNUmakefile;
+                       refType = 4;
+                       sourceTree = "<group>";
+                       tabWidth = 8;
+               };
+               ADDF4BDE06DCF5D400C4E7F8 = {
+                       fileEncoding = 4;
+                       indentWidth = 2;
+                       isa = PBXFileReference;
+                       lastKnownFileType = sourcecode.c.objc;
+                       path = Product.m;
+                       refType = 4;
+                       sourceTree = "<group>";
+                       tabWidth = 2;
+               };
+               ADDF4BDF06DCF5D400C4E7F8 = {
+                       fileEncoding = 4;
+                       indentWidth = 2;
+                       isa = PBXFileReference;
+                       lastKnownFileType = sourcecode.c.h;
+                       path = SOGoContactFolder.h;
+                       refType = 4;
+                       sourceTree = "<group>";
+                       tabWidth = 2;
+               };
+               ADDF4BE006DCF5D400C4E7F8 = {
+                       fileEncoding = 4;
+                       indentWidth = 2;
+                       isa = PBXFileReference;
+                       lastKnownFileType = sourcecode.c.objc;
+                       path = SOGoContactFolder.m;
+                       refType = 4;
+                       sourceTree = "<group>";
+                       tabWidth = 2;
+               };
+               ADDF4BE106DCF5D400C4E7F8 = {
+                       fileEncoding = 4;
+                       indentWidth = 2;
+                       isa = PBXFileReference;
+                       lastKnownFileType = sourcecode.c.h;
+                       path = SOGoContactObject.h;
+                       refType = 4;
+                       sourceTree = "<group>";
+                       tabWidth = 2;
+               };
+               ADDF4BE206DCF5D400C4E7F8 = {
+                       fileEncoding = 4;
+                       indentWidth = 2;
+                       isa = PBXFileReference;
+                       lastKnownFileType = sourcecode.c.objc;
+                       path = SOGoContactObject.m;
+                       refType = 4;
+                       sourceTree = "<group>";
+                       tabWidth = 2;
+               };
+               ADDF4BE306DCF5D400C4E7F8 = {
+                       explicitFileType = sourcecode.make;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = Version;
+                       refType = 4;
+                       sourceTree = "<group>";
+                       tabWidth = 8;
+               };
+               ADDF4BE606DCF5E200C4E7F8 = {
+                       children = (
+                               E872063B0692E3D00099CBBD,
+                               E872063C0692E3D00099CBBD,
+                       );
+                       isa = PBXGroup;
+                       name = Makefiles;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               ADDF4BE906DCF5EC00C4E7F8 = {
+                       children = (
+                               E872063A0692E3D00099CBBD,
+                               E87206410692E3D00099CBBD,
+                               E87206470692E3D00099CBBD,
+                               E87206480692E3D00099CBBD,
+                               E87206490692E3D00099CBBD,
+                               E872064A0692E3D00099CBBD,
+                       );
+                       isa = PBXGroup;
+                       name = Classes;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               ADDF4BEC06DCF5FE00C4E7F8 = {
+                       children = (
+                               ADDF4BDC06DCF5D400C4E7F8,
+                               ADDF4BDE06DCF5D400C4E7F8,
+                               ADDF4BDF06DCF5D400C4E7F8,
+                               ADDF4BE006DCF5D400C4E7F8,
+                               ADDF4BE106DCF5D400C4E7F8,
+                               ADDF4BE206DCF5D400C4E7F8,
+                       );
+                       isa = PBXGroup;
+                       name = Classes;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               ADDF4BEF06DCF60500C4E7F8 = {
+                       children = (
+                               ADDF4BDD06DCF5D400C4E7F8,
+                               ADDF4BFF06DCF64100C4E7F8,
+                       );
+                       isa = PBXGroup;
+                       name = Makefiles;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               ADDF4BFF06DCF64100C4E7F8 = {
+                       explicitFileType = sourcecode.make;
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       path = GNUmakefile.preamble;
+                       refType = 4;
+                       sourceTree = "<group>";
+                       tabWidth = 8;
+               };
+               ADDF4C0006DCF65700C4E7F8 = {
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       lastKnownFileType = text.plist;
+                       path = product.plist;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
                ADE2C23C06B7BED40065D56F = {
                        fileEncoding = 4;
                        isa = PBXFileReference;
                                E872064D0692E3D00099CBBD,
                                E872064C0692E3D00099CBBD,
                                E87206090692E3D00099CBBD,
+                               ADDF4BDB06DCF5D400C4E7F8,
                                E872064E0692E3D00099CBBD,
                        );
                        isa = PBXGroup;
                        children = (
                                E872064B0692E3D00099CBBD,
                                E87206420692E3D00099CBBD,
-                               E872063A0692E3D00099CBBD,
-                               E872063B0692E3D00099CBBD,
-                               E872063C0692E3D00099CBBD,
-                               E87206410692E3D00099CBBD,
-                               E87206470692E3D00099CBBD,
-                               E87206480692E3D00099CBBD,
-                               E87206490692E3D00099CBBD,
-                               E872064A0692E3D00099CBBD,
+                               ADDF4BE606DCF5E200C4E7F8,
+                               ADDF4BE906DCF5EC00C4E7F8,
                        );
                        isa = PBXGroup;
                        path = Appointments;
diff --git a/SOGo/SoObjects/ChangeLog b/SOGo/SoObjects/ChangeLog
new file mode 100644 (file)
index 0000000..81b1924
--- /dev/null
@@ -0,0 +1,5 @@
+2004-08-25  Marcus Mueller  <znek@mulle-kybernetik.com>
+
+       * added "Contacts" product
+
+       * ChangeLog: created
diff --git a/SOGo/SoObjects/Contacts/ChangeLog b/SOGo/SoObjects/Contacts/ChangeLog
new file mode 100644 (file)
index 0000000..e69b116
--- /dev/null
@@ -0,0 +1,3 @@
+2004-08-25  Marcus Mueller  <znek@mulle-kybernetik.com>
+
+       * ChangeLog: created
diff --git a/SOGo/SoObjects/Contacts/GNUmakefile b/SOGo/SoObjects/Contacts/GNUmakefile
new file mode 100644 (file)
index 0000000..caadc6d
--- /dev/null
@@ -0,0 +1,23 @@
+# $Id$
+
+include $(GNUSTEP_MAKEFILES)/common.make
+
+BUNDLE_NAME        = Contacts
+BUNDLE_EXTENSION   = .SOGo
+BUNDLE_INSTALL_DIR = $(GNUSTEP_USER_ROOT)/Library/SOGo
+
+Contacts_PRINCIPAL_CLASS = SOGoContactsProduct
+
+Contacts_OBJC_FILES =                  \
+       Product.m                       \
+                                       \
+       SOGoContactObject.m             \
+       SOGoContactFolder.m             \
+
+Contacts_RESOURCE_FILES +=             \
+       Version                         \
+       product.plist                   \
+
+-include GNUmakefile.preamble
+include $(GNUSTEP_MAKEFILES)/bundle.make
+-include GNUmakefile.postamble
diff --git a/SOGo/SoObjects/Contacts/GNUmakefile.preamble b/SOGo/SoObjects/Contacts/GNUmakefile.preamble
new file mode 100644 (file)
index 0000000..f5fdade
--- /dev/null
@@ -0,0 +1,18 @@
+# $Id$
+
+ADDITIONAL_INCLUDE_DIRS += \
+       -I.. \
+       -I../../..
+
+ADDITIONAL_LIB_DIRS += \
+       -L../SOGo/$(GNUSTEP_OBJ_DIR)/ \
+       -L../../../OGoContentStore/$(GNUSTEP_OBJ_DIR)/ \
+       -L../../../SOGoLogic/$(GNUSTEP_OBJ_DIR)/
+
+Appointments_BUNDLE_LIBS += \
+       -lSOGo -lSOGoLogic \
+       -lOGoContentStore       \
+       -lGDLAccess             \
+       -lEOControl             \
+       -lSaxObjC
+
diff --git a/SOGo/SoObjects/Contacts/Product.m b/SOGo/SoObjects/Contacts/Product.m
new file mode 100644 (file)
index 0000000..9a83bbe
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+  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$
+
+#import <Foundation/NSObject.h>
+
+@interface SOGoContactsProduct : NSObject
+{
+}
+
+@end
+
+@implementation SOGoContactsProduct
+
+@end /* SOGoAppointmentsProduct */
diff --git a/SOGo/SoObjects/Contacts/SOGoContactFolder.h b/SOGo/SoObjects/Contacts/SOGoContactFolder.h
new file mode 100644 (file)
index 0000000..68c3af7
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+  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$
+
+#ifndef __Appointments_SOGoContactFolder_H__
+#define __Appointments_SOGoContactFolder_H__
+
+#include <SOGo/SOGoFolder.h>
+
+/*
+  SOGoContactFolder
+    Parent object: the SOGoUserFolder
+    Child objects: SOGoContactObject
+    
+  The SOGoContactFolder maps to an OCS folder of type 'contact', that
+  is, a content folder containing vcal?? files (and a proper quicktable).
+*/
+
+@class NSString, NSArray, NSCalendarDate, NSException;
+@class OCSFolder;
+
+@interface SOGoContactFolder : SOGoFolder
+{
+}
+
++ (NSString *)globallyUniqueObjectId;
+
+/* selection */
+
+- (NSArray *)contactUIDs;
+
+/* fetching */
+
+- (NSArray *)fetchCoreInfosFrom:(NSCalendarDate *)_startDate
+  to:(NSCalendarDate *)_endDate;
+
+- (NSArray *)fetchCoreInfosFromFolder:(OCSFolder *)_folder
+  from:(NSCalendarDate *)_startDate
+  to:(NSCalendarDate *)_endDate;
+
+/* URL generation */
+
+- (NSString *)baseURLForContactWithUID:(NSString *)_uid inContext:(id)_ctx;
+
+/* folder management */
+
+- (id)lookupHomeFolderForUID:(NSString *)_uid inContext:(id)_ctx;
+
+- (NSArray *)lookupContactFoldersForUIDs:(NSArray *)_uids inContext:(id)_ctx;
+
+@end
+
+#endif /* __Appointments_SOGoContactFolder_H__ */
diff --git a/SOGo/SoObjects/Contacts/SOGoContactFolder.m b/SOGo/SoObjects/Contacts/SOGoContactFolder.m
new file mode 100644 (file)
index 0000000..8d9a542
--- /dev/null
@@ -0,0 +1,258 @@
+/*
+  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$
+
+#include "SOGoContactFolder.h"
+#include <SOGo/SOGoCustomGroupFolder.h>
+#include <SOGoLogic/AgenorUserManager.h>
+#include <OGoContentStore/OCSFolder.h>
+#include <NGiCal/NGiCal.h>
+#include "common.h"
+#include <unistd.h>
+#include <stdlib.h>
+
+@implementation SOGoContactFolder
+
+static BOOL       debugOn = NO;
+static NSTimeZone *MET = nil;
+
++ (void)initialize {
+  if (MET == nil) MET = [[NSTimeZone timeZoneWithAbbreviation:@"MET"] retain];
+}
+
++ (NSString *)globallyUniqueObjectId {
+  /*
+    4C08AE1A-A808-11D8-AC5A-000393BBAFF6
+    SOGo-Web-28273-18283-288182
+    printf( "%x", *(int *) &f);
+  */
+  static int   pid = 0;
+  static int   sequence = 0;
+  static float rndm = 0;
+  float f;
+
+  if (pid == 0) { /* break if we fork ;-) */
+      pid = getpid();
+      rndm = random();
+  }
+  sequence++;
+  f = [[NSDate date] timeIntervalSince1970];
+  return [NSString stringWithFormat:@"%0X-%0X-%0X-%0X",
+                  pid, *(int *)&f, sequence++, random];
+}
+
+- (void)dealloc {
+  [super dealloc];
+}
+
+/* selection */
+
+- (NSArray *)contactUIDs {
+  NSString *s;
+
+  s = [[self container] nameInContainer];
+  return [s isNotNull] ? [NSArray arrayWithObjects:&s count:1] : nil;
+}
+
+/* name lookup */
+
+- (BOOL)isValidContactName:(NSString *)_key {
+  if ([_key length] == 0)
+    return NO;
+  
+  return YES;
+}
+
+- (id)contactWithName:(NSString *)_key inContext:(id)_ctx {
+  static Class ctClass = Nil;
+  id ct;
+  
+  if (ctClass == Nil)
+    ctClass = NSClassFromString(@"SOGoContactObject");
+  if (ctClass == Nil) {
+    [self logWithFormat:@"ERROR: missing SOGoContactObject class!"];
+    return nil;
+  }
+  
+  ct = [[ctClass alloc] initWithName:_key inContainer:self];
+  return [ct 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 ([self isValidContactName:_key])
+    return [self contactWithName:_key inContext:_ctx];
+
+  /* return 404 to stop acquisition */
+  return [NSException exceptionWithHTTPStatus:404 /* Not Found */];
+}
+
+/* fetching */
+
+- (NSMutableDictionary *)fixupRecord:(NSDictionary *)_record {
+  NSMutableDictionary *md;
+  id tmp;
+  
+  md = [[_record mutableCopy] autorelease];
+#warning !! IMPLEMENT ME!
+  return md;
+}
+
+- (NSArray *)fixupRecords:(NSArray *)_records {
+  NSMutableArray *ma;
+  unsigned i, count;
+
+  if (_records == nil) return nil;
+  if ((count = [_records count]) == 0)
+    return _records;
+  
+  ma = [NSMutableArray arrayWithCapacity:count];
+  for (i = 0; i < count; i++) {
+    id row;
+    
+    row = [self fixupRecord:[_records objectAtIndex:i]];
+    if (row) [ma addObject:row];
+  }
+  return ma;
+}
+
+- (NSArray *)fetchCoreInfosFromFolder:(OCSFolder *)_folder
+             from:(NSCalendarDate *)_startDate
+             to:(NSCalendarDate *)_endDate 
+{
+#warning !! IMPLEMENT ME!
+  return nil;
+}
+
+- (NSArray *)fetchCoreInfosFrom:(NSCalendarDate *)_startDate
+  to:(NSCalendarDate *)_endDate 
+{
+  /* this is the primary API */
+  OCSFolder *folder;
+  
+  if ((folder = [self ocsFolder]) == nil) {
+    [self logWithFormat:@"ERROR(%s): missing folder for fetch!",
+           __PRETTY_FUNCTION__];
+    return nil;
+  }
+  return [self fetchCoreInfosFromFolder:folder from:_startDate to:_endDate];
+}
+
+/* URL generation */
+
+- (NSString *)baseURLForContactWithUID:(NSString *)_uid inContext:(id)_ctx {
+  NSString *url;
+  
+  if ([_uid length] == 0)
+    return nil;
+  
+  url = [self baseURLInContext:_ctx];
+  if (![url hasSuffix:@"/"])
+    url = [url stringByAppendingString:@"/"];
+  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 *)lookupContactFoldersForUIDs:(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:@"Contacts" 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;
+}
+
+/* GET */
+
+- (id)GETAction:(WOContext *)_ctx {
+  // TODO: I guess this should really be done by SOPE (redirect to
+  //       default method)
+  NSString *uri;
+
+  uri = [[_ctx request] uri];
+  if (![uri hasSuffix:@"/"]) uri = [uri stringByAppendingString:@"/"];
+  uri = [uri stringByAppendingString:@"view"];
+  
+  return [self redirectToLocation:uri];
+}
+
+@end /* SOGoContactFolder */
diff --git a/SOGo/SoObjects/Contacts/SOGoContactObject.h b/SOGo/SoObjects/Contacts/SOGoContactObject.h
new file mode 100644 (file)
index 0000000..468d3c8
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+  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$
+
+#ifndef __Appointments_SOGoContactObject_H__
+#define __Appointments_SOGoContactObject_H__
+
+#include <SOGo/SOGoContentObject.h>
+
+/*
+  SOGoContactObject
+  
+  Represents a single contact. This SOPE controller object manages all the
+  attendee storages (that is, it might store into multiple folders for meeting
+  appointments!).
+
+  Note: SOGoContactObject do not need to exist yet. They can also be "new"
+        appointments with an externally generated unique key.
+*/
+
+@class NSString, NSArray, NSException;
+
+@interface SOGoContactObject : SOGoContentObject
+{
+}
+
+@end
+
+#endif /* __Appointments_SOGoContactObject_H__ */
diff --git a/SOGo/SoObjects/Contacts/SOGoContactObject.m b/SOGo/SoObjects/Contacts/SOGoContactObject.m
new file mode 100644 (file)
index 0000000..0e0be03
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+  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$
+
+#include "SOGoContactObject.h"
+#include "common.h"
+
+@implementation SOGoContactObject
+
+- (void)dealloc {
+  [super dealloc];
+}
+
+/* accessors */
+
+@end /* SOGoContactObject */
diff --git a/SOGo/SoObjects/Contacts/Version b/SOGo/SoObjects/Contacts/Version
new file mode 100644 (file)
index 0000000..9385a64
--- /dev/null
@@ -0,0 +1,3 @@
+# $Id$
+
+SUBMINOR_VERSION:=0
diff --git a/SOGo/SoObjects/Contacts/common.h b/SOGo/SoObjects/Contacts/common.h
new file mode 100644 (file)
index 0000000..88fc580
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+  Copyright (C) 2002-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$
+
+#import <Foundation/Foundation.h>
+
+#if NeXT_Foundation_LIBRARY || COCOA_Foundation_LIBRARY
+#  include <NGExtensions/NGObjectMacros.h>
+#  include <NGExtensions/NSString+Ext.h>
+#endif
+
+#include <NGExtensions/NGExtensions.h>
+#include <NGObjWeb/NGObjWeb.h>
+#include <NGObjWeb/SoObjects.h>
+
+#include <SOGoLogic/SOGoAppointment.h>
+
diff --git a/SOGo/SoObjects/Contacts/product.plist b/SOGo/SoObjects/Contacts/product.plist
new file mode 100644 (file)
index 0000000..c4f8b45
--- /dev/null
@@ -0,0 +1,18 @@
+{
+  requires = ( MAIN );
+
+  publicResources = (
+  );
+
+  factories = {
+  };
+  
+  classes = {
+    SOGoContactFolder = {
+      superclass    = "SOGoFolder";
+    };
+    SOGoContactObject = {
+      superclass    = "SOGoContentObject";
+    };
+  };
+}
index b7fdaf0853fbdb3d6bb5017d70b4fa25a0cd5326..6248382ca7d5cc95a9d24c8e48044a2c21189b04 100644 (file)
@@ -5,5 +5,6 @@ include $(GNUSTEP_MAKEFILES)/common.make
 SUBPROJECTS = \
        SOGo            \
        Appointments    \
+       Contacts        \
 
 include $(GNUSTEP_MAKEFILES)/aggregate.make
index 2993902d5fbaf13ebe9363f6a49f08a21a8c2d38..abf4851cab8f88d248f6071ab1bf16755338d969 100644 (file)
@@ -1,5 +1,8 @@
 2004-08-25  Marcus Mueller  <znek@mulle-kybernetik.com>
 
+       * GNUmakefile.preamble: removed NGScripting from dependencies - it's no
+         longer required (v0.9.71)
+
        * UIxAppointmentProposal.m: changed -isSecondHalfGreen and
          -isSlotRangeGreen due to a bugfix in NGExtensions (v0.9.70)
 
index 8ee96db6c84f0840f6f72cd9299ce8ad63686930..1fc3dad3c0a6f535d1eb423d51d17f5937cb919a 100644 (file)
@@ -22,7 +22,7 @@ SchedulerUI_LIB_DIRS +=                       \
        -L$(RELBUILD_DIR_libSOGoLogic)
 
 SchedulerUI_BUNDLE_LIBS += \
-       -lNGObjWeb -lNGScripting                        \
+       -lNGObjWeb                                      \
        -lNGMime -lNGStreams -lNGExtensions -lEOControl \
        -lXmlRpc -lDOM -lSaxObjC -lNGiCal               \
        -lSOGoLogic -lSOGoUI                            \
index a03b5ec4a13c6486920a23a5aa34ff9ba2f843a2..7138cac69809a15b750dee5746bee0ac231fdae3 100644 (file)
@@ -1,6 +1,6 @@
 # $Id$
 
-SUBMINOR_VERSION:=70
+SUBMINOR_VERSION:=71
 
 # v0.9.70 requires libNGExtensions v4.3.107
 # v0.9.67 requires SOPE 4.3