[horde] Extra ActiveSync attributes from iOS

Simon Wilson simon at simonandkate.net
Sun Jul 24 07:32:29 UTC 2011


Quoting Michael J Rubinsky <mrubinsk at horde.org>:

> 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

http://bugs.horde.org/ticket/10373

Patches done, enhancement request logged. Working a treat in my setup,  
although there are some attributes that cannot be mapped as they  
appear to be in a different schema (CONTACTS2 instead of CONTACTS) and  
enabling them borks everything LOL.

I have broken the enhancement into generic capability improvement, and  
then a specific optimised iOS setup.

Cheers
Simon.



More information about the horde mailing list