diff --git a/plugins/calendar/drivers/kolab/kolab_driver.php b/plugins/calendar/drivers/kolab/kolab_driver.php index 6250db66..18e51949 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 7ed89a01..9a48f1b3 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 9a97fec2..daa988ff 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 e84d4552..60f9ccbb 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;