]> err.no Git - scalable-opengroupware.org/blobdiff - SoObjects/Contacts/SOGoContactLDAPFolder.m
git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1257 d1b88da0-ebda-0310...
[scalable-opengroupware.org] / SoObjects / Contacts / SOGoContactLDAPFolder.m
index 4a266c4b3c75961f67bca839858eb41bb171bdcc..7345c9c5a34ba18fe2b2547a5a5ce8b1412596a5 100644 (file)
 #import <Foundation/NSString.h>
 
 #import <NGObjWeb/NSException+HTTP.h>
-#import <NGObjWeb/SoObject.h>
 #import <NGObjWeb/WOApplication.h>
 #import <NGObjWeb/WOContext.h>
 #import <NGObjWeb/WOContext+SoObjects.h>
+#import <NGObjWeb/WOResponse.h>
+#import <NGObjWeb/SoObject.h>
 #import <NGObjWeb/SoUser.h>
 #import <EOControl/EOSortOrdering.h>
 #import <SaxObjC/XMLNamespaces.h>
 
 #import <SoObjects/SOGo/LDAPSource.h>
+#import <SoObjects/SOGo/NSString+Utilities.h>
 #import "SOGoContactLDIFEntry.h"
 #import "SOGoContactLDAPFolder.h"
+#import <NGExtensions/NSString+misc.h>
+#import <NGObjWeb/WORequest.h>
+#import <NGObjWeb/SoSelectorInvocation.h>
 
 @class WOContext;
 
 @implementation SOGoContactLDAPFolder
 
+#warning this should be unified within SOGoFolder
+- (void) appendObject: (NSDictionary *) object
+          withBaseURL: (NSString *) baseURL
+     toREPORTResponse: (WOResponse *) r
+{
+  SOGoContactLDIFEntry *component;
+  NSString *name, *etagLine, *contactString;
+
+  name = [object objectForKey: @"c_name"];
+  component = [self lookupName: name inContext: context acquire: NO];
+
+  [r appendContentString: @"  <D:response>\r\n"];
+  [r appendContentString: @"    <D:href>"];
+  [r appendContentString: baseURL];
+  if (![baseURL hasSuffix: @"/"])
+    [r appendContentString: @"/"];
+  [r appendContentString: name];
+  [r appendContentString: @"</D:href>\r\n"];
+
+  [r appendContentString: @"    <D:propstat>\r\n"];
+  [r appendContentString: @"      <D:prop>\r\n"];
+  etagLine = [NSString stringWithFormat: @"        <D:getetag>%@</D:getetag>\r\n",
+                       [component davEntityTag]];
+  [r appendContentString: etagLine];
+  [r appendContentString: @"      </D:prop>\r\n"];
+  [r appendContentString: @"      <D:status>HTTP/1.1 200 OK</D:status>\r\n"];
+  [r appendContentString: @"    </D:propstat>\r\n"];
+  [r appendContentString: @"    <C:addressbook-data>"];
+  contactString = [[component contentAsString] stringByEscapingXMLString];
+  [r appendContentString: contactString];
+  [r appendContentString: @"</C:addressbook-data>\r\n"];
+  [r appendContentString: @"  </D:response>\r\n"];
+}
+
 + (id) folderWithName: (NSString *) aName
        andDisplayName: (NSString *) aDisplayName
          inContainer: (id) aContainer
       displayName = nil;
       entries = nil;
       ldapSource = nil;
-      ignoreSoObjectHunger = NO;
     }
 
   return self;
   return displayName;
 }
 
+- (NSArray *) davNamespaces
+{
+  return [NSArray arrayWithObject: @"urn:ietf:params:xml:ns:carddav"];
+}
+
 - (id) lookupName: (NSString *) objectName
         inContext: (WOContext *) lookupContext
           acquire: (BOOL) acquire
   id obj;
   NSDictionary *ldifEntry;
 
-//   NSLog (@"looking up name '%@'...", name);
+  //NSLog (@"looking up name '%@'...", objectName);
 
   /* first check attributes directly bound to the application */
-  ignoreSoObjectHunger = YES;
   obj = [super lookupName: objectName inContext: lookupContext acquire: NO];
-  ignoreSoObjectHunger = NO;
+
   if (!obj)
     {
       ldifEntry = [ldapSource lookupContactEntry: objectName];
 
 - (NSArray *) toOneRelationshipKeys
 {
-  NSArray *keys;
-
-  if (ignoreSoObjectHunger)
-    keys = nil;
-  else
-    keys = [ldapSource allEntryIDs];
-
-  return keys;
+  return [ldapSource allEntryIDs];
 }
 
 - (NSArray *) _flattenedRecords: (NSArray *) records