Monotone-Parent: ce3c09cbf962262c8c3d04cf4422dbd4ded3a5c9

Monotone-Revision: 76a1bb772c883ebc00f5cdb177c280f729babb70

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2007-03-29T17:12:44
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
Wolfgang Sourdeau 2007-03-29 17:12:44 +00:00
parent 780d474031
commit c0369494d1
3 changed files with 183 additions and 94 deletions

View File

@ -1,3 +1,14 @@
2007-03-29 Wolfgang Sourdeau <Wolfgang@Contre.COM>
* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
-checkRightsAction]): removed method.
* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
-updateAdditionalAddressBooksAction]): removed method.
* UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
-updateCalendarsAction]): removed method.
2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* UI/Scheduler/UIxCalMainView.m ([UIxCalMainView

View File

@ -27,11 +27,15 @@
#import <NGObjWeb/WOResponse.h>
#import <NGObjWeb/WOContext.h>
#import <GDLContentStore/GCSFolder.h>
#import <GDLContentStore/GCSFolderManager.h>
#import <SoObjects/SOGo/SOGoUser.h>
#import <SoObjects/SOGo/NSString+Utilities.h>
#import <SoObjects/Contacts/SOGoContactFolders.h>
#import <SoObjects/Contacts/SOGoContactFolder.h>
#import <SoObjects/Contacts/SOGoContactGCSFolder.h>
#import <SoObjects/Contacts/SOGoContactLDAPFolder.h>
#import "common.h"
@ -84,32 +88,13 @@
return response;
}
- (id) selectForSchedulerAction
{
return [self _selectActionForApplication: @"scheduler-contacts"];
}
- (id) selectForMailerAction
{
return [self _selectActionForApplication: @"mailer-contacts"];
}
- (id) selectForCalendarsAction
{
return [self _selectActionForApplication: @"calendars-contacts"];
}
- (id) selectForAddressBooksAction
{
return [self _selectActionForApplication: @"addressbooks-contacts"];
}
- (id) selectForAclsAction
{
return [self _selectActionForApplication: @"acls-contacts"];
}
- (NSArray *) _searchResults: (NSString *) contact
ldapFoldersOnly: (BOOL) ldapFoldersOnly
{
NSMutableArray *results;
SOGoContactFolders *topFolder;
@ -124,10 +109,12 @@
currentFolder = [sogoContactFolders nextObject];
while (currentFolder)
{
[results addObjectsFromArray: [currentFolder
lookupContactsWithFilter: contact
sortBy: @"cn"
ordering: NSOrderedAscending]];
if (!ldapFoldersOnly
|| [currentFolder isKindOfClass: [SOGoContactLDAPFolder class]])
[results addObjectsFromArray: [currentFolder
lookupContactsWithFilter: contact
sortBy: @"cn"
ordering: NSOrderedAscending]];
currentFolder = [sogoContactFolders nextObject];
}
[topFolder release];
@ -202,10 +189,169 @@
{
NSString *contact;
id <WOActionResults> result;
BOOL ldapFoldersOnly;
contact = [self queryParameterForKey: @"search"];
if ([contact length])
result = [self _responseForResults: [self _searchResults: contact]];
ldapFoldersOnly = [[self queryParameterForKey: @"ldap-only"] boolValue];
if ([contact length] > 0)
result
= [self _responseForResults: [self _searchResults: contact
ldapFoldersOnly: ldapFoldersOnly]];
else
result = [NSException exceptionWithHTTPStatus: 400
reason: @"missing 'search' parameter"];
return result;
}
- (NSArray *) _gcsFoldersFromFolder: (SOGoContactFolders *) contactFolders
{
NSMutableArray *gcsFolders;
NSEnumerator *contactSubfolders;
SOGoContactGCSFolder *currentContactFolder;
NSString *folderName, *displayName;
NSMutableDictionary *currentDictionary;
gcsFolders = [NSMutableArray new];
[gcsFolders autorelease];
contactSubfolders = [[contactFolders contactFolders] objectEnumerator];
currentContactFolder = [contactSubfolders nextObject];
while (currentContactFolder)
{
if ([currentContactFolder
isKindOfClass: [SOGoContactGCSFolder class]])
{
folderName = [NSString stringWithFormat: @"/Contacts/%@",
[currentContactFolder nameInContainer]];
currentDictionary = [NSMutableDictionary new];
[currentDictionary autorelease];
displayName = [[currentContactFolder ocsFolder] folderName];
[currentDictionary setObject: displayName forKey: @"displayName"];
[currentDictionary setObject: folderName forKey: @"name"];
[currentDictionary setObject: @"contact" forKey: @"type"];
[gcsFolders addObject: currentDictionary];
}
currentContactFolder = [contactSubfolders nextObject];
}
return gcsFolders;
}
- (NSArray *) _foldersForUID: (NSString *) uid
ofType: (NSString *) folderType
{
NSObject *topFolder, *userFolder;
SOGoContactFolders *contactFolders;
NSMutableArray *folders;
NSMutableDictionary *currentDictionary;
folders = [NSMutableArray new];
[folders autorelease];
topFolder = [[[self clientObject] container] container];
userFolder = [topFolder lookupName: uid inContext: context acquire: NO];
/* FIXME: should be moved in the SOGo* classes. Maybe by having a SOGoFolderManager. */
#warning this might need adjustments whenever we permit multiple calendar folders per-user
if ([folderType length] == 0 || [folderType isEqualToString: @"calendar"])
{
currentDictionary = [NSMutableDictionary new];
[currentDictionary autorelease];
[currentDictionary setObject: [self labelForKey: @"Calendar"]
forKey: @"displayName"];
[currentDictionary setObject: @"/Calendar" forKey: @"name"];
[currentDictionary setObject: @"calendar" forKey: @"type"];
[folders addObject: currentDictionary];
}
if ([folderType length] == 0 || [folderType isEqualToString: @"contact"])
{
contactFolders = [userFolder lookupName: @"Contacts"
inContext: context acquire: NO];
[folders
addObjectsFromArray: [self _gcsFoldersFromFolder: contactFolders]];
}
return folders;
}
- (NSString *) _foldersStringForFolders: (NSEnumerator *) folders
{
NSMutableString *foldersString;
NSDictionary *currentFolder;
foldersString = [NSMutableString new];
[foldersString autorelease];
currentFolder = [folders nextObject];
while (currentFolder)
{
[foldersString appendFormat: @";%@:%@:%@",
[currentFolder objectForKey: @"displayName"],
[currentFolder objectForKey: @"name"],
[currentFolder objectForKey: @"type"]];
currentFolder = [folders nextObject];
}
return foldersString;
}
- (WOResponse *) _foldersResponseForResults: (NSArray *) results
withType: (NSString *) folderType
{
WOResponse *response;
NSString *uid, *foldersString;
NSMutableString *responseString;
NSDictionary *result;
NSEnumerator *resultsEnum;
NSArray *folders;
response = [context response];
if ([results count])
{
[response setStatus: 200];
[response setHeader: @"text/plain; charset=iso-8859-1"
forKey: @"Content-Type"];
responseString = [NSMutableString new];
resultsEnum = [results objectEnumerator];
result = [resultsEnum nextObject];
while (result)
{
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];
}
[response appendContentString: responseString];
[responseString release];
}
else
[response setStatus: 404];
return response;
}
- (id <WOActionResults>) foldersSearchAction
{
NSString *contact, *folderType;
id <WOActionResults> result;
BOOL ldapOnly;
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];
}
else
result = [NSException exceptionWithHTTPStatus: 400
reason: @"missing 'search' parameter"];
@ -213,22 +359,6 @@
return result;
}
- (id <WOActionResults>) updateAdditionalAddressBooksAction
{
WOResponse *response;
NSUserDefaults *ud;
ud = [[context activeUser] userDefaults];
[ud setObject: [self queryParameterForKey: @"ids"]
forKey: @"additionaladdressbooks"];
[ud synchronize];
response = [context response];
[response setStatus: 200];
[response setHeader: @"text/html; charset=\"utf-8\"" forKey: @"content-type"];
return response;
}
- (SOGoContactGCSFolder *) contactFolderForUID: (NSString *) uid
{
SOGoFolder *upperContainer;
@ -256,40 +386,4 @@
? contactFolder : nil);
}
- (id <WOActionResults>) checkRightsAction
{
WOResponse *response;
NSUserDefaults *ud;
NSString *uids;
NSMutableString *rights;
NSArray *ids;
unsigned int count, max;
BOOL result;
ud = [[context activeUser] userDefaults];
uids = [ud objectForKey: @"additionaladdressbooks"];
response = [context response];
[response setStatus: 200];
[response setHeader: @"text/plain; charset=\"utf-8\""
forKey: @"content-type"];
rights = [NSMutableString string];
if ([uids length] > 0)
{
ids = [uids componentsSeparatedByString: @","];
max = [ids count];
for (count = 0; count < max; count++)
{
result = ([self contactFolderForUID: [ids objectAtIndex: count]] != nil);
if (count == 0)
[rights appendFormat: @"%d", result];
else
[rights appendFormat: @",%d", result];
}
}
[response appendContentString: rights];
return response;
}
@end

View File

@ -114,20 +114,4 @@ static NSMutableArray *yearMenuItems = nil;
return self;
}
- (id <WOActionResults>) updateCalendarsAction
{
WOResponse *response;
NSUserDefaults *ud;
ud = [[context activeUser] userDefaults];
[ud setObject: [self queryParameterForKey: @"ids"]
forKey: @"calendaruids"];
[ud synchronize];
response = [context response];
[response setStatus: 200];
[response setHeader: @"text/html; charset=\"utf-8\"" forKey: @"content-type"];
return response;
}
@end