plugins/calendar plugins/libkolab plugins/tasklist

Thomas Brüderli bruederli at kolabsys.com
Thu Sep 20 15:49:27 CEST 2012


 plugins/calendar/drivers/kolab/kolab_driver.php          |    3 --
 plugins/libkolab/lib/kolab_storage.php                   |   13 ++++++++++--
 plugins/libkolab/lib/kolab_storage_folder.php            |    4 +--
 plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php |   16 ++++++++-------
 4 files changed, 23 insertions(+), 13 deletions(-)

New commits:
commit 998f1d92b6d33d2c450ccd7e2cd844a65c639957
Author: Thomas Bruederli <thomas at roundcube.net>
Date:   Thu Sep 20 15:35:47 2012 +0200

    Adapt kolab_storage classes to new type annotation specification; use 'default' property of kolab_storage_folder instances instead of calling kolab_folders::default_folder()

diff --git a/plugins/calendar/drivers/kolab/kolab_driver.php b/plugins/calendar/drivers/kolab/kolab_driver.php
index 6250db6..18e5194 100644
--- a/plugins/calendar/drivers/kolab/kolab_driver.php
+++ b/plugins/calendar/drivers/kolab/kolab_driver.php
@@ -103,7 +103,6 @@ class kolab_driver extends calendar_driver
     }
 
     $calendars = $names = array();
-    $default_folder = class_exists('kolab_folders') ? kolab_folders::default_folder('event') : '';
 
     foreach ($this->calendars as $id => $cal) {
       if ($cal->ready) {
@@ -117,7 +116,7 @@ class kolab_driver extends calendar_driver
           'readonly' => $cal->readonly,
           'showalarms' => $cal->alarms,
           'class_name' => $cal->get_namespace(),
-          'default'  => $cal->get_realname() == $default_folder,
+          'default'  => $cal->storage->default,
           'active'   => $cal->storage->is_subscribed(kolab_storage::SERVERSIDE_SUBSCRIPTION),
         );
       }
diff --git a/plugins/libkolab/lib/kolab_storage.php b/plugins/libkolab/lib/kolab_storage.php
index 7ed89a0..9a48f1b 100644
--- a/plugins/libkolab/lib/kolab_storage.php
+++ b/plugins/libkolab/lib/kolab_storage.php
@@ -537,13 +537,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 (?)
@@ -584,4 +584,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/plugins/libkolab/lib/kolab_storage_folder.php b/plugins/libkolab/lib/kolab_storage_folder.php
index 9a97fec..daa988f 100644
--- a/plugins/libkolab/lib/kolab_storage_folder.php
+++ b/plugins/libkolab/lib/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;
diff --git a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
index e84d455..60f9ccb 100644
--- a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
+++ b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
@@ -63,19 +63,21 @@ class tasklist_kolab_driver extends tasklist_driver
 
         // convert to UTF8 and sort
         $names = array();
+        $default_folder = null;
         foreach ($this->folders as $i => $folder) {
             $names[$folder->name] = rcube_charset::convert($folder->name, 'UTF7-IMAP');
             $this->folders[$folder->name] = $folder;
+            if ($folder->default)
+                $default_folder = $folder->name;
         }
 
         asort($names, SORT_LOCALE_STRING);
 
         // put default folder (aka INBOX) on top of the list
-        if (class_exists('kolab_folders') && ($default_folder = kolab_folders::default_folder('task'))) {
-            if ($default_name = $names[$default_folder]) {
-                unset($names[$default_folder]);
-                $names = array_merge(array($default_folder => $default_name), $names);
-            }
+        if ($default_folder) {
+            $default_name = $names[$default_folder];
+            unset($names[$default_folder]);
+            $names = array_merge(array($default_folder => $default_name), $names);
         }
 
         $delim = $this->rc->get_storage()->get_hierarchy_delimiter();
@@ -115,8 +117,8 @@ class tasklist_kolab_driver extends tasklist_driver
                 'editable' => !$readonly,
                 'active' => $folder->is_subscribed(kolab_storage::SERVERSIDE_SUBSCRIPTION),
                 'parentfolder' => $path_imap,
-                'default' => $utf7name == $default_folder,
-                'class_name' => trim($folder->get_namespace() . ($utf7name == $default_folder ? ' default' : '')),
+                'default' => $folder->default,
+                'class_name' => trim($folder->get_namespace() . ($folder->default ? ' default' : '')),
             );
             $this->lists[$tasklist['id']] = $tasklist;
             $this->folders[$tasklist['id']] = $folder;





More information about the commits mailing list