From 245ec1d0c8b5fbaab3ade23c7de71d27b28491e7 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Wed, 9 May 2007 19:23:45 +0000 Subject: [PATCH] Monotone-Parent: b3104cb2f524576b6a02514df135076db60274ea Monotone-Revision: 1471bacc37d4bfc7718c85c0760024d89c4440ef Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2007-05-09T19:23:45 Monotone-Branch: ca.inverse.sogo --- SoObjects/Contacts/SOGoContactFolder.h | 6 +- SoObjects/SOGo/SOGoFolder.h | 10 +- SoObjects/SOGo/SOGoObject.h | 16 ++- SoObjects/SOGo/SOGoObject.m | 1 - UI/Contacts/UIxContactEditor.m | 24 +++- UI/Contacts/UIxContactFoldersView.m | 134 +++++++++++---------- UI/Contacts/UIxContactsListViewContainer.m | 9 +- UI/MailPartViewers/UIxMailPartICalViewer.m | 15 ++- UI/Scheduler/UIxComponentEditor.m | 12 +- 9 files changed, 131 insertions(+), 96 deletions(-) diff --git a/SoObjects/Contacts/SOGoContactFolder.h b/SoObjects/Contacts/SOGoContactFolder.h index 28f180c61..904009d3a 100644 --- a/SoObjects/Contacts/SOGoContactFolder.h +++ b/SoObjects/Contacts/SOGoContactFolder.h @@ -51,15 +51,13 @@ andDisplayName: (NSString *) aDisplayName inContainer: (SOGoObject *) aContainer; +- (NSString *) nameInContainer; +- (NSString *) displayName; -- (id ) lookupContactWithId: (NSString *) recordId; - (NSArray *) lookupContactsWithFilter: (NSString *) filter sortBy: (NSString *) sortKey ordering: (NSComparisonResult) sortOrdering; -- (void) setDisplayName: (NSString *) aDisplayName; -- (NSString *) displayName; - @end #endif /* __Contacts_SOGoContactFolder_H__ */ diff --git a/SoObjects/SOGo/SOGoFolder.h b/SoObjects/SOGo/SOGoFolder.h index f38fc61f7..b5527d498 100644 --- a/SoObjects/SOGo/SOGoFolder.h +++ b/SoObjects/SOGo/SOGoFolder.h @@ -24,7 +24,11 @@ #import "SOGoObject.h" -@class NSString, NSArray, NSDictionary; +@class NSArray; +@class NSDictionary; +@class NSMutableDictionary; +@class NSString; + @class GCSFolder; /* @@ -37,10 +41,6 @@ cyclic references. */ -@class NSString; -@class GCSFolder; -@class NSMutableDictionary; - @interface SOGoFolder : SOGoObject { NSString *ocsPath; diff --git a/SoObjects/SOGo/SOGoObject.h b/SoObjects/SOGo/SOGoObject.h index 9d3f7a4fe..5b4eeccec 100644 --- a/SoObjects/SOGo/SOGoObject.h +++ b/SoObjects/SOGo/SOGoObject.h @@ -34,10 +34,20 @@ lookup. */ -@class NSString, NSArray, NSMutableString, NSException, NSTimeZone; -@class GCSFolderManager, GCSFolder; -@class SOGoUserFolder, SOGoGroupsFolder; +#import + +@class NSString; +@class NSArray; +@class NSMutableString; +@class NSException; +@class NSTimeZone; + @class WOContext; +@class GCSFolderManager; +@class GCSFolder; + +@class SOGoUserFolder; +@class SOGoGroupsFolder; @class SOGoDAVSet; #define $(class) NSClassFromString(class) diff --git a/SoObjects/SOGo/SOGoObject.m b/SoObjects/SOGo/SOGoObject.m index fff695fc1..1cfc050eb 100644 --- a/SoObjects/SOGo/SOGoObject.m +++ b/SoObjects/SOGo/SOGoObject.m @@ -39,7 +39,6 @@ #import "SOGoUserFolder.h" #import "SOGoDAVRendererTypes.h" -#import "AgenorUserManager.h" #import "SOGoObject.h" diff --git a/UI/Contacts/UIxContactEditor.m b/UI/Contacts/UIxContactEditor.m index 0b6dd7b74..67d2d6b22 100644 --- a/UI/Contacts/UIxContactEditor.m +++ b/UI/Contacts/UIxContactEditor.m @@ -19,14 +19,18 @@ 02111-1307, USA. */ +#import + +#import +#import +#import +#import + #import #import -#import - #import #import -#import "common.h" #import "UIxContactEditor.h" @@ -536,7 +540,8 @@ - (id) writeAction { - NSString *email, *url; + NSString *email, *cn, *url; + NSMutableString *address; card = [[self clientObject] vCard]; [self initSnapshot]; @@ -546,7 +551,16 @@ email = [snapshot objectForKey: @"workMail"]; if (email) - url = [NSString stringWithFormat: @"Mail/compose?mailto=%@", email]; + { + address = [NSMutableString string]; + cn = [card fn]; + if ([cn length] > 0) + [address appendFormat: @"%@ <%@>", cn, email]; + else + [address appendString: email]; + + url = [NSString stringWithFormat: @"Mail/compose?mailto=%@", address]; + } else url = @"Mail/compose"; diff --git a/UI/Contacts/UIxContactFoldersView.m b/UI/Contacts/UIxContactFoldersView.m index 45e98dd1f..de17b892a 100644 --- a/UI/Contacts/UIxContactFoldersView.m +++ b/UI/Contacts/UIxContactFoldersView.m @@ -30,6 +30,7 @@ #import #import +#import #import #import #import @@ -93,28 +94,45 @@ return [self _selectActionForApplication: @"mailer-contacts"]; } -- (NSArray *) _searchResults: (NSString *) contact - ldapFoldersOnly: (BOOL) ldapFoldersOnly +- (void) _fillResults: (NSMutableDictionary *) results + inFolder: (id ) folder + withSearchOn: (NSString *) contact { - NSMutableArray *results; + NSEnumerator *folderResults; + NSDictionary *currentContact; + NSString *uid; + + folderResults = [[folder lookupContactsWithFilter: contact + sortBy: @"cn" + ordering: NSOrderedAscending] objectEnumerator]; + currentContact = [folderResults nextObject]; + while (currentContact) + { + uid = [currentContact objectForKey: @"c_uid"]; + if (uid && ![results objectForKey: uid]) + [results setObject: currentContact + forKey: uid]; + currentContact = [folderResults nextObject]; + } +} + +- (NSDictionary *) _searchResults: (NSString *) contact + ldapFoldersOnly: (BOOL) ldapOnly +{ + NSMutableDictionary *results; SOGoContactFolders *topFolder; NSEnumerator *sogoContactFolders; id currentFolder; - results = [NSMutableArray new]; - [results autorelease]; - + results = [NSMutableDictionary dictionary]; topFolder = [self clientObject]; sogoContactFolders = [[topFolder contactFolders] objectEnumerator]; currentFolder = [sogoContactFolders nextObject]; while (currentFolder) { - if (!ldapFoldersOnly - || [currentFolder isKindOfClass: [SOGoContactLDAPFolder class]]) - [results addObjectsFromArray: [currentFolder - lookupContactsWithFilter: contact - sortBy: @"cn" - ordering: NSOrderedAscending]]; + if (!ldapOnly || [currentFolder isKindOfClass: [SOGoContactLDAPFolder class]]) + [self _fillResults: results inFolder: currentFolder + withSearchOn: contact]; currentFolder = [sogoContactFolders nextObject]; } [topFolder release]; @@ -140,44 +158,34 @@ return email; } -- (NSDictionary *) _nextResultWithUid: (NSEnumerator *) results -{ - NSDictionary *result, *possibleResult; - - result = nil; - possibleResult = [results nextObject]; - while (possibleResult && !result) - if ([[possibleResult objectForKey: @"c_uid"] length]) - result = possibleResult; - else - possibleResult = [results nextObject]; - - return result; -} - -- (WOResponse *) _responseForResults: (NSArray *) results +- (WOResponse *) _responseForResults: (NSDictionary *) results { WOResponse *response; - NSString *email, *responseString, *uid; + NSEnumerator *uids; + NSString *responseString, *uid, *cn, *mail; NSDictionary *result; response = [context response]; if ([results count]) { - result = [self _nextResultWithUid: [results objectEnumerator]]; - if (!result) - result = [results objectAtIndex: 0]; - email = [self _emailForResult: result]; - uid = [result objectForKey: @"c_uid"]; - if ([uid length] == 0) - uid = @""; - responseString = [NSString stringWithFormat: @"%@:%@", - uid, email]; - [response setStatus: 200]; - [response setHeader: @"text/plain; charset=iso-8859-1" - forKey: @"Content-Type"]; - [response appendContentString: responseString]; + uids = [[results allKeys] objectEnumerator]; + uid = [uids nextObject]; + while (uid) + { + result = [results objectForKey: uid]; + cn = [result objectForKey: @"displayName"]; + if (![cn length]) + cn = [result objectForKey: @"cn"]; + mail = [result objectForKey: @"mail"]; + responseString = [NSString stringWithFormat: @"%@:%@:%@", + uid, cn, mail]; + [response setStatus: 200]; + [response setHeader: @"text/plain; charset=iso-8859-1" + forKey: @"Content-Type"]; + [response appendContentString: responseString]; + uid = [uids nextObject]; + } } else [response setStatus: 404]; @@ -302,8 +310,8 @@ WOResponse *response; NSString *uid, *foldersString; NSMutableString *responseString; - NSDictionary *result; - NSEnumerator *resultsEnum; + NSDictionary *contact; + NSEnumerator *contacts; NSArray *folders; response = [context response]; @@ -311,21 +319,26 @@ if ([results count]) { [response setStatus: 200]; - [response setHeader: @"text/plain; charset=iso-8859-1" + [response setHeader: @"text/plain; charset=utf-8" forKey: @"Content-Type"]; responseString = [NSMutableString new]; - resultsEnum = [results objectEnumerator]; - result = [resultsEnum nextObject]; - while (result) + contacts = [results objectEnumerator]; + contact = [contacts nextObject]; + while (contact) { - uid = [result objectForKey: @"c_uid"]; - folders = [self _foldersForUID: uid ofType: folderType]; - foldersString - = [self _foldersStringForFolders: [folders objectEnumerator]]; - [responseString appendFormat: @"%@:%@%@\n", - uid, [self _emailForResult: result], foldersString]; - result = [resultsEnum nextObject]; + uid = [contact objectForKey: @"c_uid"]; + if ([uid length] > 0) + { + folders = [self _foldersForUID: uid ofType: folderType]; + foldersString + = [self _foldersStringForFolders: [folders objectEnumerator]]; + [responseString appendFormat: @"%@:%@:%@%@\n", uid, + [contact objectForKey: @"cn"], + [contact objectForKey: @"c_email"], + foldersString]; + } + contact = [contacts nextObject]; } [response appendContentString: responseString]; [responseString release]; @@ -340,17 +353,16 @@ { NSString *contact, *folderType; id result; - BOOL ldapOnly; + LDAPUserManager *um; + um = [LDAPUserManager sharedUserManager]; contact = [self queryParameterForKey: @"search"]; if ([contact length] > 0) { - ldapOnly = [[self queryParameterForKey: @"ldap-only"] boolValue]; folderType = [self queryParameterForKey: @"type"]; - result = [self _foldersResponseForResults: - [self _searchResults: contact - ldapFoldersOnly: ldapOnly] - withType: folderType]; + result + = [self _foldersResponseForResults: [um fetchContactsMatching: contact] + withType: folderType]; } else result = [NSException exceptionWithHTTPStatus: 400 diff --git a/UI/Contacts/UIxContactsListViewContainer.m b/UI/Contacts/UIxContactsListViewContainer.m index 34fa3a32c..2bf4f0c09 100644 --- a/UI/Contacts/UIxContactsListViewContainer.m +++ b/UI/Contacts/UIxContactsListViewContainer.m @@ -27,7 +27,6 @@ #import #import -#import #import #import @@ -128,20 +127,16 @@ - (NSString *) currentContactFolderName { - return [self labelForKey: [currentFolder displayName]]; + return [currentFolder displayName]; } - (NSArray *) additionalFolders { - AgenorUserManager *um; NSUserDefaults *ud; - NSString *login; if (!additionalFolders) { - um = [AgenorUserManager sharedUserManager]; - login = [[context activeUser] login]; - ud = [um getUserSettingsForUID: login]; + ud = [[context activeUser] userSettings]; additionalFolders = [[ud objectForKey: @"Contacts"] objectForKey: @"SubscribedFolders"]; [additionalFolders retain]; diff --git a/UI/MailPartViewers/UIxMailPartICalViewer.m b/UI/MailPartViewers/UIxMailPartICalViewer.m index 5a3285e10..494d21d42 100644 --- a/UI/MailPartViewers/UIxMailPartICalViewer.m +++ b/UI/MailPartViewers/UIxMailPartICalViewer.m @@ -26,7 +26,7 @@ */ #import -#import +#import #import #import #import @@ -189,8 +189,15 @@ - (id)calendarFolder { /* return scheduling calendar of currently logged-in user */ - return [[[self context] activeUser] schedulingCalendarInContext: - [self context]]; + SOGoUser *user; + id folder; + + user = [context activeUser]; + folder = [[user homeFolderInContext: context] lookupName: @"Calendar" + inContext: context + acquire: NO]; + + return folder; } - (id)storedEventObject { @@ -238,7 +245,7 @@ /* organizer tracking */ - (NSString *)loggedInUserEMail { - return [[[self context] activeUser] email]; + return [[[self context] activeUser] primaryEmail]; } - (iCalEvent *)authorativeEvent { diff --git a/UI/Scheduler/UIxComponentEditor.m b/UI/Scheduler/UIxComponentEditor.m index a84b1ca67..910fc8dc6 100644 --- a/UI/Scheduler/UIxComponentEditor.m +++ b/UI/Scheduler/UIxComponentEditor.m @@ -40,7 +40,6 @@ #import #import -#import #import #import #import @@ -48,7 +47,7 @@ #import #import -#import "UIxComponent+Agenor.h" +#import "UIxComponent+Scheduler.h" #import "UIxComponentEditor.h" @@ -653,8 +652,7 @@ - (BOOL) isMyComponent { - // TODO: this should check a set of emails against the SoUser - return ([[organizer rfc822Email] isEqualToString: [self emailForUser]]); + return ([[context activeUser] hasEmail: [organizer rfc822Email]]); } - (BOOL) canEditComponent @@ -794,6 +792,7 @@ - (void) _handleOrganizer { NSString *organizerEmail; + SOGoUser *activeUser; organizerEmail = [[component organizer] email]; if ([organizerEmail length] == 0) @@ -801,8 +800,9 @@ if ([[component attendees] count] > 0) { ASSIGN (organizer, [iCalPerson elementWithTag: @"organizer"]); - [organizer setCn: [self cnForUser]]; - [organizer setEmail: [self emailForUser]]; + activeUser = [context activeUser]; + [organizer setCn: [activeUser cn]]; + [organizer setEmail: [activeUser primaryEmail]]; [component setOrganizer: organizer]; } }