diff --git a/plugins/calendar/drivers/kolab/kolab_calendar.php b/plugins/calendar/drivers/kolab/kolab_calendar.php index c845c153..3e5d28ae 100644 --- a/plugins/calendar/drivers/kolab/kolab_calendar.php +++ b/plugins/calendar/drivers/kolab/kolab_calendar.php @@ -52,7 +52,7 @@ class kolab_calendar extends kolab_storage_folder_api $imap = $calendar->rc->get_storage(); $imap_folder = kolab_storage::id_decode($id); $info = $imap->folder_info($imap_folder, true); - if (empty($info) || $info['noselect'] || kolab_storage::folder_type($imap_folder) != 'event') { + if (empty($info) || $info['noselect'] || strpos(kolab_storage::folder_type($imap_folder), 'event') !== 0) { return new kolab_user_calendar($imap_folder, $calendar); } else { diff --git a/plugins/calendar/drivers/kolab/kolab_driver.php b/plugins/calendar/drivers/kolab/kolab_driver.php index 217fe42f..a95e1c2f 100644 --- a/plugins/calendar/drivers/kolab/kolab_driver.php +++ b/plugins/calendar/drivers/kolab/kolab_driver.php @@ -117,8 +117,9 @@ class kolab_driver extends calendar_driver } } + $delim = $this->rc->get_storage()->get_hierarchy_delimiter(); $folders = $this->filter_calendars(false, $active, $personal); - $calendars = $names = array(); + $calendars = array(); // include virtual folders for a full folder tree if (!is_null($tree)) @@ -127,14 +128,19 @@ class kolab_driver extends calendar_driver foreach ($folders as $id => $cal) { $fullname = $cal->get_name(); $listname = $cal->get_foldername(); - $imap_path = explode('/', $cal->name); + $imap_path = explode($delim, $cal->name); // find parent do { array_pop($imap_path); - $parent_id = kolab_storage::folder_id(join('/', $imap_path)); + $parent_id = kolab_storage::folder_id(join($delim, $imap_path)); + } + while (count($imap_path) > 1 && !$this->calendars[$parent_id]); + + // restore "real" parent ID + if ($parent_id && !$this->calendars[$parent_id]) { + $parent_id = kolab_storage::folder_id($cal->get_parent()); } - while (count($imap_path) > 0 && !$this->calendars[$parent_id]); // turn a kolab_storage_folder object into a kolab_calendar if ($cal instanceof kolab_storage_folder) { @@ -360,9 +366,9 @@ class kolab_driver extends calendar_driver if ($prop['id'] && ($cal = $this->get_calendar($prop['id']))) { $ret = false; if (isset($prop['permanent'])) - $ret |= $cal->storage->subscribe($prop['permanent']); + $ret |= $cal->storage->subscribe(intval($prop['permanent'])); if (isset($prop['active'])) - $ret |= $cal->storage->activate($prop['active']); + $ret |= $cal->storage->activate(intval($prop['active'])); return $ret; } else { diff --git a/plugins/calendar/lib/calendar_ui.php b/plugins/calendar/lib/calendar_ui.php index 3329bf48..f973e88e 100644 --- a/plugins/calendar/lib/calendar_ui.php +++ b/plugins/calendar/lib/calendar_ui.php @@ -273,7 +273,7 @@ class calendar_ui /** * Helper method to build a calendar list item (HTML content and js data) */ - public function calendar_list_item($id, $prop, &$jsenv, $activeonly) + public function calendar_list_item($id, $prop, &$jsenv, $activeonly = false) { // enrich calendar properties with settings from the driver if (!$prop['virtual']) { diff --git a/plugins/calendar/skins/larry/images/calendars.png b/plugins/calendar/skins/larry/images/calendars.png index 1f97abce..117d3295 100644 Binary files a/plugins/calendar/skins/larry/images/calendars.png and b/plugins/calendar/skins/larry/images/calendars.png differ diff --git a/plugins/calendar/skins/larry/templates/calendar.html b/plugins/calendar/skins/larry/templates/calendar.html index ce071125..2e45fcf6 100644 --- a/plugins/calendar/skins/larry/templates/calendar.html +++ b/plugins/calendar/skins/larry/templates/calendar.html @@ -256,6 +256,9 @@ $(document).ready(function(e){ if (box.is(':visible')) { box.find('input[type=text]').focus(); } + else { + $('#calendarlistsearch-reset').click(); + } // TODO: save state in localStorage } });