From dbffc50f061c6c45bb9f292dec654558ff4010e5 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Fri, 27 Nov 2015 10:58:56 -0500 Subject: [PATCH] (feat) screenname (x-aim) is now shown and editable --- UI/Contacts/UIxContactEditor.m | 10 +- UI/Contacts/UIxContactView.h | 16 +- UI/Contacts/UIxContactView.m | 824 +++++++++--------- .../ContactsUI/UIxContactEditorTemplate.wox | 22 + .../ContactsUI/UIxContactViewTemplate.wox | 10 + .../js/Contacts/Card.service.js | 4 + .../js/Contacts/CardController.js | 4 + 7 files changed, 470 insertions(+), 420 deletions(-) diff --git a/UI/Contacts/UIxContactEditor.m b/UI/Contacts/UIxContactEditor.m index 72f702ff8..abb3e38a9 100644 --- a/UI/Contacts/UIxContactEditor.m +++ b/UI/Contacts/UIxContactEditor.m @@ -349,7 +349,7 @@ static Class SOGoContactGCSEntryK = Nil; NSMutableArray *units, *categories; NSCalendarDate *date; id o; - unsigned int i, year, month, day; + unsigned int i, year, month, day, seconds; [card setNWithFamily: [attributes objectForKey: @"c_sn"] given: [attributes objectForKey: @"c_givenname"] @@ -358,7 +358,12 @@ static Class SOGoContactGCSEntryK = Nil; [card setFn: [attributes objectForKey: @"c_cn"]]; [card setTitle: [attributes objectForKey: @"title"]]; - unsigned int seconds = [[NSString stringWithFormat: @"%@", [attributes objectForKey: @"birthday"]] intValue]; + if ([attributes objectForKey: @"c_screenname"]) + [[card uniqueChildWithTag: @"x-aim"] + setSingleValue: [attributes objectForKey: @"c_screenname"] + forKey: @""]; + + seconds = [[NSString stringWithFormat: @"%@", [attributes objectForKey: @"birthday"]] intValue]; if (seconds > 0) { date = [NSCalendarDate dateWithTimeIntervalSince1970: seconds]; @@ -519,6 +524,7 @@ static Class SOGoContactGCSEntryK = Nil; * @apiParam {String} nickname Nickname * @apiParam {String} c_sn Lastname * @apiParam {String} c_cn Fullname + * @apiParam {String} c_screenname Screen Name (X-AIM for now) * @apiParam {String} tz Timezone * @apiParam {String} note Note * @apiParam {String[]} allCategories All available categories diff --git a/UI/Contacts/UIxContactView.h b/UI/Contacts/UIxContactView.h index d5a9732c5..abffaa1ed 100644 --- a/UI/Contacts/UIxContactView.h +++ b/UI/Contacts/UIxContactView.h @@ -1,18 +1,18 @@ /* - Copyright (C) 2004 SKYRIX Software AG + Copyright (C) 2005-2015 Inverse inc. - This file is part of OpenGroupware.org. - - OGo is free software; you can redistribute it and/or modify it under + This file is part of SOGo. + + SOGo is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. - - OGo is distributed in the hope that it will be useful, but WITHOUT ANY + + SOGo 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 Lesser General Public License for more details. - + You should have received a copy of the GNU Lesser General Public License along with OGo; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA @@ -35,7 +35,7 @@ NSMutableArray *photosURL; } -- (NSString *) fullName; +//- (NSString *) fullName; - (NSArray *) orgUnits; - (NSString *) photoURL; diff --git a/UI/Contacts/UIxContactView.m b/UI/Contacts/UIxContactView.m index e2d634746..ac61300c3 100644 --- a/UI/Contacts/UIxContactView.m +++ b/UI/Contacts/UIxContactView.m @@ -1,5 +1,4 @@ /* - Copyright (C) 2004 SKYRIX Software AG Copyright (C) 2005-2015 Inverse inc. This file is part of SOGo. @@ -69,70 +68,70 @@ /* accessors */ -- (NSString *) _cardStringWithLabel: (NSString *) label - value: (NSString *) value - byEscapingHTMLString: (BOOL) escapeHTML - asLinkScheme: (NSString *) scheme - withLinkAttributes: (NSString *) attrs -{ - NSMutableString *cardString; +// - (NSString *) _cardStringWithLabel: (NSString *) label +// value: (NSString *) value +// byEscapingHTMLString: (BOOL) escapeHTML +// asLinkScheme: (NSString *) scheme +// withLinkAttributes: (NSString *) attrs +// { +// NSMutableString *cardString; - cardString = [NSMutableString stringWithCapacity: 80]; - value = [value stringByReplacingString: @"\r" withString: @""]; - if ([value length] > 0) - { - if (escapeHTML) - value = [value stringByEscapingHTMLString]; - if ([scheme length] > 0) - value = [NSString stringWithFormat: @"%@", scheme, value, attrs, value]; +// cardString = [NSMutableString stringWithCapacity: 80]; +// value = [value stringByReplacingString: @"\r" withString: @""]; +// if ([value length] > 0) +// { +// if (escapeHTML) +// value = [value stringByEscapingHTMLString]; +// if ([scheme length] > 0) +// value = [NSString stringWithFormat: @"%@", scheme, value, attrs, value]; - if (label) - [cardString appendFormat: @"
%@
%@
\n", - [self labelForKey: label], value]; - else - [cardString appendFormat: @"
%@
\n", value]; - } +// if (label) +// [cardString appendFormat: @"
%@
%@
\n", +// [self labelForKey: label], value]; +// else +// [cardString appendFormat: @"
%@
\n", value]; +// } - return cardString; -} +// return cardString; +// } -- (NSString *) _cardStringWithLabel: (NSString *) label - value: (NSString *) value -{ - return [self _cardStringWithLabel: label - value: value - byEscapingHTMLString: YES - asLinkScheme: nil - withLinkAttributes: nil]; -} +// - (NSString *) _cardStringWithLabel: (NSString *) label +// value: (NSString *) value +// { +// return [self _cardStringWithLabel: label +// value: value +// byEscapingHTMLString: YES +// asLinkScheme: nil +// withLinkAttributes: nil]; +// } -- (NSString *) _cardStringWithLabel: (NSString *) label - value: (NSString *) value - asLinkScheme: (NSString *) scheme -{ - return [self _cardStringWithLabel: label - value: value - byEscapingHTMLString: YES - asLinkScheme: scheme - withLinkAttributes: nil]; -} +// - (NSString *) _cardStringWithLabel: (NSString *) label +// value: (NSString *) value +// asLinkScheme: (NSString *) scheme +// { +// return [self _cardStringWithLabel: label +// value: value +// byEscapingHTMLString: YES +// asLinkScheme: scheme +// withLinkAttributes: nil]; +// } -- (NSString *) displayName -{ - return [self _cardStringWithLabel: @"Display Name:" - value: [card fn]]; -} +// - (NSString *) displayName +// { +// return [self _cardStringWithLabel: @"Display Name:" +// value: [card fn]]; +// } -- (NSString *) nickName -{ - return [self _cardStringWithLabel: @"Nickname:" - value: [card nickname]]; -} +// - (NSString *) nickName +// { +// return [self _cardStringWithLabel: @"Nickname:" +// value: [card nickname]]; +// } -- (NSString *) fullName -{ - return [card fullName]; -} +// - (NSString *) fullName +// { +// return [card fullName]; +// } - (NSArray *) _languageContactsCategories { @@ -173,345 +172,345 @@ return cats; } -- (NSString *) primaryEmail -{ - NSString *email, *fn, *attrs; +// - (NSString *) primaryEmail +// { +// NSString *email, *fn, *attrs; - email = [card preferredEMail]; - if ([email length] > 0) - { - fn = [card fn]; - if ([fn length] > 0) - attrs = [NSString stringWithFormat: @"%@ <%@>", fn, email]; - else - attrs = email; - attrs = [attrs stringByReplacingString: @"'" withString: @"\\'"]; - attrs = [attrs stringByReplacingString: @"\"" withString: @"\\\""]; - attrs = [NSString stringWithFormat: @"onclick=\"return openMailTo('%@');\"", attrs]; - } - else - { - attrs = nil; - } +// email = [card preferredEMail]; +// if ([email length] > 0) +// { +// fn = [card fn]; +// if ([fn length] > 0) +// attrs = [NSString stringWithFormat: @"%@ <%@>", fn, email]; +// else +// attrs = email; +// attrs = [attrs stringByReplacingString: @"'" withString: @"\\'"]; +// attrs = [attrs stringByReplacingString: @"\"" withString: @"\\\""]; +// attrs = [NSString stringWithFormat: @"onclick=\"return openMailTo('%@');\"", attrs]; +// } +// else +// { +// attrs = nil; +// } - return [self _cardStringWithLabel: @"Email:" - value: email - byEscapingHTMLString: YES - asLinkScheme: @"mailto:" - withLinkAttributes: attrs]; -} +// return [self _cardStringWithLabel: @"Email:" +// value: email +// byEscapingHTMLString: YES +// asLinkScheme: @"mailto:" +// withLinkAttributes: attrs]; +// } -- (NSArray *) secondaryEmails -{ - NSMutableArray *secondaryEmails; - NSString *email, *fn, *attrs; - NSArray *emails; +// - (NSArray *) secondaryEmails +// { +// NSMutableArray *secondaryEmails; +// NSString *email, *fn, *attrs; +// NSArray *emails; - emails = [card secondaryEmails]; - secondaryEmails = [NSMutableArray array]; - attrs = nil; +// emails = [card secondaryEmails]; +// secondaryEmails = [NSMutableArray array]; +// attrs = nil; - // We might not have a preferred item but rather something like this: - // EMAIL;TYPE=work:dd@ee.com - // EMAIL;TYPE=home:ff@gg.com - // - // or: - // - // EMAIL;TYPE=INTERNET:a@a.com - // EMAIL;TYPE=INTERNET,HOME:b@b.com - // - // In this case, we always return the entry NOT matching the primaryEmail - if ([emails count] > 0) - { - int i; +// // We might not have a preferred item but rather something like this: +// // EMAIL;TYPE=work:dd@ee.com +// // EMAIL;TYPE=home:ff@gg.com +// // +// // or: +// // +// // EMAIL;TYPE=INTERNET:a@a.com +// // EMAIL;TYPE=INTERNET,HOME:b@b.com +// // +// // In this case, we always return the entry NOT matching the primaryEmail +// if ([emails count] > 0) +// { +// int i; - for (i = 0; i < [emails count]; i++) - { - email = [[emails objectAtIndex: i] flattenedValuesForKey: @""]; - if ([email length]) - { - fn = [card fn]; - if ([fn length]) - attrs = [NSString stringWithFormat: @"%@ <%@>", fn, email]; - else - attrs = email; - attrs = [attrs stringByReplacingString: @"'" withString: @"\\'"]; - attrs = [attrs stringByReplacingString: @"\"" withString: @"\\\""]; - attrs = [NSString stringWithFormat: @"onclick=\"return openMailTo('%@');\"", attrs]; +// for (i = 0; i < [emails count]; i++) +// { +// email = [[emails objectAtIndex: i] flattenedValuesForKey: @""]; +// if ([email length]) +// { +// fn = [card fn]; +// if ([fn length]) +// attrs = [NSString stringWithFormat: @"%@ <%@>", fn, email]; +// else +// attrs = email; +// attrs = [attrs stringByReplacingString: @"'" withString: @"\\'"]; +// attrs = [attrs stringByReplacingString: @"\"" withString: @"\\\""]; +// attrs = [NSString stringWithFormat: @"onclick=\"return openMailTo('%@');\"", attrs]; - [secondaryEmails addObject: [self _cardStringWithLabel: nil - value: email - byEscapingHTMLString: YES - asLinkScheme: @"mailto:" - withLinkAttributes: attrs]]; - } - } - } - else - { - [secondaryEmails addObject: [self _cardStringWithLabel: nil - value: nil]]; - } +// [secondaryEmails addObject: [self _cardStringWithLabel: nil +// value: email +// byEscapingHTMLString: YES +// asLinkScheme: @"mailto:" +// withLinkAttributes: attrs]]; +// } +// } +// } +// else +// { +// [secondaryEmails addObject: [self _cardStringWithLabel: nil +// value: nil]]; +// } - return secondaryEmails; -} +// return secondaryEmails; +// } -- (NSString *) screenName -{ - NSString *screenName; +// - (NSString *) screenName +// { +// NSString *screenName; - screenName = [[card uniqueChildWithTag: @"x-aim"] flattenedValuesForKey: @""]; +// screenName = [[card uniqueChildWithTag: @"x-aim"] flattenedValuesForKey: @""]; - return [self _cardStringWithLabel: @"Screen Name:" - value: screenName - asLinkScheme: @"aim:goim?screenname="]; -} +// return [self _cardStringWithLabel: @"Screen Name:" +// value: screenName +// asLinkScheme: @"aim:goim?screenname="]; +// } -- (NSString *) preferredTel -{ - return [self _cardStringWithLabel: @"Phone Number:" - value: [card preferredTel] asLinkScheme: @"tel:"]; -} +// - (NSString *) preferredTel +// { +// return [self _cardStringWithLabel: @"Phone Number:" +// value: [card preferredTel] asLinkScheme: @"tel:"]; +// } -- (NSString *) preferredAddress -{ - return @""; -} +// - (NSString *) preferredAddress +// { +// return @""; +// } -- (BOOL) hasTelephones -{ - if (!phones) - phones = [card childrenWithTag: @"tel"]; +// - (BOOL) hasTelephones +// { +// if (!phones) +// phones = [card childrenWithTag: @"tel"]; - return ([phones count] > 0); -} +// return ([phones count] > 0); +// } -- (NSString *) workPhone -{ - // We do this (exclude FAX) in order to avoid setting the WORK number as the FAX - // one if we do see the FAX field BEFORE the WORK number. - return [self _cardStringWithLabel: @"Work:" value: [card workPhone] asLinkScheme: @"tel:"]; -} +// - (NSString *) workPhone +// { +// // We do this (exclude FAX) in order to avoid setting the WORK number as the FAX +// // one if we do see the FAX field BEFORE the WORK number. +// return [self _cardStringWithLabel: @"Work:" value: [card workPhone] asLinkScheme: @"tel:"]; +// } -- (NSString *) homePhone -{ - return [self _cardStringWithLabel: @"Home:" value: [card homePhone] asLinkScheme: @"tel:"]; -} +// - (NSString *) homePhone +// { +// return [self _cardStringWithLabel: @"Home:" value: [card homePhone] asLinkScheme: @"tel:"]; +// } -- (NSString *) fax -{ - return [self _cardStringWithLabel: @"Fax:" value: [card fax] asLinkScheme: @"tel:"]; -} +// - (NSString *) fax +// { +// return [self _cardStringWithLabel: @"Fax:" value: [card fax] asLinkScheme: @"tel:"]; +// } -- (NSString *) mobile -{ - return [self _cardStringWithLabel: @"Mobile:" value: [card mobile] asLinkScheme: @"tel:"]; -} +// - (NSString *) mobile +// { +// return [self _cardStringWithLabel: @"Mobile:" value: [card mobile] asLinkScheme: @"tel:"]; +// } -- (NSString *) pager -{ - return [self _cardStringWithLabel: @"Pager:" value: [card pager] asLinkScheme: @"tel:"]; -} +// - (NSString *) pager +// { +// return [self _cardStringWithLabel: @"Pager:" value: [card pager] asLinkScheme: @"tel:"]; +// } -- (BOOL) hasHomeInfos -{ - BOOL result; - NSArray *elements; +// - (BOOL) hasHomeInfos +// { +// BOOL result; +// NSArray *elements; - elements = [card childrenWithTag: @"adr" - andAttribute: @"type" - havingValue: @"home"]; - if ([elements count] > 0) - { - result = YES; - homeAdr = [elements objectAtIndex: 0]; - } - else - result = ([[card childrenWithTag: @"url" - andAttribute: @"type" - havingValue: @"home"] count] > 0); +// elements = [card childrenWithTag: @"adr" +// andAttribute: @"type" +// havingValue: @"home"]; +// if ([elements count] > 0) +// { +// result = YES; +// homeAdr = [elements objectAtIndex: 0]; +// } +// else +// result = ([[card childrenWithTag: @"url" +// andAttribute: @"type" +// havingValue: @"home"] count] > 0); - return result; -} +// return result; +// } -- (NSString *) homePobox -{ - return [self _cardStringWithLabel: nil - value: [homeAdr flattenedValueAtIndex: 0 - forKey: @""]]; -} +// - (NSString *) homePobox +// { +// return [self _cardStringWithLabel: nil +// value: [homeAdr flattenedValueAtIndex: 0 +// forKey: @""]]; +// } -- (NSString *) homeExtendedAddress -{ - return [self _cardStringWithLabel: nil - value: [homeAdr flattenedValueAtIndex: 1 - forKey: @""]]; -} +// - (NSString *) homeExtendedAddress +// { +// return [self _cardStringWithLabel: nil +// value: [homeAdr flattenedValueAtIndex: 1 +// forKey: @""]]; +// } -- (NSString *) homeStreetAddress -{ - return [self _cardStringWithLabel: nil - value: [homeAdr flattenedValueAtIndex: 2 - forKey: @""]]; -} +// - (NSString *) homeStreetAddress +// { +// return [self _cardStringWithLabel: nil +// value: [homeAdr flattenedValueAtIndex: 2 +// forKey: @""]]; +// } -- (NSString *) homeCityAndProv -{ - NSString *city, *prov; - NSMutableString *data; +// - (NSString *) homeCityAndProv +// { +// NSString *city, *prov; +// NSMutableString *data; - city = [homeAdr flattenedValueAtIndex: 3 forKey: @""]; - prov = [homeAdr flattenedValueAtIndex: 4 forKey: @""]; +// city = [homeAdr flattenedValueAtIndex: 3 forKey: @""]; +// prov = [homeAdr flattenedValueAtIndex: 4 forKey: @""]; - data = [NSMutableString string]; - [data appendString: city]; - if ([city length] > 0 && [prov length] > 0) - [data appendString: @", "]; - [data appendString: prov]; +// data = [NSMutableString string]; +// [data appendString: city]; +// if ([city length] > 0 && [prov length] > 0) +// [data appendString: @", "]; +// [data appendString: prov]; - return [self _cardStringWithLabel: nil value: data]; -} +// return [self _cardStringWithLabel: nil value: data]; +// } -- (NSString *) homePostalCodeAndCountry -{ - NSString *postalCode, *country; - NSMutableString *data; +// - (NSString *) homePostalCodeAndCountry +// { +// NSString *postalCode, *country; +// NSMutableString *data; - postalCode = [homeAdr flattenedValueAtIndex: 5 forKey: @""]; - country = [homeAdr flattenedValueAtIndex: 6 forKey: @""]; +// postalCode = [homeAdr flattenedValueAtIndex: 5 forKey: @""]; +// country = [homeAdr flattenedValueAtIndex: 6 forKey: @""]; - data = [NSMutableString string]; - [data appendString: postalCode]; - if ([postalCode length] > 0 && [country length] > 0) - [data appendFormat: @", "]; - [data appendString: country]; +// data = [NSMutableString string]; +// [data appendString: postalCode]; +// if ([postalCode length] > 0 && [country length] > 0) +// [data appendFormat: @", "]; +// [data appendString: country]; - return [self _cardStringWithLabel: nil value: data]; -} +// return [self _cardStringWithLabel: nil value: data]; +// } -- (NSString *) _formattedURL: (NSString *) url -{ - NSRange schemaR; - NSString *schema, *data; +// - (NSString *) _formattedURL: (NSString *) url +// { +// NSRange schemaR; +// NSString *schema, *data; - if ([url length] > 0) - { - schemaR = [url rangeOfString: @"://"]; - if (schemaR.length > 0) - { - schema = [url substringToIndex: schemaR.location + schemaR.length]; - data = [url substringFromIndex: schemaR.location + schemaR.length]; - } - else - { - schema = @"http://"; - data = url; - } - } - else - { - schema = nil; - data = nil; - } +// if ([url length] > 0) +// { +// schemaR = [url rangeOfString: @"://"]; +// if (schemaR.length > 0) +// { +// schema = [url substringToIndex: schemaR.location + schemaR.length]; +// data = [url substringFromIndex: schemaR.location + schemaR.length]; +// } +// else +// { +// schema = @"http://"; +// data = url; +// } +// } +// else +// { +// schema = nil; +// data = nil; +// } - return [self _cardStringWithLabel: nil - value: data - byEscapingHTMLString: YES - asLinkScheme: schema - withLinkAttributes: @"target=\"_blank\""]; -} +// return [self _cardStringWithLabel: nil +// value: data +// byEscapingHTMLString: YES +// asLinkScheme: schema +// withLinkAttributes: @"target=\"_blank\""]; +// } -- (NSString *) _urlOfType: (NSString *) aType -{ - NSArray *elements; - NSString *url; +// - (NSString *) _urlOfType: (NSString *) aType +// { +// NSArray *elements; +// NSString *url; - elements = [card childrenWithTag: @"url" - andAttribute: @"type" - havingValue: aType]; - if ([elements count] > 0) - url = [[elements objectAtIndex: 0] flattenedValuesForKey: @""]; - else - url = nil; +// elements = [card childrenWithTag: @"url" +// andAttribute: @"type" +// havingValue: aType]; +// if ([elements count] > 0) +// url = [[elements objectAtIndex: 0] flattenedValuesForKey: @""]; +// else +// url = nil; - return [self _formattedURL: url]; -} +// return [self _formattedURL: url]; +// } -- (NSString *) homeUrl -{ - NSString *s; +// - (NSString *) homeUrl +// { +// NSString *s; - s = [self _urlOfType: @"home"]; +// s = [self _urlOfType: @"home"]; - if (!s || [s length] == 0) - { - NSArray *elements; - NSString *workURL; - int i; +// if (!s || [s length] == 0) +// { +// NSArray *elements; +// NSString *workURL; +// int i; - elements = [card childrenWithTag: @"url" - andAttribute: @"type" - havingValue: @"work"]; - workURL = nil; +// elements = [card childrenWithTag: @"url" +// andAttribute: @"type" +// havingValue: @"work"]; +// workURL = nil; - if ([elements count] > 0) - workURL = [[elements objectAtIndex: 0] flattenedValuesForKey: @""]; +// if ([elements count] > 0) +// workURL = [[elements objectAtIndex: 0] flattenedValuesForKey: @""]; - elements = [card childrenWithTag: @"url"]; +// elements = [card childrenWithTag: @"url"]; - if (workURL && [elements count] > 1) - { - for (i = 0; i < [elements count]; i++) - { - if ([[[elements objectAtIndex: i] flattenedValuesForKey: @""] - caseInsensitiveCompare: workURL] != NSOrderedSame) - { - s = [[elements objectAtIndex: i] flattenedValuesForKey: @""]; - break; - } - } +// if (workURL && [elements count] > 1) +// { +// for (i = 0; i < [elements count]; i++) +// { +// if ([[[elements objectAtIndex: i] flattenedValuesForKey: @""] +// caseInsensitiveCompare: workURL] != NSOrderedSame) +// { +// s = [[elements objectAtIndex: i] flattenedValuesForKey: @""]; +// break; +// } +// } - } - else if (!workURL && [elements count] > 0) - { - s = [[elements objectAtIndex: 0] flattenedValuesForKey: @""]; - } +// } +// else if (!workURL && [elements count] > 0) +// { +// s = [[elements objectAtIndex: 0] flattenedValuesForKey: @""]; +// } - if (s && [s length] > 0) - s = [self _formattedURL: s]; - } +// if (s && [s length] > 0) +// s = [self _formattedURL: s]; +// } - return s; -} +// return s; +// } -- (BOOL) hasWorkInfos -{ - BOOL result; - NSArray *elements; +// - (BOOL) hasWorkInfos +// { +// BOOL result; +// NSArray *elements; - elements = [card childrenWithTag: @"adr" - andAttribute: @"type" - havingValue: @"work"]; - if ([elements count] > 0) - { - result = YES; - workAdr = [elements objectAtIndex: 0]; - } - else - result = (([[card childrenWithTag: @"url" - andAttribute: @"type" - havingValue: @"work"] count] > 0) - || [[card childrenWithTag: @"org"] count] > 0); +// elements = [card childrenWithTag: @"adr" +// andAttribute: @"type" +// havingValue: @"work"]; +// if ([elements count] > 0) +// { +// result = YES; +// workAdr = [elements objectAtIndex: 0]; +// } +// else +// result = (([[card childrenWithTag: @"url" +// andAttribute: @"type" +// havingValue: @"work"] count] > 0) +// || [[card childrenWithTag: @"org"] count] > 0); - return result; -} +// return result; +// } -- (NSString *) workTitle -{ - return [self _cardStringWithLabel: nil value: [card title]]; -} +// - (NSString *) workTitle +// { +// return [self _cardStringWithLabel: nil value: [card title]]; +// } - (NSArray *) orgUnits { @@ -608,65 +607,65 @@ return addresses; } -- (NSString *) workService -{ - NSMutableArray *orgServices; - NSArray *values; - CardElement *org; - NSString *service, *services; - NSUInteger count, max; +// - (NSString *) workService +// { +// NSMutableArray *orgServices; +// NSArray *values; +// CardElement *org; +// NSString *service, *services; +// NSUInteger count, max; - org = [card org]; - values = [org valuesForKey: @""]; - max = [values count]; - if (max > 1) - { - orgServices = [NSMutableArray arrayWithCapacity: max]; - for (count = 1; count < max; count++) - { - service = [org flattenedValueAtIndex: count forKey: @""]; - if ([service length] > 0) - [orgServices addObject: service]; - } +// org = [card org]; +// values = [org valuesForKey: @""]; +// max = [values count]; +// if (max > 1) +// { +// orgServices = [NSMutableArray arrayWithCapacity: max]; +// for (count = 1; count < max; count++) +// { +// service = [org flattenedValueAtIndex: count forKey: @""]; +// if ([service length] > 0) +// [orgServices addObject: service]; +// } - services = [orgServices componentsJoinedByString: @", "]; - } - else - services = nil; +// services = [orgServices componentsJoinedByString: @", "]; +// } +// else +// services = nil; - return [self _cardStringWithLabel: nil value: services]; -} +// return [self _cardStringWithLabel: nil value: services]; +// } -- (NSString *) workUrl -{ - return [self _urlOfType: @"work"]; -} +// - (NSString *) workUrl +// { +// return [self _urlOfType: @"work"]; +// } -- (BOOL) hasOtherInfos -{ - return ([[card note] length] > 0 - || [[card bday] length] > 0 - || [[card tz] length] > 0); -} +// - (BOOL) hasOtherInfos +// { +// return ([[card note] length] > 0 +// || [[card bday] length] > 0 +// || [[card tz] length] > 0); +// } -- (NSString *) bday -{ - SOGoDateFormatter *dateFormatter; - NSCalendarDate *date; - NSString *bday; +// - (NSString *) bday +// { +// SOGoDateFormatter *dateFormatter; +// NSCalendarDate *date; +// NSString *bday; - date = [card birthday]; - bday = nil; +// date = [card birthday]; +// bday = nil; - if (date) - { - dateFormatter = [[[self context] activeUser] dateFormatterInContext: context]; - bday = [dateFormatter formattedDate: date]; - } +// if (date) +// { +// dateFormatter = [[[self context] activeUser] dateFormatterInContext: context]; +// bday = [dateFormatter formattedDate: date]; +// } - return bday; - //return [self _cardStringWithLabel: @"Birthday:" value: bday]; -} +// return bday; +// //return [self _cardStringWithLabel: @"Birthday:" value: bday]; +// } // - (NSString *) tz // { @@ -693,29 +692,29 @@ /* hrefs */ -- (NSString *) completeHrefForMethod: (NSString *) _method - withParameter: (NSString *) _param - forKey: (NSString *) _key -{ - NSString *href; +// - (NSString *) completeHrefForMethod: (NSString *) _method +// withParameter: (NSString *) _param +// forKey: (NSString *) _key +// { +// NSString *href; - [self setQueryParameter:_param forKey:_key]; - href = [self completeHrefForMethod:[self ownMethodName]]; - [self setQueryParameter:nil forKey:_key]; +// [self setQueryParameter:_param forKey:_key]; +// href = [self completeHrefForMethod:[self ownMethodName]]; +// [self setQueryParameter:nil forKey:_key]; - return href; -} +// return href; +// } -- (NSString *)attributesTabLink { - return [self completeHrefForMethod:[self ownMethodName] - withParameter:@"attributes" - forKey:@"tab"]; -} -- (NSString *)debugTabLink { - return [self completeHrefForMethod:[self ownMethodName] - withParameter:@"debug" - forKey:@"tab"]; -} +// - (NSString *)attributesTabLink { +// return [self completeHrefForMethod:[self ownMethodName] +// withParameter:@"attributes" +// forKey:@"tab"]; +// } +// - (NSString *)debugTabLink { +// return [self completeHrefForMethod:[self ownMethodName] +// withParameter:@"debug" +// forKey:@"tab"]; +// } /* action */ @@ -751,6 +750,7 @@ * @apiSuccess (Success 200) {String} [nickname] Nickname * @apiSuccess (Success 200) {String} [c_sn] Lastname * @apiSuccess (Success 200) {String} [c_fn] Fullname + * @apiSuccess (Success 200) {String} [c_screenname] Screen Name (X-AIM for now) * @apiSuccess (Success 200) {String} [tz] Timezone * @apiSuccess (Success 200) {String} [note] Note * @apiSuccess (Success 200) {String[]} allCategories All available categories @@ -812,6 +812,10 @@ if ([firstName length] > 0) [data setObject: firstName forKey: @"c_givenname"]; } + + o = [[card uniqueChildWithTag: @"x-aim"] flattenedValuesForKey: @""]; + if ([o length]) [data setObject: o forKey: @"c_screenname"]; + o = [card nickname]; if (o) [data setObject: o forKey: @"nickname"]; o = [card title]; diff --git a/UI/Templates/ContactsUI/UIxContactEditorTemplate.wox b/UI/Templates/ContactsUI/UIxContactEditorTemplate.wox index 9eb97a8f3..33cfe31f0 100644 --- a/UI/Templates/ContactsUI/UIxContactEditorTemplate.wox +++ b/UI/Templates/ContactsUI/UIxContactEditorTemplate.wox @@ -149,6 +149,28 @@ +
+
+ + + + + + remove_circle + +
+
+ + add_circle + + +
+
+
diff --git a/UI/Templates/ContactsUI/UIxContactViewTemplate.wox b/UI/Templates/ContactsUI/UIxContactViewTemplate.wox index 7acb6e263..fdacd004a 100644 --- a/UI/Templates/ContactsUI/UIxContactViewTemplate.wox +++ b/UI/Templates/ContactsUI/UIxContactViewTemplate.wox @@ -127,6 +127,16 @@
+
+
+
+ +
+ +
{{editor.card.c_screenname}}
+
+
+
diff --git a/UI/WebServerResources/js/Contacts/Card.service.js b/UI/WebServerResources/js/Contacts/Card.service.js index 88ac78fdd..0f4385ff2 100644 --- a/UI/WebServerResources/js/Contacts/Card.service.js +++ b/UI/WebServerResources/js/Contacts/Card.service.js @@ -337,6 +337,10 @@ return this.emails.length - 1; }; + Card.prototype.$addScreenName = function(screenName) { + this.c_screenname = screenName; + } + Card.prototype.$addPhone = function(type) { if (angular.isUndefined(this.phones)) { this.phones = [{type: type, value: ''}]; diff --git a/UI/WebServerResources/js/Contacts/CardController.js b/UI/WebServerResources/js/Contacts/CardController.js index 20f685743..a0b3f9608 100644 --- a/UI/WebServerResources/js/Contacts/CardController.js +++ b/UI/WebServerResources/js/Contacts/CardController.js @@ -22,6 +22,7 @@ vm.userFilterResults = []; vm.addOrgUnit = addOrgUnit; vm.addBirthday = addBirthday; + vm.addScreenName = addScreenName; vm.addEmail = addEmail; vm.addPhone = addPhone; vm.addUrl = addUrl; @@ -43,6 +44,9 @@ function addBirthday() { vm.card.birthday = new Date(); } + function addScreenName() { + vm.card.$addScreenName(''); + } function addEmail() { var i = vm.card.$addEmail(''); focus('email_' + i);