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