plugins/kolab_notes plugins/kolab_tags plugins/libkolab

Aleksander Machniak machniak at kolabsys.com
Thu Aug 21 12:48:16 CEST 2014


 plugins/kolab_notes/kolab_notes.php                        |    8 ++--
 plugins/kolab_tags/kolab_tags.js                           |    2 -
 plugins/kolab_tags/lib/kolab_tags_backend.php              |   10 ++---
 plugins/libkolab/lib/kolab_format_configuration.php        |    8 +++-
 plugins/libkolab/lib/kolab_storage_cache_configuration.php |   22 ++++++++++-
 plugins/libkolab/lib/kolab_storage_config.php              |   25 +++++--------
 6 files changed, 49 insertions(+), 26 deletions(-)

New commits:
commit e3d29617ae5a0f72efca8f08b5c3f57af6cb4c26
Author: Aleksander Machniak <machniak at kolabsys.com>
Date:   Tue Aug 19 05:10:31 2014 -0400

    Query kolab_cache_configuration with category filter for better performance (#3286)
    Warning: this requires DELETE FROM kolab_folders WHERE type = 'configuration';

diff --git a/plugins/kolab_notes/kolab_notes.php b/plugins/kolab_notes/kolab_notes.php
index ad40a86..7553fd1 100644
--- a/plugins/kolab_notes/kolab_notes.php
+++ b/plugins/kolab_notes/kolab_notes.php
@@ -1109,11 +1109,13 @@ class kolab_notes extends rcube_plugin
     {
         if (!isset($this->relations)) {
             $config      = kolab_storage_config::get_instance();
-            $filter      = array(array('type', '=', 'relation'));
             $default     = true;
-            $data_filter = array('category' => 'generic');
+            $filter      = array(
+                array('type', '=', 'relation'),
+                array('category', '=', 'generic')
+            );
 
-            $this->relations = $config->get_objects($filter, $default, $data_filter);
+            $this->relations = $config->get_objects($filter, $default);
         }
 
         if ($uid === null) {
diff --git a/plugins/kolab_tags/kolab_tags.js b/plugins/kolab_tags/kolab_tags.js
index 14d28e7..0afd78e 100644
--- a/plugins/kolab_tags/kolab_tags.js
+++ b/plugins/kolab_tags/kolab_tags.js
@@ -293,7 +293,7 @@ function tag_form_dialog(id)
 
         if (tag) {
             name_input.val(tag.name);
-            color_input.val(tag.color.replace(/^#/, ''));
+            color_input.val(tag.color ? tag.color.replace(/^#/, '') : '');
         }
     }
 
diff --git a/plugins/kolab_tags/lib/kolab_tags_backend.php b/plugins/kolab_tags/lib/kolab_tags_backend.php
index 519f962..de69bae 100644
--- a/plugins/kolab_tags/lib/kolab_tags_backend.php
+++ b/plugins/kolab_tags/lib/kolab_tags_backend.php
@@ -38,14 +38,14 @@ class kolab_tags_backend
      */
     public function list_tags($filter = array())
     {
-        $config     = kolab_storage_config::get_instance();
-        $default    = true;
-        $filter[]   = array('type', '=', self::O_TYPE);
-        $cat_filter = array('category' => self::O_CATEGORY);
+        $config   = kolab_storage_config::get_instance();
+        $default  = true;
+        $filter[] = array('type', '=', self::O_TYPE);
+        $filter[] = array('category', '=', self::O_CATEGORY);
 
         // for performance reasons assume there will be no more than 100 tags (per-folder)
 
-        return $config->get_objects($filter, $default, $cat_filter, 100);
+        return $config->get_objects($filter, $default, 100);
     }
 
     /**
diff --git a/plugins/libkolab/lib/kolab_format_configuration.php b/plugins/libkolab/lib/kolab_format_configuration.php
index 11f934f..6b71f3e 100644
--- a/plugins/libkolab/lib/kolab_format_configuration.php
+++ b/plugins/libkolab/lib/kolab_format_configuration.php
@@ -208,8 +208,14 @@ class kolab_format_configuration extends kolab_format
     {
         $tags = array();
 
-        if ($this->data['type'] == 'dictionary') {
+        switch ($this->data['type']) {
+        case 'dictionary':
             $tags = array($this->data['language']);
+            break;
+
+        case 'relation':
+            $tags = array('category:' . $this->data['category']);
+            break;
         }
 
         return $tags;
diff --git a/plugins/libkolab/lib/kolab_storage_cache_configuration.php b/plugins/libkolab/lib/kolab_storage_cache_configuration.php
index 8380aa8..97315da 100644
--- a/plugins/libkolab/lib/kolab_storage_cache_configuration.php
+++ b/plugins/libkolab/lib/kolab_storage_cache_configuration.php
@@ -37,4 +37,24 @@ class kolab_storage_cache_configuration extends kolab_storage_cache
 
         return $sql_data;
     }
-}
\ No newline at end of file
+
+    /**
+     * Helper method to compose a valid SQL query from pseudo filter triplets
+     */
+    protected function _sql_where($query)
+    {
+        if (is_array($query)) {
+            foreach ($query as $idx => $param) {
+                // convert category filter
+                if ($param[0] == 'category') {
+                    $param[2] = array_map(function($n) { return 'category:' . $n; }, (array) $param[2]);
+
+                    $query[$idx][0] = 'tags';
+                    $query[$idx][2] = count($param[2]) > 1 ? $param[2] : $param[2][0];
+                }
+            }
+        }
+
+        return parent::_sql_where($query);
+    }
+}
diff --git a/plugins/libkolab/lib/kolab_storage_config.php b/plugins/libkolab/lib/kolab_storage_config.php
index a80cf46..beaa928 100644
--- a/plugins/libkolab/lib/kolab_storage_config.php
+++ b/plugins/libkolab/lib/kolab_storage_config.php
@@ -103,14 +103,13 @@ class kolab_storage_config
     /**
      * Get configuration objects
      *
-     * @param array $filter      Search filter
-     * @param bool  $default     Enable to get objects only from default folder
-     * @param array $data_filter Additional object data filter
-     * @param int   $limit       Max. number of records (per-folder)
+     * @param array $filter  Search filter
+     * @param bool  $default Enable to get objects only from default folder
+     * @param int   $limit   Max. number of records (per-folder)
      *
      * @return array List of objects
      */
-    public function get_objects($filter = array(), $default = false, $data_filter = array(), $limit = 0)
+    public function get_objects($filter = array(), $default = false, $limit = 0)
     {
         $list = array();
 
@@ -126,12 +125,6 @@ class kolab_storage_config
             }
 
             foreach ($folder->select($filter) as $object) {
-                foreach ($data_filter as $key => $val) {
-                    if ($object[$key] != $val) {
-                        continue 2;
-                    }
-                }
-
                 $list[] = $object;
             }
         }
@@ -624,11 +617,13 @@ class kolab_storage_config
     public function get_tags($uid = '*')
     {
         if (!isset($this->tags)) {
-            $filter      = array(array('type', '=', 'relation'));
-            $default     = true;
-            $data_filter = array('category' => 'tag');
+            $default = true;
+            $filter  = array(
+                array('type', '=', 'relation'),
+                array('category', '=', 'tag')
+            );
 
-            $this->tags = $this->get_objects($filter, $default, $data_filter);
+            $this->tags = $this->get_objects($filter, $default);
         }
 
         if ($uid === '*') {




More information about the commits mailing list