Branch 'roundcubemail-plugins-kolab-3.0' - plugins/tasklist

Thomas Brüderli bruederli at kolabsys.com
Fri Oct 4 10:08:36 CEST 2013


 plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php |    1 
 plugins/tasklist/localization/de_CH.inc                  |    1 
 plugins/tasklist/localization/de_DE.inc                  |    1 
 plugins/tasklist/localization/en_US.inc                  |    1 
 plugins/tasklist/tasklist.js                             |   40 ++++++++++-----
 5 files changed, 33 insertions(+), 11 deletions(-)

New commits:
commit cdc9a2a45450d90cbade9049daf75d375830f1c2
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Fri Oct 4 10:07:21 2013 +0200

    Fix deletion of task lists with sub-folders (similar as in bug #2283)

diff --git a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
index 078243a..671bcef 100644
--- a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
+++ b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php
@@ -122,6 +122,7 @@ class tasklist_kolab_driver extends tasklist_driver
                 'active' => $folder->is_active(),
                 'parentfolder' => $path_imap,
                 'default' => $folder->default,
+                'children' => true,  // TODO: determine if that folder indeed has child folders
                 'class_name' => trim($folder->get_namespace() . ($folder->default ? ' default' : '')),
             );
             $this->lists[$tasklist['id']] = $tasklist;
diff --git a/plugins/tasklist/localization/de_CH.inc b/plugins/tasklist/localization/de_CH.inc
index 740b0db..6237798 100644
--- a/plugins/tasklist/localization/de_CH.inc
+++ b/plugins/tasklist/localization/de_CH.inc
@@ -66,3 +66,4 @@ $labels['invalidstartduedates'] = 'Beginn der Aufgabe darf nicht grösser als da
 $labels['deletetasktconfirm'] = 'Möchten Sie diese Aufgabe wirklich löschen?';
 $labels['deleteparenttasktconfirm'] = 'Möchten Sie diese Aufgabe inklusive aller Teilaufgaben wirklich löschen?';
 $labels['deletelistconfirm'] = 'Möchten Sie diese Liste mit allen Aufgaben wirklich löschen?';
+$labels['deletelistconfirmrecursive'] = 'Möchten Sie diese Liste mit allen Aufgaben und Unter-Listen wirklich löschen?';
diff --git a/plugins/tasklist/localization/de_DE.inc b/plugins/tasklist/localization/de_DE.inc
index 1cbd2c0..b6d1cc3 100644
--- a/plugins/tasklist/localization/de_DE.inc
+++ b/plugins/tasklist/localization/de_DE.inc
@@ -67,3 +67,4 @@ $labels['invalidstartduedates'] = 'Beginn der Aufgabe darf nicht größer als da
 $labels['deletetasktconfirm'] = 'Möchten Sie diese Aufgabe wirklich löschen?';
 $labels['deleteparenttasktconfirm'] = 'Möchten Sie diese Aufgabe inklusive aller Teilaufgaben wirklich löschen?';
 $labels['deletelistconfirm'] = 'Möchten Sie diese Liste mit allen Aufgaben wirklich löschen?';
+$labels['deletelistconfirmrecursive'] = 'Möchten Sie diese Liste mit allen Aufgaben und Unter-Listen wirklich löschen?';
\ No newline at end of file
diff --git a/plugins/tasklist/localization/en_US.inc b/plugins/tasklist/localization/en_US.inc
index 8a31be3..57d6c3c 100644
--- a/plugins/tasklist/localization/en_US.inc
+++ b/plugins/tasklist/localization/en_US.inc
@@ -66,3 +66,4 @@ $labels['invalidstartduedates'] = 'Start date must not be greater than due date.
 $labels['deletetasktconfirm'] = 'Do you really want to delete this task?';
 $labels['deleteparenttasktconfirm'] = 'Do you really want to delete this task and all its subtasks?';
 $labels['deletelistconfirm'] = 'Do you really want to delete this list with all its tasks?';
+$labels['deletelistconfirmrecursive'] = 'Do you really want to delete this list with all its sub-lists and tasks?';
diff --git a/plugins/tasklist/tasklist.js b/plugins/tasklist/tasklist.js
index 84215b0..49da4f1 100644
--- a/plugins/tasklist/tasklist.js
+++ b/plugins/tasklist/tasklist.js
@@ -1418,7 +1418,7 @@ function rcube_tasklist_ui(settings)
     function list_remove(id)
     {
         var list = me.tasklists[id];
-        if (list && list.editable && confirm(rcmail.gettext('deletelistconfirm', 'tasklist'))) {
+        if (list && list.editable && confirm(rcmail.gettext(list.children ? 'deletelistconfirmrecursive' : 'deletelistconfirm', 'tasklist'))) {
             saving_lock = rcmail.set_busy(true, 'tasklist.savingdata');
             rcmail.http_post('tasklist', { action:'remove', l:{ id:list.id } });
             return true;
@@ -1431,17 +1431,35 @@ function rcube_tasklist_ui(settings)
      */
     function destroy_list(prop)
     {
-        var list = me.tasklists[prop.id],
-            li = rcmail.get_folder_li(prop.id, 'rcmlitasklist');
-
-        if (li) {
-            $(li).remove();
+        var li, delete_ids = [],
+            list = me.tasklists[prop.id];
+
+            // find sub-lists
+        if (list && list.children) {
+            for (var child_id in me.tasklists) {
+                if (String(child_id).indexOf(prop.id) == 0)
+                    delete_ids.push(child_id);
+            }
         }
-        if (list) {
-            list.active = false;
-            // delete me.tasklists[prop.id];
-            unlock_saving();
-            remove_tasks(list.id);
+        else {
+            delete_ids.push(prop.id);
+        }
+
+        // delete all calendars in the list
+        for (var i=0; i < delete_ids.length; i++) {
+            id = delete_ids[i];
+            list = me.tasklists[id];
+            li = rcmail.get_folder_li(id, 'rcmlitasklist');
+
+            if (li) {
+                $(li).remove();
+            }
+            if (list) {
+                list.active = false;
+                // delete me.tasklists[prop.id];
+                unlock_saving();
+                remove_tasks(list.id);
+            }
         }
     }
 




More information about the commits mailing list