Merge branch 'master' of ssh://git.kolab.org/git/roundcube
This commit is contained in:
commit
ba214ecba8
3 changed files with 48 additions and 8 deletions
|
@ -28,7 +28,9 @@ class kolab_folders extends rcube_plugin
|
|||
|
||||
public $types = array('mail', 'event', 'journal', 'task', 'note', 'contact', 'configuration');
|
||||
public $mail_types = array('inbox', 'drafts', 'sentitems', 'outbox', 'wastebasket', 'junkemail');
|
||||
|
||||
private $rc;
|
||||
private static $instance;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -36,6 +38,7 @@ class kolab_folders extends rcube_plugin
|
|||
*/
|
||||
function init()
|
||||
{
|
||||
self::$instance = $this;
|
||||
$this->rc = rcmail::get_instance();
|
||||
|
||||
// load required plugin
|
||||
|
@ -335,9 +338,13 @@ class kolab_folders extends rcube_plugin
|
|||
function get_folder_type($folder)
|
||||
{
|
||||
$storage = $this->rc->get_storage();
|
||||
$folderdata = $storage->get_metadata($folder, kolab_storage::CTYPE_KEY);
|
||||
$folderdata = $storage->get_metadata($folder, array(kolab_storage::CTYPE_KEY_PRIVATE, kolab_storage::CTYPE_KEY));
|
||||
|
||||
return explode('.', $folderdata[$folder][kolab_storage::CTYPE_KEY]);
|
||||
if (!($ctype = $folderdata[$folder][kolab_storage::CTYPE_KEY_PRIVATE])) {
|
||||
$ctype = $folderdata[$folder][kolab_storage::CTYPE_KEY];
|
||||
}
|
||||
|
||||
return explode('.', $ctype);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -351,8 +358,14 @@ class kolab_folders extends rcube_plugin
|
|||
function set_folder_type($folder, $type='mail')
|
||||
{
|
||||
$storage = $this->rc->get_storage();
|
||||
list($ctype, $subtype) = explode('.', $type);
|
||||
|
||||
return $storage->set_metadata($folder, array(kolab_storage::CTYPE_KEY => $type));
|
||||
$success = $storage->set_metadata($folder, array(kolab_storage::CTYPE_KEY => $ctype, kolab_storage::CTYPE_KEY_PRIVATE => $subtype ? $type : null));
|
||||
|
||||
if (!$success) // fallback: only set private annotation
|
||||
$success |= $storage->set_metadata($folder, array(kolab_storage::CTYPE_KEY_PRIVATE => $type));
|
||||
|
||||
return $uccess;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -365,7 +378,7 @@ class kolab_folders extends rcube_plugin
|
|||
function get_default_folder($type)
|
||||
{
|
||||
$storage = $this->rc->get_storage();
|
||||
$folderdata = $storage->get_metadata('*', kolab_storage::CTYPE_KEY);
|
||||
$folderdata = $storage->get_metadata('*', array(kolab_storage::CTYPE_KEY_PRIVATE, kolab_storage::CTYPE_KEY));
|
||||
|
||||
if (!is_array($folderdata)) {
|
||||
return null;
|
||||
|
@ -375,9 +388,8 @@ class kolab_folders extends rcube_plugin
|
|||
$namespace = $storage->get_namespace();
|
||||
|
||||
// get all folders of specified type
|
||||
$folderdata = array_map('implode', $folderdata);
|
||||
$folderdata = array_map(array($this, 'folder_select_metadata'), $folderdata);
|
||||
$folderdata = array_intersect($folderdata, array($type));
|
||||
unset($folders[0]);
|
||||
|
||||
foreach ($folderdata as $folder => $data) {
|
||||
// check if folder is in personal namespace
|
||||
|
@ -398,6 +410,14 @@ class kolab_folders extends rcube_plugin
|
|||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback for array_map to select the correct annotation value
|
||||
*/
|
||||
private function folder_select_metadata($types)
|
||||
{
|
||||
return $types[kolab_storage::CTYPE_KEY_PRIVATE] ?: $types[kolab_storage::CTYPE_KEY];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns CSS class name for specified folder type
|
||||
*
|
||||
|
@ -517,4 +537,15 @@ class kolab_folders extends rcube_plugin
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Static getter for default folder of the given type
|
||||
*
|
||||
* @param string $type Folder type
|
||||
* @return string Folder name
|
||||
*/
|
||||
public static function default_folder($type)
|
||||
{
|
||||
return self::$instance->get_default_folder($type);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -70,6 +70,14 @@ class tasklist_kolab_driver extends tasklist_driver
|
|||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
$delim = $this->rc->get_storage()->get_hierarchy_delimiter();
|
||||
$listnames = array();
|
||||
|
||||
|
@ -107,7 +115,7 @@ class tasklist_kolab_driver extends tasklist_driver
|
|||
'editable' => !$readonly,
|
||||
'active' => $folder->is_subscribed(kolab_storage::SERVERSIDE_SUBSCRIPTION),
|
||||
'parentfolder' => $path_imap,
|
||||
'class_name' => $folder->get_namespace(),
|
||||
'class_name' => trim($folder->get_namespace() . ($utf7name == $default_folder ? ' default' : '')),
|
||||
);
|
||||
$this->lists[$tasklist['id']] = $tasklist;
|
||||
$this->folders[$tasklist['id']] = $folder;
|
||||
|
|
Loading…
Add table
Reference in a new issue