[horde] [turba] FBURL (freebusyUrl) field missing in vCard export and CardDAV

Jan Schneider jan at horde.org
Thu May 29 09:41:50 UTC 2014


Zitat von "Pulz, Joerg" <Joerg.Pulz at frm2.tum.de>:

> ----- Message from Jan Schneider <jan at horde.org> ---------
>    Date: Thu, 29 May 2014 10:21:16 +0200
>    From: Jan Schneider <jan at horde.org>
> Subject: Re: [horde] [turba] FBURL (freebusyUrl) field missing in  
> vCard export and CardDAV
>      To: horde at lists.horde.org
>
>
>> Zitat von "Pulz, Joerg" <Joerg.Pulz at frm2.tum.de>:
>>
>>> Hi,
>>>
>>> i stumbled over a problem when exporting address book entries as  
>>> vCard or synching those using CardDAV.
>>> The address book in question is LDAP based.
>>> As the LDAP entries do not contain an attribute holding the  
>>> freebusyUrl, i construct this field in backends.local.php:
>>>
>>> $cfgSources['localldap']['map']['freebusyUrl'] = array(
>>>       'fields' => array('username'),
>>>       'format' => Horde::url($GLOBALS['registry']->get('webroot',  
>>> 'kronolith') . '/fb.php', true, -1) . '?u=%s
>>> );
>>>
>>> This is working fine as long as i use the WebUI, the freebusyUrl  
>>> field contains a valid URL and i can even use it in kronolith.
>>>
>>> When i try to export the address book as vCard or try to sync  
>>> using CardDAV there is no FBURL field in the .vcf file at all, so  
>>> it seems the information is getting lost somewhere on the road  
>>> when generating the vCard file(s).
>>>
>>> I started to dig in the code to see where it happens and it seems  
>>> to be related to my manual construction of the freebusyUrl in  
>>> backends.local.php.
>>>
>>> If i change this to a valid (any) LDAP attribute e.g.:
>>>
>>> $cfgSources['localldap']['map']['freebusyUrl'] = 'dn';
>>>
>>> then the FBURL field is in the vCard file containing the exact the  
>>> value of the LDAP attribute.
>>> So it seems that during generation of vCard file(s) only values  
>>> directly returned by the backend are honored and others are simply  
>>> ignored.
>>>
>>> Just before line 547 in turbo/lib/Application.php
>>>
>>>               foreach ($results as $ob) {
>>>                   if ($vcard) {
>>>                       $data[] = $driver->tovCard($ob, $version,  
>>> null, true);
>>>
>>> the object contains all data e.g.:
>>>
>>>     ["freebusyUrl"]=>
>>>     array(2) {
>>>       ["fields"]=>
>>>       array(1) {
>>>         [0]=>
>>>         string(8) "username"
>>>       }
>>>       ["format"]=>
>>>       string(48) "https://server.domain.tld/kronolith/fb.php?u=%s"
>>>     }
>>>
>>> but "freebusyUrl" is missing in $fields e.g.:
>>>
>>>   ["fields"]=>
>>>   array(24) {
>>>     ["__key"]=>
>>>     string(2) "dn"
>>>     ["__uid"]=>
>>>     string(3) "uid"
>>>     ["name"]=>
>>>     string(2) "cn"
>>>     ["email"]=>
>>>     string(4) "mail"
>>>     ["homePhone"]=>
>>>     string(9) "homephone"
>>>     ["workPhone"]=>
>>>     string(15) "telephonenumber"
>>>     ["cellPhone"]=>
>>>     string(21) "mobiletelephonenumber"
>>>     ["homeAddress"]=>
>>>     string(17) "homepostaladdress"
>>>     ["firstname"]=>
>>>     string(9) "givenName"
>>>     ["lastname"]=>
>>>     string(2) "sn"
>>>     ["username"]=>
>>>     string(3) "uid"
>>>     ["uidnumber"]=>
>>>     string(9) "uidNumber"
>>>     ["gidnumber"]=>
>>>     string(9) "gidNumber"
>>>     ["gecos"]=>
>>>     string(5) "gecos"
>>>     ["homedirectory"]=>
>>>     string(13) "homeDirectory"
>>>     ["loginshell"]=>
>>>     string(10) "loginShell"
>>>     ["fax"]=>
>>>     string(24) "facsimileTelephoneNumber"
>>>     ["pager"]=>
>>>     string(5) "pager"
>>>     ["workRoom"]=>
>>>     string(10) "roomNumber"
>>>     ["department"]=>
>>>     string(16) "departmentNumber"
>>>     ["company"]=>
>>>     string(2) "ou"
>>>     ["workStreet"]=>
>>>     string(13) "postalAddress"
>>>     ["workCity"]=>
>>>     string(10) "postalCode"
>>>     ["workCountry"]=>
>>>     string(2) "st"
>>>   }
>>>
>>> As $fields is honored by turba's "tovCard" the freebusyUrl  
>>> information get's lost there.
>>>
>>> Is there a chance to change the code that self constructed values  
>>> are honored during vCard generation instead of only using  
>>> attribute values returned by the LDAP backend itself? This would  
>>> be really helpful as modifying the complete LDAP directory to add  
>>> a real attribute that holds the freebusyUrl is not an option.
>>>
>>> Kind regards
>>> Joerg
>>
>> http://bugs.horde.org/ticket/12915
>>
>
> ----- End message from Jan Schneider <jan at horde.org> -----
>
> Jan,
>
> thanks for your response.
> I was already aware of this ticket, but that is not related to the  
> problem i described above.
> To clarify:
> - LDAP based address book
> - If freebusyUrl is set to be an exact LDAP attribute FBURL is in  
> the vCard and shown in the WebUi
> - If freebusyUrl is hand-crafted in backends.local.php (see above)  
> it is not included in the vCard but shown in the WebUi
>
> So, as long as freebusyUrl is an exact LDAP attribute it is in  
> $fields and honored by turba's tovCard, if it is hand-crafted, as in  
> my case, it is not in $fields and therefor ignored by turba's tovCard.
>
> Please take a look again at my first message for details.
>
> Kind regards
> Joerg

Sorry, I didn't read your message completely.
https://github.com/horde/horde/commit/089475cfec59c99be438c6073b5b07c295a4e9f1

-- 
Jan Schneider
The Horde Project
http://www.horde.org/
https://www.facebook.com/hordeproject



More information about the horde mailing list