]> err.no Git - scalable-opengroupware.org/blobdiff - SoObjects/Contacts/SOGoContactGCSFolder.m
git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1245 d1b88da0-ebda-0310...
[scalable-opengroupware.org] / SoObjects / Contacts / SOGoContactGCSFolder.m
index b8856acd973a8bc0ce89ec396594e43364b17e91..f248f51461656534782a8786f17e796d890153c8 100644 (file)
@@ -27,6 +27,7 @@
 #import <NGObjWeb/WOContext.h>
 #import <NGObjWeb/WORequest.h>
 #import <NGExtensions/NSObject+Logs.h>
+#import <NGExtensions/NSString+misc.h>
 #import <EOControl/EOQualifier.h>
 #import <EOControl/EOSortOrdering.h>
 #import <GDLContentStore/GCSFolder.h>
@@ -66,6 +67,7 @@
 
   isPut = NO;
   obj = [super lookupName:_key inContext:_ctx acquire:NO];
+  
   if (!obj)
     {
       if ([[[_ctx request] method] isEqualToString: @"PUT"])
   EOQualifier *qualifier;
   EOSortOrdering *ordering;
 
-//   NSLog (@"fetching records matching '%@', sorted by '%@' in order %d",
-//          filter, sortKey, sortOrdering);
-
   fields = folderListingFields;
   qualifier = [self _qualifierForFilter: filter];
   dbRecords = [[self ocsFolder] fetchFields: fields
                                matchingQualifier: qualifier];
+
   if ([dbRecords count] > 0)
     {
       records = [self _flattenedRecords: dbRecords];
     }
   else
     records = nil;
-//   else
-//     [self errorWithFormat:@"(%s): fetch failed!", __PRETTY_FUNCTION__];
+  //  else
+  //[self errorWithFormat:@"(%s): fetch failed!", __PRETTY_FUNCTION__];
 
-  //[self debugWithFormat:@"fetched %i records.", [records count]];
+  [self debugWithFormat:@"fetched %i records.", [records count]];
   return records;
 }
 
-- (NSArray *) davNamespaces
+- (void) appendObject: (NSDictionary *) object
+          withBaseURL: (NSString *) baseURL
+     toREPORTResponse: (WOResponse *) r
 {
-  return [NSArray arrayWithObject: @"urn:ietf:params:xml:ns:carddav"];
+  SOGoContactGCSEntry *component;
+  Class componentClass;
+  NSString *name, *etagLine, *contactString;
+
+  name = [object objectForKey: @"c_name"];
+  componentClass = [SOGoContactGCSEntry class];
+
+  component = [componentClass objectWithName: name inContainer: self];
+
+  [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"];
 }
 
 - (NSArray *) davComplianceClassesInContext: (id)_ctx
   return classes;
 }
 
+- (NSArray *) davNamespaces
+{
+  return [NSArray arrayWithObject: @"urn:ietf:params:xml:ns:carddav"];
+}
+
 - (NSString *) groupDavResourceType
 {
   return @"vcard-collection";