Branch 'dev/libcalendaring' - 3 commits - plugins/libkolab

Thomas Brüderli bruederli at kolabsys.com
Thu Nov 8 14:41:45 CET 2012


 plugins/libkolab/lib/kolab_format.php         |    2 +-
 plugins/libkolab/lib/kolab_format_contact.php |    2 ++
 plugins/libkolab/lib/kolab_storage_cache.php  |    3 ++-
 plugins/libkolab/lib/kolab_storage_folder.php |   14 ++++++++++++--
 4 files changed, 17 insertions(+), 4 deletions(-)

New commits:
commit f91e6ed831da8cb1ac9c4d121ece42147b5ea87b
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Thu Nov 8 14:41:37 2012 +0100

    Use generic escape() function to quote UIDs

diff --git a/plugins/libkolab/lib/kolab_storage_cache.php b/plugins/libkolab/lib/kolab_storage_cache.php
index cdb373f..6d50bf9 100644
--- a/plugins/libkolab/lib/kolab_storage_cache.php
+++ b/plugins/libkolab/lib/kolab_storage_cache.php
@@ -717,7 +717,8 @@ class kolab_storage_cache
     {
         if (!isset($this->uid2msg[$uid])) {
             // use IMAP SEARCH to get the right message
-            $index = $this->imap->search_once($this->folder->name, ($deleted ? '' : 'UNDELETED ') . 'HEADER SUBJECT "' . $uid. '"');
+            $index = $this->imap->search_once($this->folder->name, ($deleted ? '' : 'UNDELETED ') .
+				'HEADER SUBJECT ' . rcube_imap_generic::escape($uid));
             $results = $index->get();
             $this->uid2msg[$uid] = $results[0];
         }


commit dfb7fae98367bf59540aff43979539cfc1ff27d1
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Thu Nov 8 14:07:01 2012 +0100

    Fix contact picture handling with Kolab format v2

diff --git a/plugins/libkolab/lib/kolab_format_contact.php b/plugins/libkolab/lib/kolab_format_contact.php
index 9dedcb1..b147c38 100644
--- a/plugins/libkolab/lib/kolab_format_contact.php
+++ b/plugins/libkolab/lib/kolab_format_contact.php
@@ -379,6 +379,8 @@ class kolab_format_contact extends kolab_format
 
         if ($this->obj->photoMimetype())
             $object['photo'] = $this->obj->photo();
+        else if ($this->xmlobject && ($photo_name = $this->xmlobject->pictureAttachmentName()))
+        	$object['photo'] = $photo_name;
 
         // relateds -> spouse, children
         $this->read_relateds($this->obj->relateds(), $object);
diff --git a/plugins/libkolab/lib/kolab_storage_folder.php b/plugins/libkolab/lib/kolab_storage_folder.php
index 54aed7a..682ca7e 100644
--- a/plugins/libkolab/lib/kolab_storage_folder.php
+++ b/plugins/libkolab/lib/kolab_storage_folder.php
@@ -540,13 +540,23 @@ class kolab_storage_folder
                     unset($object['_attachments'][$key]);
                 }
                 // load photo.attachment from old Kolab2 format to be directly embedded in xcard block
-                else if ($key == 'photo.attachment' && !isset($object['photo']) && !$object['_attachments'][$key]['content'] && $att['id']) {
-                    $object['photo'] = $this->get_attachment($object['_msguid'], $att['id'], $object['_mailbox']);
+                else if ($type == 'contact' && ($key == 'photo.attachment' || $key == 'kolab-picture.png') && $att['id']) {
+                    if (!isset($object['photo']))
+                        $object['photo'] = $this->get_attachment($object['_msguid'], $att['id'], $object['_mailbox']);
                     unset($object['_attachments'][$key]);
                 }
             }
         }
 
+        // save contact photo to attachment for Kolab2 format
+        if (kolab_storage::$version == 2.0 && $object['photo'] && !$existing_photo) {
+            $attkey = 'kolab-picture.png';  // this file name is hard-coded in libkolab/kolabformatV2/contact.cpp
+            $object['_attachments'][$attkey] = array(
+                'mimetype'=> rc_image_content_type($object['photo']),
+                'content' => preg_match('![^a-z0-9/=+-]!i', $object['photo']) ? $object['photo'] : base64_decode($object['photo']),
+            );
+        }
+
         // generate unique keys (used as content-id) for attachments
         if (is_array($object['_attachments'])) {
             $numatt = count($object['_attachments']);


commit 6d75fdd5f317d33d4f42208397de21e7fce47aed
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Thu Nov 8 14:03:06 2012 +0100

    Quote object UID for IMAP SEARCH command; read generated UID from XMLObject if we're working with libkolab bindings

diff --git a/plugins/libkolab/lib/kolab_format.php b/plugins/libkolab/lib/kolab_format.php
index c54558e..a414781 100644
--- a/plugins/libkolab/lib/kolab_format.php
+++ b/plugins/libkolab/lib/kolab_format.php
@@ -265,7 +265,7 @@ abstract class kolab_format
     {
         // get generated UID
         if (!$this->data['uid']) {
-            $this->data['uid'] = kolabformat::getSerializedUID();
+            $this->data['uid'] = $this->xmlobject ? $this->xmlobject->getSerializedUID() : kolabformat::getSerializedUID();
             $this->obj->setUid($this->data['uid']);
         }
     }
diff --git a/plugins/libkolab/lib/kolab_storage_cache.php b/plugins/libkolab/lib/kolab_storage_cache.php
index a800e58..cdb373f 100644
--- a/plugins/libkolab/lib/kolab_storage_cache.php
+++ b/plugins/libkolab/lib/kolab_storage_cache.php
@@ -717,7 +717,7 @@ class kolab_storage_cache
     {
         if (!isset($this->uid2msg[$uid])) {
             // use IMAP SEARCH to get the right message
-            $index = $this->imap->search_once($this->folder->name, ($deleted ? '' : 'UNDELETED ') . 'HEADER SUBJECT ' . $uid);
+            $index = $this->imap->search_once($this->folder->name, ($deleted ? '' : 'UNDELETED ') . 'HEADER SUBJECT "' . $uid. '"');
             $results = $index->get();
             $this->uid2msg[$uid] = $results[0];
         }





More information about the commits mailing list