Merge pull request #29 from alexcloutier/feat/1496

New feature : 1496

Don't forget to fix the typo.
This commit is contained in:
extrafu committed 2014-04-07 19:42:31 -04:00
commit bf64076b87
19 files changed
+430 -127

No files matched your search

+9 -74
View File
@@ -158,88 +158,23 @@ Class SOGoContactSourceFolderK, SOGoGCSFolderK;
- (id <WOActionResults>) allContactSearchAction
{
id <WOActionResults> result;
SOGoFolder <SOGoContactFolder> *folder;
NSString *searchText, *mail, *domain;
NSString *searchText;
NSDictionary *data;
NSArray *folders, *contacts, *descriptors, *sortedContacts;
NSMutableArray *sortedFolders;
NSMutableDictionary *contact, *uniqueContacts;
unsigned int i, j, max;
NSSortDescriptor *commonNameDescriptor;
NSArray *sortedContacts;
BOOL excludeGroups, excludeLists;
searchText = [self queryParameterForKey: @"search"];
if ([searchText length] > 0)
{
// NSLog(@"Search all contacts: %@", searchText);
excludeGroups = [[self queryParameterForKey: @"excludeGroups"] boolValue];
excludeLists = [[self queryParameterForKey: @"excludeLists"] boolValue];
domain = [[context activeUser] domain];
folders = nil;
NS_DURING
folders = [[self clientObject] subFolders];
NS_HANDLER
/* We need to specifically test for @"SOGoDBException", which is
raised explicitly in SOGoParentFolder. Any other exception should
be re-raised. */
if ([[localException name] isEqualToString: @"SOGoDBException"])
folders = nil;
else
[localException raise];
NS_ENDHANDLER;
max = [folders count];
sortedFolders = [NSMutableArray arrayWithCapacity: max];
uniqueContacts = [NSMutableDictionary dictionary];
for (i = 0; i < max; i++)
{
folder = [folders objectAtIndex: i];
/* We first search in LDAP folders (in case of duplicated entries in GCS folders) */
if ([folder isKindOfClass: SOGoContactSourceFolderK])
[sortedFolders insertObject: folder atIndex: 0];
else
[sortedFolders addObject: folder];
}
for (i = 0; i < max; i++)
{
folder = [sortedFolders objectAtIndex: i];
//NSLog(@" Address book: %@ (%@)", [folder displayName], [folder class]);
contacts = [folder lookupContactsWithFilter: searchText
onCriteria: @"name_or_address"
sortBy: @"c_cn"
ordering: NSOrderedAscending
inDomain: domain];
for (j = 0; j < [contacts count]; j++)
{
contact = [contacts objectAtIndex: j];
mail = [contact objectForKey: @"c_mail"];
//NSLog(@" found %@ (%@) ? %@", [contact objectForKey: @"c_name"], mail,
// [contact description]);
if (!excludeLists && [[contact objectForKey: @"c_component"]
isEqualToString: @"vlist"])
{
[contact setObject: [folder nameInContainer]
forKey: @"container"];
[uniqueContacts setObject: contact
forKey: [contact objectForKey: @"c_name"]];
}
else if ([mail length]
&& [uniqueContacts objectForKey: mail] == nil
&& !(excludeGroups && [contact objectForKey: @"isGroup"]))
[uniqueContacts setObject: contact forKey: mail];
}
}
if ([uniqueContacts count] > 0)
{
// Sort the contacts by display name
commonNameDescriptor = [[NSSortDescriptor alloc] initWithKey: @"c_cn"
ascending:YES];
descriptors = [NSArray arrayWithObjects: commonNameDescriptor, nil];
[commonNameDescriptor release];
sortedContacts = [[uniqueContacts allValues]
sortedArrayUsingDescriptors: descriptors];
}
else
sortedContacts = [NSArray array];
sortedContacts = [[self clientObject] allContactsFromFilter: searchText
excludeGroups: excludeGroups
excludeLists: excludeLists];
data = [NSDictionary dictionaryWithObjectsAndKeys: searchText, @"searchText",
sortedContacts, @"contacts",
nil];
@@ -97,8 +97,7 @@
"Show time as busy outside working hours" = "Show time as busy outside working hours";
"First week of year :" = "First week of year:";
"Enable reminders for Calendar items" = "Enable reminders for Calendar items";
"Play a sound when a reminder comes due"
= "Play a sound when a reminder comes due";
"Play a sound when a reminder comes due" = "Play a sound when a reminder comes due";
"Default reminder :" = "Default reminder:";
"firstWeekOfYear_January1" = "Starts on january 1";
@@ -157,6 +156,10 @@
"displayremoteinlineimages_never" = "Never";
"displayremoteinlineimages_always" = "Always";
/* Contact */
"Personal Address Book" = "Personal Address Book";
"Collected Address Book" = "Collected Address Book";
/* IMAP Accounts */
"New Mail Account" = "New Mail Account";
@@ -157,6 +157,10 @@
"displayremoteinlineimages_never" = "Jamais";
"displayremoteinlineimages_always" = "Toujours";
/* Contact */
"Personal Address Book" = "Carnet d'adresses personnel";
"Collected Address Book" = "Carnet d'adresses collectés";
/* IMAP Accounts */
"New Mail Account" = "Nouveau compte";
+3
View File
@@ -33,6 +33,9 @@
id item;
SOGoUser *user;
// Addressbook
NSMutableDictionary *addressBooksIDWithDisplayName;
// Calendar categories
NSString *category;
NSArray *calendarCategories;
+75
View File
@@ -51,6 +51,8 @@
#import <Mailer/SOGoMailAccounts.h>
#import <Mailer/SOGoMailLabel.h>
#import <Contacts/SOGoContactGCSFolder.h>
#import "UIxPreferences.h"
#warning this class is not finished
@@ -115,6 +117,7 @@ static NSArray *reminderValues = nil;
if ((self = [super init]))
{
item = nil;
addressBooksIDWithDisplayName = nil;
#warning user should be the owner rather than the activeUser
ASSIGN (user, [context activeUser]);
ASSIGN (today, [NSCalendarDate date]);
@@ -175,6 +178,7 @@ static NSArray *reminderValues = nil;
[contactsCategories release];
[forwardOptions release];
[daysOfWeek release];
[addressBooksIDWithDisplayName release];
[super dealloc];
}
@@ -657,6 +661,16 @@ static NSArray *reminderValues = nil;
}
/* Mailer */
- (void) setAddOutgoingAddresses: (BOOL) addOutgoingAddresses
{
[userDefaults setMailAddOutgoingAddresses: addOutgoingAddresses];
}
- (BOOL) addOutgoingAddresses
{
return [userDefaults mailAddOutgoingAddresses];
}
- (void) setShowSubscribedFoldersOnly: (BOOL) showSubscribedFoldersOnly
{
[userDefaults setMailShowSubscribedFoldersOnly: showSubscribedFoldersOnly];
@@ -677,6 +691,67 @@ static NSArray *reminderValues = nil;
return [userDefaults mailSortByThreads];
}
- (NSArray *) addressBookList
{
/* We want all the SourceIDS */
NSMutableArray *folders, *contactFolders, *availableAddressBooksID, *availableAddressBooksName;
int i, count;
BOOL collectedAlreadyExist;
contactFolders = [[[context activeUser] homeFolderInContext: context]
lookupName: @"Contacts"
inContext: context
acquire: NO];
folders = [NSMutableArray arrayWithArray: [contactFolders subFolders]];
count = [folders count]-1;
// Inside this loop we remove all the public or shared addressbooks
for (count; count >= 0; count--)
{
if (![[folders objectAtIndex: count] isKindOfClass: [SOGoContactGCSFolder class]])
[folders removeObjectAtIndex: count];
}
// Parse the objects in order to have only the displayName of the addressbooks to be displayed on the preferences interface
availableAddressBooksID = [NSMutableArray arrayWithCapacity: [folders count]];
availableAddressBooksName = [NSMutableArray arrayWithCapacity: [folders count]];
count = [folders count]-1;
collectedAlreadyExist = false;
for (i = 0; i <= count ; i++) {
[availableAddressBooksID addObject:[[folders objectAtIndex:i] realNameInContainer]];
[availableAddressBooksName addObject:[[folders objectAtIndex:i] displayName]];
if ([[availableAddressBooksID objectAtIndex:i] isEqualToString: @"collected"])
collectedAlreadyExist = true;
}
// Create the dictionary for the next function : itemAddressBookText.
if (!addressBooksIDWithDisplayName)
addressBooksIDWithDisplayName = [[NSMutableDictionary alloc] initWithObjects:availableAddressBooksName
forKeys:availableAddressBooksID];
if (!collectedAlreadyExist)
{
[availableAddressBooksID addObject: @"collected"];
[addressBooksIDWithDisplayName setObject: [self labelForKey: @"Collected Address Book"] forKey: @"collected"];
}
return availableAddressBooksID;
}
- (NSString *) itemAddressBookText
{
return [addressBooksIDWithDisplayName objectForKey: item];
}
- (NSString *) userAddressBook
{
return [userDefaults selectedAddressBook];
}
- (void) setUserAddressBook: (NSString *) newSelectedAddressBook
{
[userDefaults setSelectedAddressBook: newSelectedAddressBook];
}
- (NSArray *) messageCheckList
{
NSArray *intervalsList;
@@ -296,6 +296,16 @@
const:id="sortByThreads"
var:checked="sortByThreads" />
<var:string label:value="Sort messages by threads"/></dd>
<dd><input type="checkbox"
const:name="addOutgoingAddresses"
const:id="addOutgoingAddresses"
var:checked="addOutgoingAddresses" />
<var:string label:value="Automatically add outgoing e-mail addresses to my :"/>
<var:popup list="addressBookList" item="item"
const:id="addressBookList"
const:name="addressBookList"
string="itemAddressBookText" selection="userAddressBook"/></dd>
<dt></dt>
<dt><var:string label:value="Check for new mail:"/></dt>
<dd><var:popup list="messageCheckList" item="item"
const:id="messageCheck"