[horde] Extra ActiveSync attributes from iOS

Michael J Rubinsky mrubinsk at horde.org
Wed Jul 20 16:52:36 UTC 2011


Quoting Spyros Tsiolis <stsiol at yahoo.co.uk>:

> --- On Wed, 20/7/11, Michael J Rubinsky <mrubinsk at horde.org> wrote:
>
>> From: Michael J Rubinsky <mrubinsk at horde.org>
>> Subject: Re: [horde] Extra ActiveSync attributes from iOS
>> To: horde at lists.horde.org
>> Date: Wednesday, 20 July, 2011, 17:01
>>
>> Quoting Simon Wilson <simon at simonandkate.net>:
>>
>> > Now that I have ActiveSync working nicely, I'm in the
>> process of switching my wife's huge set of contacts into
>> Horde for ActiveSync. She has a very broad usage of contacts
>> - many phone numbers, addresses, postal addresses, etc.
>> Natively It's not going to work. Sooooo....
>> >
>> > When an iOS device connects contacts to Activesync it
>> announces a set of capabilities (fields).
>> >
>> > From what I can see an Activesync field needs to be
>> mapped in turba/lib/Driver.php to a valid and defined Turba
>> attribute (turba/config/attributes.php). Turba then needs to
>> have a defined place to put the data (e.g. an SQL database
>> with a field defined in turba/config/backends.local.php).
>> >
>> > Am I correct so far?
>>
>> Sounds right.
>>
>>
>> > From digging through I get the following default
>> mappings:
>> >
>> > iOS Field         =>
>> Turba attribute    => mySQL
>> >
>> -------------------------------------------------------------
>> > Anniversary       =>
>> anniversary        => NONE
>> > Birthday          =>
>> birthday           =>
>> object_bday
>> > Body             
>> => notes             
>> => object_notes
>> > WebPage       
>>    => website       
>>     => object_url
>> > BusinessCountry   =>
>> workcountry        =>
>> object_workcountry
>> > Department        =>
>> department         => NONE
>> > Email1Address     =>
>> email              =>
>> object_email
>> > Email2Address     =>
>> homeEmail          => NONE
>> > Email3Address     =>
>> workEmail          => NONE
>> > BusinessFaxNumber => fax       
>>         => object_fax
>> > FileAs            =>
>> name           
>>    => array
>> > FirstName         =>
>> firstname          =>
>> object_firstname
>> > HomeCity          =>
>> homeCity           =>
>> object_homecity
>> > HomeCountry       =>
>> homeCountry        =>
>> object_homecountry
>> > HomeFaxNumber     => NONE 
>>              =>
>> NONE
>> > HomePhoneNumber   => homePhone 
>>         => object_homephone
>> > Home2PhoneNumber  => NONE     
>>          => NONE
>> > HomePostalCode    => homePostalCode 
>>    => object_homepostalcode
>> > HomeState         =>
>> homeProvince       =>
>> object_homeprovince
>> > HomeStreet        =>
>> homeStreet         =>
>> object_homestreet
>> > BusinessCity      => workCity 
>>          =>
>> object_workcity
>> > MiddleName        =>
>> middlenames        =>
>> object_middlenames
>> > MobilePhoneNumber => cellPhone     
>>     => object_cellphone
>> > Suffix            =>
>> nameSuffix         =>
>> object_namesuffix
>> > CompanyName       =>
>> company            =>
>> object_company
>> > OtherCity         =>
>> NONE           
>>    => NONE
>> > OtherCountry      => NONE 
>>              =>
>> NONE
>> > CarPhoneNumber    => NONE   
>>            => NONE
>> > OtherPostalCode   => NONE 
>>              =>
>> NONE
>> > OtherState        => NONE 
>>              =>
>> NONE
>> > OtherStreet       =>
>> NONE           
>>    => NONE
>> > PagerNumber       =>
>> pager              =>
>> object_pager
>> > Picture       
>>    => photo       
>>       => object_photo
>> > Title         
>>    => namePrefix     
>>    => object_nameprefix
>> > BusinessPostalCode => workPostalCode   
>> => objectworkpostalcode
>> > AssistantName     =>
>> assistant          => NONE
>> > AssistnamePhoneNumber => NONE     
>>      => NONE
>> > LastName          =>
>> lastname           =>
>> object_lastname
>> > Spouse            =>
>> spouse         
>>    => NONE   This one is
>> advertised by iOS, but there's nowhere to enter / view
>> > BusinessState     =>
>> workProvince       =>
>> object_workprovince
>> > BusinessStreet    => workStreet 
>>        => workstreet
>> > BusinessPhoneNumber => workPhone   
>>     => object_workphone
>> > Business2PhoneNumber => NONE     
>>       => NONE
>> > JobTitle          =>
>> title              =>
>> object_title
>> > YomiFirstName     => NONE 
>>              =>
>> NONE
>> > YomiLastName      => NONE 
>>              =>
>> NONE
>> > RadioPhoneNumber  => NONE     
>>          => NONE
>> > IMAddress         =>
>> NONE           
>>    => NONE
>> > IMAddress2        => NONE 
>>              =>
>> NONE
>> > IMAddress3        => NONE 
>>              =>
>> NONE
>> > ManagerName       =>
>> NONE           
>>    => NONE
>> > CompanyMainPhone  => NONE     
>>          => NONE
>> > NickName          =>
>> should be alias => object_alias, but not mapped in
>> Driver.php.
>> >
>> > Where there is a Turba attribute but no SQL mapping
>> it's an easy fix, just create the field in SQL and go for
>> it, but where it is not mapped in Driver.php it's a bit more
>> complex.
>> >
>> > What I would like to do is add some support for some
>> of the missing pieces into Driver.php, particularly the
>> third address group (other), and some extra phone numbers.
>> Is this just a case of adding both direction mappings to the
>> ActiveSync Contact message sections of Driver.php (Convert
>> contact to an AS contact message; and convert an AS contact
>> message into a hash for import)? Or are there other places
>> that will need work?
>>
>> That should work, assuming you add the appropriate
>> attribtues to turba/config/attributes.php and have a field
>> to store the values in. Also, you should read through the
>> mapping code in Turba_Driver::, there are already some cases
>> where the mappings don't neccessarily work as you would
>> expect, I don't have the code in front of me at the moment,
>> but IIRC, the email mappings are not a 1:1 mapping as you
>> show above. If the work/home email fields are presented,
>> then *only* those are used ... otherwise the "plain" email
>> field is used.
>>
>> Finally, I'd have to verify that all of those fields are
>> supported by the version of AS that is supported by Horde
>> (some AS fields were introduced in later versions). I assume
>> they are since the device should know what version it's
>> using, but I'd have to check the wbxml codepages to be
>> sure.
>>
>> > If I make those changes to Drivers.php I assume it's
>> not a "Drivers.local.php" version, which means next upgrade
>> will break my changes - is it worth me doing those and
>> submitting a patch file back to Horde?
>>
>> The bottom line is, if the changes you introduce do not
>> conflict with any existing mappings and make sense, then
>> they can be included in future releases.
>>
>> Thanks!
>>
>> --mike
>>
>> The Horde Project (www.horde.org)
>> mrubinsk at horde.org
>>
>> --Horde mailing list
>> Frequently Asked Questions: http://horde.org/faq/
>> To unsubscribe, mail: horde-unsubscribe at lists.horde.org
>
>
>
> Could this be adapted not for MySQL but for LDAP ?
> I have a similar scenario with Dovecot/Horde/LDAP

There is nothing here that is *really* specific to mySQL. For LDAP the  
process would be basically the same...you just need to ensure that  
your storage backend can accept the data and in backends.local.php you  
properly map the turba attributes to the fields in your storage backend.

-- 
mike

The Horde Project (www.horde.org)
mrubinsk at horde.org



More information about the horde mailing list