/* UIxContactFoldersView.m - this file is part of SOGo * * Copyright (C) 2006 Inverse groupe conseil * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import #import #import #import "common.h" #import "UIxContactFoldersView.h" @implementation UIxContactFoldersView - (id) _selectActionForApplication: (NSString *) actionName { SOGoContactFolders *folders; NSString *url, *action; WORequest *request; folders = [self clientObject]; action = [NSString stringWithFormat: @"../%@/%@", [folders defaultSourceName], actionName]; request = [[self context] request]; url = [[request uri] composeURLWithAction: action parameters: [self queryParameters] andHash: NO]; return [self redirectToLocation: url]; } - (id) defaultAction { return [self _selectActionForApplication: @"view"]; } - (id) newAction { return [self _selectActionForApplication: @"new"]; } - (id) selectForSchedulerAction { return [self _selectActionForApplication: @"scheduler-contacts"]; } - (id) selectForMailerAction { return [self _selectActionForApplication: @"mailer-contacts"]; } - (id) selectForCalendarsAction { return [self _selectActionForApplication: @"calendars-contacts"]; } - (NSArray *) _searchResults: (NSString *) contact { NSMutableArray *results; SOGoContactFolders *topFolder; NSEnumerator *sogoContactFolders; id currentFolder; results = [NSMutableArray new]; [results autorelease]; topFolder = [self clientObject]; sogoContactFolders = [[topFolder contactFolders] objectEnumerator]; currentFolder = [sogoContactFolders nextObject]; while (currentFolder) { [results addObjectsFromArray: [currentFolder lookupContactsWithFilter: contact sortBy: @"cn" ordering: NSOrderedAscending]]; currentFolder = [sogoContactFolders nextObject]; } [topFolder release]; return results; } - (NSString *) _emailForResult: (NSDictionary *) result { NSMutableString *email; NSString *name, *mail; email = [NSMutableString string]; name = [result objectForKey: @"displayName"]; if (![name length]) name = [result objectForKey: @"cn"]; mail = [result objectForKey: @"mail"]; if ([name length]) [email appendFormat: @"%@ <%@>", name, mail]; else [email appendString: mail]; NSLog(@"email: '%@'", email); return email; } - (WOResponse *) _responseForResults: (NSArray *) results { WOResponse *response; NSString *email, *responseString; NSDictionary *result; response = [context response]; if ([results count]) { result = [results objectAtIndex: 0]; email = [self _emailForResult: result]; responseString = [NSString stringWithFormat: @"%@:%@", [result objectForKey: @"c_uid"], email]; [response setStatus: 200]; [response setHeader: @"text/plain; charset=iso-8859-1" forKey: @"Content-Type"]; [response appendContentString: responseString]; } else [response setStatus: 404]; return response; } - (id ) contactSearchAction { NSString *contact; id result; contact = [self queryParameterForKey: @"search"]; if ([contact length]) result = [self _responseForResults: [self _searchResults: contact]]; else result = [NSException exceptionWithHTTPStatus: 400 reason: @"missing 'search' parameter"]; return result; } @end