(feat) added custom fields support from Thunderbird's address book

This commit is contained in:
Ludovic Marcotte
2017-05-30 10:38:31 -04:00
parent 95d08c0150
commit ec397b39b0
7 changed files with 173 additions and 5 deletions

1
NEWS
View File

@@ -5,6 +5,7 @@ Enhancements
- [core] improved event initation for all day events (#4145)
- [core] now possible to {un}subscribe to folders using sogo-tool
- [eas] added photo support for GAL search operations
- [web] added custom fields support from Thunderbird's address book
Bug fixes
- [core] fixed calendar component move across collections (#4116)

View File

@@ -1,6 +1,6 @@
/* NGVCard+SOGo.h - this file is part of SOGo
*
* Copyright (C) 2009-2014 Inverse inc.
* Copyright (C) 2009-2017 Inverse inc.
*
* 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
@@ -45,6 +45,10 @@
- (NSString *) pager;
- (NSCalendarDate *) birthday;
- (void) addElementWithTag: (NSString *) elementTag
ofType: (NSString *) type
withValue: (id) value;
@end
#endif /* NGVCARD_SOGO_H */

View File

@@ -217,9 +217,9 @@ convention:
- (void) updateFromLDIFRecord: (NSDictionary *) ldifRecord
{
NSInteger year, yearOfToday, month, day;
NSArray *units, *elements;
CardElement *element;
NSCalendarDate *now;
NSArray *units;
NSString *fn, *ou;
id o;
@@ -320,6 +320,43 @@ convention:
else
[self setCategories: [o componentsSeparatedByString: @","]];
// Custom fields from Thunderbird
if ((o = [ldifRecord objectForKey: @"custom1"]))
{
elements = [self childrenWithTag: @"custom1"];
[self removeChildren: elements];
if ([o length])
[self addElementWithTag: @"custom1" ofType: nil withValue: o];
}
if ((o = [ldifRecord objectForKey: @"custom2"]))
{
elements = [self childrenWithTag: @"custom2"];
[self removeChildren: elements];
if ([o length])
[self addElementWithTag: @"custom2" ofType: nil withValue: o];
}
if ((o = [ldifRecord objectForKey: @"custom3"]))
{
elements = [self childrenWithTag: @"custom3"];
[self removeChildren: elements];
if ([o length])
[self addElementWithTag: @"custom3" ofType: nil withValue: o];
}
if ((o = [ldifRecord objectForKey: @"custom4"]))
{
elements = [self childrenWithTag: @"custom4"];
[self removeChildren: elements];
if ([o length])
[self addElementWithTag: @"custom4" ofType: nil withValue: o];
}
[self cleanupEmptyChildren];
}
@@ -646,6 +683,19 @@ convention:
dn = @"";
[ldifRecord setObject: dn forKey: @"dn"];
// Custom fields from Thunderbird
if ((stringValue = [[self uniqueChildWithTag: @"custom1"] flattenedValuesForKey: @""]) && [stringValue length])
[ldifRecord setObject: stringValue forKey: @"custom1"];
if ((stringValue = [[self uniqueChildWithTag: @"custom2"] flattenedValuesForKey: @""]) && [stringValue length])
[ldifRecord setObject: stringValue forKey: @"custom2"];
if ((stringValue = [[self uniqueChildWithTag: @"custom3"] flattenedValuesForKey: @""]) && [stringValue length])
[ldifRecord setObject: stringValue forKey: @"custom3"];
if ((stringValue = [[self uniqueChildWithTag: @"custom4"] flattenedValuesForKey: @""]) && [stringValue length])
[ldifRecord setObject: stringValue forKey: @"custom4"];
return ldifRecord;
}
@@ -871,4 +921,33 @@ convention:
return fields;
}
- (void) addElementWithTag: (NSString *) elementTag
ofType: (NSString *) type
withValue: (id) value
{
NSArray *allValues;
NSEnumerator *list;
CardElement *element;
// value is either an array or a string
if ([value isKindOfClass: [NSString class]])
allValues = [NSArray arrayWithObject: value];
else
allValues = value;
// Add all values as separate elements
list = [allValues objectEnumerator];
while ((value = [list nextObject]))
{
if ([type length])
element = [CardElement simpleElementWithTag: elementTag
singleType: type
value: value];
else
element = [CardElement simpleElementWithTag: elementTag
value: value];
[self addChild: element];
}
}
@end /* NGVCard */

