/** * Read available calendars for the current user and store them internally */ private function _read_lists($force = false) { // already read sources if (isset($this->lists) && !$force) { return $this->lists; } // get all folders that have type "task" $this->folders = kolab_storage::get_folders('task'); $this->lists = array(); // convert to UTF8 and sort $names = array(); $default_folder = null; foreach ($this->folders as $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 ($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(); $listnames = array(); $prefs = $this->rc->config->get('kolab_tasklists', array()); foreach ($names as $utf7name => $name) { $folder = $this->folders[$utf7name]; $path_imap = explode($delim, $name); $editname = array_pop($path_imap); // pop off raw name part $path_imap = join($delim, $path_imap); $name = kolab_storage::folder_displayname(kolab_storage::object_name($utf7name), $listnames); if ($folder->get_namespace() == 'personal') { $readonly = false; $alarms = true; } else { $alarms = false; $readonly = true; if (($rights = $folder->get_myrights()) && !PEAR::isError($rights)) { if (strpos($rights, 'i') !== false) { $readonly = false; } } } $list_id = kolab_storage::folder_id($utf7name); $tasklist = array('id' => $list_id, 'name' => $name, 'editname' => $editname, 'color' => $folder->get_color('0000CC'), 'showalarms' => isset($prefs[$list_id]['showalarms']) ? $prefs[$list_id]['showalarms'] : $alarms, 'editable' => !$readonly, 'active' => $folder->is_active(), 'parentfolder' => $path_imap, 'default' => $folder->default, 'children' => true, 'class_name' => trim($folder->get_namespace() . ($folder->default ? ' default' : ''))); $this->lists[$tasklist['id']] = $tasklist; $this->folders[$tasklist['id']] = $folder; } }