[Tickets #5971] Re: Add support for contact photos with ability to sync

bugs at horde.org bugs at horde.org
Mon Sep 29 09:40:06 UTC 2008


DO NOT REPLY TO THIS MESSAGE. THIS EMAIL ADDRESS IS NOT MONITORED.

Ticket URL: http://bugs.horde.org/ticket/5971
------------------------------------------------------------------------------
  Ticket             | 5971
  Updated By         | robb at wtg.cw.com
  Summary            | Add support for contact photos with ability to sync
  Queue              | Turba
  Version            | HEAD
  Type               | Enhancement
  State              | Resolved
  Priority           | 1. Low
  Milestone          |
  Patch              |
  Owners             | Jan Schneider
------------------------------------------------------------------------------


Gunnar Wrobel <p at rdus.de> (2008-09-29 00:14) wrote:

> Hi, just upgraded to current turba 2.3
> and run into some problems with PHOTO
>
> 1) storing contact without a photo in LDAP
>
> The attribute array always contains an array for the photo item. If
> there is no photo set, this array is empty, but is not catched by the
> function _emptyAttributeFilter in turba/lib/Driver/ldap.php. This
> results in an error in _add to LDAP. Stripping empty arrays too solves
> at least this problem.
>
>     function _emptyAttributeFilter($var)
>     {
>         if (!is_array($var)) {
>             return ($var != '');
>         } else {
>             if (count($var) == 0) { return false; }    <<===
>             foreach ($var as $v) {
>        ...
>
> Storing in turba DB doesn't show this bug, but photos are stored as 0B
> blobs instead of NULL blobs.
>
>
>
> 2) base64 is terminated by a blank line, so eliminate it before
>    matching the following vCalender attributes. Otherwise the name of
>    one following PHOTO will start with a \r\n, so it will be
>    discarded afterward
>
>    in /lib/Horde/iCalendar.php
>
>         // Unfold any folded lines.
> -       $vCal = preg_replace('/[\r\n]+[ \t]/', '', $vCal);
> +       $vCal = preg_replace('/[\r\n]+[ \t]+/', '', $vCal);
> +       $vCal = preg_replace('/\r\n\r\n/', "\r\n", $vCal);
>
>    (First line only beautifies the base64 code by stripping all
>    whitespace. The second line does the necessary work by deleting all
>    blank lines.)
>
>    and add the blank line in /turba/lib/Driver.php again before
>    sending to mobile:
>
>             case 'photo':
>             case 'logo':
>                 $params = array('ENCODING' => 'base64');
>                 if (isset($hash[$key . 'type'])) {
>                     $params['TYPE'] = $hash[$key . 'type'];
>                 }
>                 $vcard->setAttribute(String::upper($key),
> -                                    base64_encode($val),
> +                                    base64_encode($val) . "\r\n",
>                                      $params);
>                 break;
>
>
>
> 3) Browsing the address book with photo as a visible column results in a
>    warning per entry containing a photo:
>
>    Warning: htmlspecialchars() expects parameter 1 to be string, array
>    given in
> /var/www/org.afaik.duff_ssl/mail-new/turba/templates/browse/row.inc
>    on line 90
>
>        if ($ob->hasValue($this->columns[$c - 1])) {
>         $value = $ob->getValue($this->columns[$c - 1]);
> -        $shown_columns[$c] = htmlspecialchars($value)
> +        $shown_columns[$c] = is_array($value) ? $value :
> htmlspecialchars($value);
>         if ($type == 'email') {
>
>    No thinking on my side, just getting rid of this warning, so check
>    again.
>
>
>
> 4) In toHash and tovCard, the encoding of a photo is tested against
>    and set to 'b'. Is that a valid encoding name at all? Changed
>    it to 'base64' and it worked again. In turba/lib/Driver.php
>
>             case 'photo':
>             case 'logo':
> -               $params = array('ENCODING' => 'b');
> +               $params = array('ENCODING' => 'base64');
>
>
>                 if (!isset($item['params']['ENCODING']) ||
> -                   String::lower($item['params']['ENCODING']) != 'b') {
> +                   String::lower($item['params']['ENCODING']) != 'base64') {
>                     // Invalid property.
>                     break;
>
>
> 5) Finally, how am I supposed to delete a photo from a contact or save
>    it to a local file (e.g. for doing some cropping stuff in an external
>    tool)? There are no delete and save buttons as for a common file.
>
>
> Having this patched, I can add (ldap), change, view and sync photos
>
>      Martin
>
> PS: any thoughts on adding crop support? Photos taken by mobiles have
> a stupid format for contact photos. Otherwise, I could live with as
> save as local file button.

Please open a new ticket rather than responding on a closed one.





More information about the bugs mailing list