4 commits - plugins/libkolab plugins/tasklist

Thomas Brüderli bruederli at kolabsys.com
Fri Jul 13 11:24:21 CEST 2012


 plugins/libkolab/lib/kolab_format_task.php               |    4 -
 plugins/libkolab/lib/kolab_format_xcal.php               |    2 
 plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php |    8 +--
 plugins/tasklist/tasklist.js                             |   31 ++++++++++++++-
 plugins/tasklist/tasklist.php                            |    4 -
 5 files changed, 38 insertions(+), 11 deletions(-)

New commits:
commit 58ab2fdc8bc4b4bb6d032a7ffe54d515dd530159
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Fri Jul 13 11:24:10 2012 +0200

    Fix query to kolab storage

diff --git a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
index 0a87595..66e4912 100644
--- a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
+++ b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
@@ -265,9 +265,9 @@ class tasklist_kolab_driver extends tasklist_driver
         // query Kolab storage
         $query = array();
         if ($filter['mask'] & tasklist::FILTER_MASK_COMPLETE)
-            $query[] = array('tags','~','complete');
+            $query[] = array('tags','~','x-complete');
         else
-            $query[] = array('tags','!~','complete');
+            $query[] = array('tags','!~','x-complete');
 
         // full text search (only works with cache enabled)
         if ($filter['search']) {


commit cc7e76d2b2bdfb94c478b1b133d263b9fd3295ad
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Fri Jul 13 11:22:54 2012 +0200

    Refetch tasks when searching; sort tags list alphabetically

diff --git a/plugins/tasklist/tasklist.js b/plugins/tasklist/tasklist.js
index 530f201..0264389 100644
--- a/plugins/tasklist/tasklist.js
+++ b/plugins/tasklist/tasklist.js
@@ -49,7 +49,7 @@ function rcube_tasklist(settings)
     var selector = 'all';
     var tagsfilter = null;
     var filtermask = FILTER_MASK_ALL;
-    var loadstate = { filter:-1, lists:'' };
+    var loadstate = { filter:-1, lists:'', search:null };
     var idcount = 0;
     var saving_lock;
     var ui_loading;
@@ -310,7 +310,7 @@ function rcube_tasklist(settings)
 
         var active = active_lists(),
             basefilter = filtermask == FILTER_MASK_COMPLETE ? FILTER_MASK_COMPLETE : FILTER_MASK_ALL,
-            reload = active.join(',') != loadstate.lists || basefilter != loadstate.filter;
+            reload = active.join(',') != loadstate.lists || basefilter != loadstate.filter || loadstate.search != search_query;
 
         if (active.length && reload) {
             ui_loading = rcmail.set_busy(true, 'loading');
@@ -333,6 +333,8 @@ function rcube_tasklist(settings)
         listdata = {};
         loadstate.lists = response.lists;
         loadstate.filter = response.filter;
+        loadstate.search = response.search;
+
         for (var i=0; i < response.data.length; i++) {
             listdata[response.data[i].id] = response.data[i];
         }
@@ -379,6 +381,12 @@ function rcube_tasklist(settings)
         $.each(newtags, function(i, tag){
             $('<li>').attr('rel', tag).data('value', tag).html(Q(tag)).appendTo(rcmail.gui_objects.tagslist);
         });
+
+        // re-sort tags list
+        $(rcmail.gui_objects.tagslist).children('li').sortElements(function(a,b){
+            console.log($.text([a]), $.text([b]))
+            return $.text([a]).toLowerCase() > $.text([b]).toLowerCase() ? 1 : -1;
+        });
     }
 
     /**
@@ -1130,6 +1138,25 @@ function rcube_tasklist(settings)
   };
 })(jQuery);
 
+// from http://james.padolsey.com/javascript/sorting-elements-with-jquery/
+jQuery.fn.sortElements = (function(){
+    var sort = [].sort;
+
+    return function(comparator, getSortable) {
+        getSortable = getSortable || function(){ return this };
+
+        var last = null;
+        return sort.call(this, comparator).each(function(i){
+            // at this point the array is sorted, so we can just detach each one from wherever it is, and add it after the last
+            var node = $(getSortable.call(this));
+            var parent = node.parent();
+            if (last) last.after(node);
+            else      parent.prepend(node);
+            last = node;
+        });
+    };
+})();
+
 
 /* tasklist plugin UI initialization */
 var rctasks;
diff --git a/plugins/tasklist/tasklist.php b/plugins/tasklist/tasklist.php
index a8d19f5..00a42d5 100644
--- a/plugins/tasklist/tasklist.php
+++ b/plugins/tasklist/tasklist.php
@@ -313,7 +313,7 @@ class tasklist extends rcube_plugin
      */
     public function fetch_counts()
     {
-        $lists = null;
+        $lists = get_input_value('lists', RCUBE_INPUT_GPC);;
         $counts = $this->driver->count_tasks($lists);
         $this->rc->output->command('plugin.update_counts', $counts);
     }
@@ -389,7 +389,7 @@ class tasklist extends rcube_plugin
         // sort tasks according to their hierarchy level and due date
         usort($data, array($this, 'task_sort_cmp'));
 
-        $this->rc->output->command('plugin.data_ready', array('filter' => $f, 'lists' => $lists, 'data' => $data, 'tags' => array_values(array_unique($tags))));
+        $this->rc->output->command('plugin.data_ready', array('filter' => $f, 'lists' => $lists, 'search' => $search, 'data' => $data, 'tags' => array_values(array_unique($tags))));
     }
 
     /**


commit 6d588e7b70f68fb4370a10274b2345d96b1026b6
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Fri Jul 13 11:21:50 2012 +0200

    Fix tasks counting

diff --git a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
index 897ce18..0a87595 100644
--- a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
+++ b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
@@ -219,10 +219,10 @@ class tasklist_kolab_driver extends tasklist_driver
         $counts = array('all' => 0, 'flagged' => 0, 'today' => 0, 'tomorrow' => 0, 'overdue' => 0, 'nodate' => 0);
         foreach ($lists as $list_id) {
             $folder = $this->folders[$list_id];
-            foreach ((array)$folder->select(array(array('tags','!~','complete'))) as $record) {
+            foreach ((array)$folder->select(array(array('tags','!~','x-complete'))) as $record) {
                 $rec = $this->_to_rcube_task($record);
 
-                if ($rec['complete'])  // don't count complete tasks
+                if ($rec['complete'] >= 1.0)  // don't count complete tasks
                     continue;
 
                 $counts['all']++;


commit 0790b36a49c1a4731c3b81e5540b2edd5f040b7e
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Fri Jul 13 11:21:35 2012 +0200

    Add categories to fulltext index; use unique tags for task properties

diff --git a/plugins/libkolab/lib/kolab_format_task.php b/plugins/libkolab/lib/kolab_format_task.php
index 629f9ac..4433cf6 100644
--- a/plugins/libkolab/lib/kolab_format_task.php
+++ b/plugins/libkolab/lib/kolab_format_task.php
@@ -129,10 +129,10 @@ class kolab_format_task extends kolab_format_xcal
         $tags = array();
 
         if ($this->data['status'] == 'COMPLETED' || $this->data['complete'] == 100)
-            $tags[] = 'complete';
+            $tags[] = 'x-complete';
 
         if ($this->data['priority'] == 1)
-            $tags[] = 'flagged';
+            $tags[] = 'x-flagged';
 
         if (!empty($this->data['alarms']))
             $tags[] = 'x-has-alarms';
diff --git a/plugins/libkolab/lib/kolab_format_xcal.php b/plugins/libkolab/lib/kolab_format_xcal.php
index f8247e0..e1bfdd7 100644
--- a/plugins/libkolab/lib/kolab_format_xcal.php
+++ b/plugins/libkolab/lib/kolab_format_xcal.php
@@ -28,7 +28,7 @@ abstract class kolab_format_xcal extends kolab_format
 {
     public $CTYPE = 'application/calendar+xml';
 
-    public static $fulltext_cols = array('title', 'description', 'location', 'attendees:name', 'attendees:email');
+    public static $fulltext_cols = array('title', 'description', 'location', 'attendees:name', 'attendees:email', 'categories');
 
     protected $sensitivity_map = array(
         'public'       => kolabformat::ClassPublic,





More information about the commits mailing list