[Tickets #7407] Re: Photos: storing in LDAP and broken contact sync

bugs at horde.org bugs at horde.org
Tue Apr 13 09:23:33 UTC 2010


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

Ticket URL: http://bugs.horde.org/ticket/7407
------------------------------------------------------------------------------
  Ticket             | 7407
  Updated By         | asd at asdf.com
  Summary            | Photos: storing in LDAP and broken contact sync
  Queue              | Turba
  Version            | 2.3
  Type               | Bug
  State              | Resolved
  Priority           | 2. Medium
  Milestone          |
  Patch              | 1
  Owners             | Jan Schneider
------------------------------------------------------------------------------


asd at asdf.com (2010-04-13 05:23) wrote:

> As follow up to closed #5971
>
>
>
> 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.







More information about the bugs mailing list