From b0b0cd8d17bf24d660b60fe778da07229a425ea2 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 8 Jun 2012 15:15:43 +0200 Subject: [PATCH 1/3] Set required X-Kolab-Mime-Version header (#837) --- plugins/libkolab/lib/kolab_format.php | 2 ++ plugins/libkolab/lib/kolab_storage_folder.php | 1 + 2 files changed, 3 insertions(+) diff --git a/plugins/libkolab/lib/kolab_format.php b/plugins/libkolab/lib/kolab_format.php index c340fcc7..66588975 100644 --- a/plugins/libkolab/lib/kolab_format.php +++ b/plugins/libkolab/lib/kolab_format.php @@ -39,6 +39,8 @@ abstract class kolab_format protected $xmldata; protected $loaded = false; + const VERSION = '3.0'; + /** * Factory method to instantiate a kolab_format object of the given type * diff --git a/plugins/libkolab/lib/kolab_storage_folder.php b/plugins/libkolab/lib/kolab_storage_folder.php index 22ddfdb1..ab5bfac5 100644 --- a/plugins/libkolab/lib/kolab_storage_folder.php +++ b/plugins/libkolab/lib/kolab_storage_folder.php @@ -652,6 +652,7 @@ class kolab_storage_folder } $headers['Date'] = date('r'); $headers['X-Kolab-Type'] = self::KTYPE_PREFIX . $type; + $headers['X-Kolab-Mime-Version'] = kolab_format::VERSION; $headers['Subject'] = $object['uid']; // $headers['Message-ID'] = $rcmail->gen_message_id(); $headers['User-Agent'] = $rcmail->config->get('useragent'); From 40f811b33a0cf7b4ea6f66cdc34e161607f96ce4 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Tue, 12 Jun 2012 11:30:13 +0200 Subject: [PATCH 2/3] Read X-Kolab-Mime-Version headers if available; Url::None => Url::NoType --- plugins/libkolab/lib/kolab_format_contact.php | 2 +- plugins/libkolab/lib/kolab_storage_folder.php | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/plugins/libkolab/lib/kolab_format_contact.php b/plugins/libkolab/lib/kolab_format_contact.php index 358e1b1e..84df7420 100644 --- a/plugins/libkolab/lib/kolab_format_contact.php +++ b/plugins/libkolab/lib/kolab_format_contact.php @@ -177,7 +177,7 @@ class kolab_format_contact extends kolab_format $vurls = new vectorurl; foreach ((array)$object['website'] as $url) { - $type = $url['type'] == 'blog' ? Url::Blog : Url::None; + $type = $url['type'] == 'blog' ? Url::Blog : Url::NoType; $vurls->push(new Url($url['url'], $type)); } $this->obj->setUrls($vurls); diff --git a/plugins/libkolab/lib/kolab_storage_folder.php b/plugins/libkolab/lib/kolab_storage_folder.php index ab5bfac5..d2a78de5 100644 --- a/plugins/libkolab/lib/kolab_storage_folder.php +++ b/plugins/libkolab/lib/kolab_storage_folder.php @@ -438,9 +438,20 @@ class kolab_storage_folder return false; // check kolab format version - list($xmltype, $subtype) = explode('.', $object_type); - if (strpos($xml, '<' . $xmltype) !== false && strpos($xml, 'xmlns=') === false) { - // old Kolab 2.0 format detected + $mime_version = $headers->others['x-kolab-mime-version']; + if (empty($mime_version)) { + list($xmltype, $subtype) = explode('.', $object_type); + $xmlhead = substr($xml, 0, 512); + + // detect old Kolab 2.0 format + if (strpos($xmlhead, '<' . $xmltype) !== false && strpos($xmlhead, 'xmlns=') === false) + $mime_version = 2.0; + else + $mime_version = 3.0; // assume 3.0 + } + + if ($mime_version <= 2.0) { + // read Kolab 2.0 format $handler = class_exists('Horde_Kolab_Format') ? Horde_Kolab_Format::factory('XML', $xmltype, array('subtype' => $subtype)) : null; if (!is_object($handler) || is_a($handler, 'PEAR_Error')) { return false; From 0f9e0e5fe8ab67637406c7b305c2d4f1e5460f4f Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Tue, 12 Jun 2012 13:39:15 +0200 Subject: [PATCH 3/3] Read X-Kolab-Mime-Version headers if available (part 2) --- plugins/libkolab/libkolab.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/libkolab/libkolab.php b/plugins/libkolab/libkolab.php index 4ecab46a..bff5c85d 100644 --- a/plugins/libkolab/libkolab.php +++ b/plugins/libkolab/libkolab.php @@ -67,7 +67,7 @@ class libkolab extends rcube_plugin */ function storage_init($p) { - $p['fetch_headers'] = trim($p['fetch_headers'] .' X-KOLAB-TYPE'); + $p['fetch_headers'] = trim($p['fetch_headers'] .' X-KOLAB-TYPE X-KOLAB-MIME-VERSION'); return $p; }