2 commits - plugins/kolab_folders plugins/libkolab
Thomas Brüderli
bruederli at kolabsys.com
Thu Sep 20 09:31:54 CEST 2012
plugins/kolab_folders/kolab_folders.php | 43 +++++++++++++++++++++++++++-----
plugins/libkolab/lib/kolab_storage.php | 3 +-
2 files changed, 39 insertions(+), 7 deletions(-)
New commits:
commit aae0f725bc6a1ab0ed6faf56d114efb2d73ff6fb
Author: Thomas Bruederli <thomas at roundcube.net>
Date: Thu Sep 20 09:32:02 2012 +0200
Make get_default_folder() work multiple annotations
diff --git a/plugins/kolab_folders/kolab_folders.php b/plugins/kolab_folders/kolab_folders.php
index 899620f..297c858 100644
--- a/plugins/kolab_folders/kolab_folders.php
+++ b/plugins/kolab_folders/kolab_folders.php
@@ -388,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
@@ -412,6 +411,14 @@ class kolab_folders extends rcube_plugin
}
/**
+ * 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
*
* @param string $type Folder type
commit 395807c424e8bc2693880d3f561e918b5673b7b8
Author: Thomas Bruederli <thomas at roundcube.net>
Date: Thu Sep 20 08:51:38 2012 +0200
Save folder subtypes in private annotations according to Kolab 3 spec
diff --git a/plugins/kolab_folders/kolab_folders.php b/plugins/kolab_folders/kolab_folders.php
index 9e00847..899620f 100644
--- a/plugins/kolab_folders/kolab_folders.php
+++ b/plugins/kolab_folders/kolab_folders.php
@@ -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));
+
+ if (!($ctype = $folderdata[$folder][kolab_storage::CTYPE_KEY_PRIVATE])) {
+ $ctype = $folderdata[$folder][kolab_storage::CTYPE_KEY];
+ }
- return explode('.', $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;
@@ -517,4 +530,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);
+ }
}
diff --git a/plugins/libkolab/lib/kolab_storage.php b/plugins/libkolab/lib/kolab_storage.php
index 68a8e81..7ed89a0 100644
--- a/plugins/libkolab/lib/kolab_storage.php
+++ b/plugins/libkolab/lib/kolab_storage.php
@@ -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;
More information about the commits
mailing list