[horde] Extra ActiveSync attributes from iOS

Michael J Rubinsky mrubinsk at horde.org
Wed Jul 20 17:01:16 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: "Spyros Tsiolis" <stsiol at yahoo.co.uk>
>> Cc: "Horde Mailing List" <horde at lists.horde.org>
>> Date: Wednesday, 20 July, 2011, 19:52
>>
>> 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
>
>
>
> Or "/var/www/horde/turba/config/drivers.php" for Horde v3.x right ?

If you mean "turba/config/sources.php", then yes. Though H3 does not  
have support for ActiveSync, which this thread is about, so I assumed  
we were all talking about Horde 4.

-- 
mike

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



More information about the horde mailing list