#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>
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";