2 commits - lib/kolab lib/kolab_sync_data_calendar.php

Aleksander Machniak machniak at kolabsys.com
Wed Sep 26 15:33:24 CEST 2012


 lib/kolab/kolab_format_task.php    |    5 ++++-
 lib/kolab/kolab_storage.php        |   22 +++++++++++++++++-----
 lib/kolab/kolab_storage_cache.php  |    1 -
 lib/kolab/kolab_storage_folder.php |    5 +++--
 lib/kolab_sync_data_calendar.php   |    8 ++++++++
 5 files changed, 32 insertions(+), 9 deletions(-)

New commits:
commit 6c84f9f6f331d7b98bfd5d285623026bd168c087
Author: Aleksander Machniak <alec at alec.pl>
Date:   Wed Sep 26 15:32:27 2012 +0200

    Fix lack of UID truncation on events import (#1034)

diff --git a/lib/kolab_sync_data_calendar.php b/lib/kolab_sync_data_calendar.php
index d441fde..e886a57 100644
--- a/lib/kolab_sync_data_calendar.php
+++ b/lib/kolab_sync_data_calendar.php
@@ -385,6 +385,14 @@ class kolab_sync_data_calendar extends kolab_sync_data
                     continue 2;
                 }
                 break;
+
+            case 'uid':
+                // If UID is too long, use auto-generated UID (#1034)
+                // It's because UID is used as ServerId which cannot be longer than 64 chars
+                if (strlen($value) > 64) {
+                    $value = null;
+                }
+                break;
             }
 
             $this->setKolabDataItem($event, $name, $value);


commit 0b1976b728f804f770020cedb093f3085957b085
Author: Aleksander Machniak <alec at alec.pl>
Date:   Wed Sep 26 14:03:55 2012 +0200

    Update kolab_storage

diff --git a/lib/kolab/kolab_format_task.php b/lib/kolab/kolab_format_task.php
index b041b08..2a7a629 100644
--- a/lib/kolab/kolab_format_task.php
+++ b/lib/kolab/kolab_format_task.php
@@ -93,7 +93,7 @@ class kolab_format_task extends kolab_format_xcal
         if ($due = $this->obj->due())
             $object['due'] = self::php_datetime($due);
 
-        // related-to points to parent taks; we only support one relation
+        // related-to points to parent task; we only support one relation
         $related = self::vector2array($this->obj->relatedTo());
         if (count($related))
             $object['parent_id'] = $related[0];
@@ -137,6 +137,9 @@ class kolab_format_task extends kolab_format_xcal
         if (!empty($this->data['alarms']))
             $tags[] = 'x-has-alarms';
 
+        if ($this->data['parent_id'])
+            $tags[] = 'x-parent:' . $this->data['parent_id'];
+
         return $tags;
     }
 }
diff --git a/lib/kolab/kolab_storage.php b/lib/kolab/kolab_storage.php
index 68a8e81..546d19a 100644
--- a/lib/kolab/kolab_storage.php
+++ b/lib/kolab/kolab_storage.php
@@ -25,8 +25,9 @@
 class kolab_storage
 {
     const CTYPE_KEY = '/shared/vendor/kolab/folder-type';
+    const CTYPE_KEY_PRIVATE = '/private/vendor/kolab/folder-type';
     const COLOR_KEY_SHARED = '/shared/vendor/kolab/color';
-    const COLOR_KEY_PRIVATE = '/shared/vendor/kolab/color';
+    const COLOR_KEY_PRIVATE = '/private/vendor/kolab/color';
     const SERVERSIDE_SUBSCRIPTION = 0;
     const CLIENTSIDE_SUBSCRIPTION = 1;
 
@@ -389,10 +390,11 @@ class kolab_storage
             $delim = self::$imap->get_hierarchy_delimiter();
 
         $folder = rcube_charset::convert($folder, 'UTF7-IMAP');
-        $folder = str_replace($delim, ' » ', $folder);
+        $folder = html::quote($folder);
+        $folder = str_replace(html::quote($delim), ' » ', $folder);
 
         if ($prefix)
-            $folder = $prefix . ' ' . $folder;
+            $folder = html::quote($prefix) . ' ' . $folder;
 
         if (!$folder_ns)
             $folder_ns = 'personal';
@@ -480,6 +482,7 @@ class kolab_storage
         $names   = array();
 
         // Build SELECT field of parent folder
+        $attrs['is_escaped'] = true;
         $select = new html_select($attrs);
         $select->add('---', '');
 
@@ -536,13 +539,13 @@ class kolab_storage
         $prefix = $root . $mbox;
 
         // get folders types
-        $folderdata = self::$imap->get_metadata($prefix, self::CTYPE_KEY);
+        $folderdata = self::$imap->get_metadata($prefix, array(self::CTYPE_KEY, self::CTYPE_KEY_PRIVATE));
 
         if (!is_array($folderdata)) {
             return array();
         }
 
-        $folderdata = array_map('implode', $folderdata);
+        $folderdata = array_map(array('kolab_storage', 'folder_select_metadata'), $folderdata);
         $regexp     = '/^' . preg_quote($filter, '/') . '(\..+)?$/';
 
         // In some conditions we can skip LIST command (?)
@@ -583,4 +586,13 @@ class kolab_storage
         return $folders;
     }
 
+
+    /**
+     * Callback for array_map to select the correct annotation value
+     */
+    static function folder_select_metadata($types)
+    {
+        return $types[self::CTYPE_KEY_PRIVATE] ?: $types[self::CTYPE_KEY];
+    }
+
 }
diff --git a/lib/kolab/kolab_storage_cache.php b/lib/kolab/kolab_storage_cache.php
index 88f12a2..c3e88da 100644
--- a/lib/kolab/kolab_storage_cache.php
+++ b/lib/kolab/kolab_storage_cache.php
@@ -406,7 +406,6 @@ class kolab_storage_cache
     private function _sql_where($query)
     {
         $sql_where = '';
-
         foreach ($query as $param) {
             if ($param[1] == '=' && is_array($param[2])) {
                 $qvalue = '(' . join(',', array_map(array($this->db, 'quote'), $param[2])) . ')';
diff --git a/lib/kolab/kolab_storage_folder.php b/lib/kolab/kolab_storage_folder.php
index 6dc0e05..daa988f 100644
--- a/lib/kolab/kolab_storage_folder.php
+++ b/lib/kolab/kolab_storage_folder.php
@@ -76,8 +76,8 @@ class kolab_storage_folder
     public function set_folder($name, $ftype = null)
     {
         if (!$ftype) {
-            $metadata = $this->imap->get_metadata($name, array(kolab_storage::CTYPE_KEY));
-            $this->type_annotation = $metadata[$name][kolab_storage::CTYPE_KEY];
+            $metadata = $this->imap->get_metadata($name, array(kolab_storage::CTYPE_KEY, kolab_storage::CTYPE_KEY_PRIVATE));
+            $this->type_annotation = $metadata[$name][kolab_storage::CTYPE_KEY_PRIVATE] ?: $metadata[$name][kolab_storage::CTYPE_KEY];
         }
         else {
             $this->type_annotation = $ftype;
@@ -430,6 +430,7 @@ class kolab_storage_folder
 
         $headers = $this->imap->get_message_headers($msguid);
 
+        // Message doesn't exist?
         if (empty($headers)) {
             return false;
         }





More information about the commits mailing list