View File

@@ -1,6 +1,6 @@
/*
Copyright (C) 2004-2005 SKYRIX Software AG
Copyright (C) 2005-2015 Inverse inc.
Copyright (C) 2005-2017 Inverse inc.
This file is part of SOGo

View File

@@ -1,6 +1,6 @@
/*
Copyright (C) 2004 SKYRIX Software AG
Copyright (C) 2005-2015 Inverse inc.
Copyright (C) 2005-2017 Inverse inc.
This file is part of SOGo.
@@ -573,11 +573,55 @@
return [self _urlOfType: @"work"];
}
- (NSString *) custom1
{
NSString *value;
value = [[card uniqueChildWithTag: @"custom1"] flattenedValuesForKey: @""];
value = [value stringByEscapingHTMLString];
return [self _cardStringWithLabel: @"Custom 1" value: value];
}
- (NSString *) custom2
{
NSString *value;
value = [[card uniqueChildWithTag: @"custom2"] flattenedValuesForKey: @""];
value = [value stringByEscapingHTMLString];
return [self _cardStringWithLabel: @"Custom 2" value: value];
}
- (NSString *) custom3
{
NSString *value;
value = [[card uniqueChildWithTag: @"custom3"] flattenedValuesForKey: @""];
value = [value stringByEscapingHTMLString];
return [self _cardStringWithLabel: @"Custom 3" value: value];
}
- (NSString *) custom4
{
NSString *value;
value = [[card uniqueChildWithTag: @"custom4"] flattenedValuesForKey: @""];
value = [value stringByEscapingHTMLString];
return [self _cardStringWithLabel: @"Custom 4" value: value];
}
- (BOOL) hasOtherInfos
{
return ([[card note] length] > 0
|| [[card bday] length] > 0
|| [[card tz] length] > 0);
|| [[card tz] length] > 0
|| [[[card uniqueChildWithTag: @"custom1"] flattenedValuesForKey: @""] length] > 0
|| [[[card uniqueChildWithTag: @"custom1"] flattenedValuesForKey: @""] length] > 0
|| [[[card uniqueChildWithTag: @"custom1"] flattenedValuesForKey: @""] length] > 0
|| [[[card uniqueChildWithTag: @"custom1"] flattenedValuesForKey: @""] length] > 0);
}
- (NSString *) bday

View File

@@ -377,6 +377,42 @@
</div>
</td>
</tr>
<tr>
<td>
<label><var:string label:value="Custom 1"
/>
<input type="text" class="textField" name="custom1"
id="nsaimid" var:value="ldifRecord.custom1"
/></label>
</td>
</tr>
<tr>
<td>
<label><var:string label:value="Custom 2"
/>
<input type="text" class="textField" name="custom2"
id="nsaimid" var:value="ldifRecord.custom2"
/></label>
</td>
</tr>
<tr>
<td>
<label><var:string label:value="Custom 3"
/>
<input type="text" class="textField" name="custom3"
id="nsaimid" var:value="ldifRecord.custom3"
/></label>
</td>
</tr>
<tr>
<td>
<label><var:string label:value="Custom 4"
/>
<input type="text" class="textField" name="custom4"
id="nsaimid" var:value="ldifRecord.custom4"
/></label>
</td>
</tr>
<tr>
<td>
<label><var:string label:value="Note" /></label>

View File

@@ -48,6 +48,10 @@
<dl class="dl-horizontal">
<var:string value="bday" escapeHTML="NO"
/><var:string value="tz" escapeHTML="NO"
/><var:string value="custom1" escapeHTML="NO"
/><var:string value="custom2" escapeHTML="NO"
/><var:string value="custom3" escapeHTML="NO"
/><var:string value="custom4" escapeHTML="NO"
/><var:string value="note" escapeHTML="NO"
/>
</dl>