#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