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_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 22ddfdb1..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; @@ -652,6 +663,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'); 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; }