diff --git a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php index 0d98c2f6..90772ac1 100644 --- a/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php +++ b/plugins/tasklist/drivers/kolab/tasklist_kolab_driver.php @@ -118,6 +118,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 4a6b3263..ab9a999e 100644 --- a/plugins/tasklist/localization/de_CH.inc +++ b/plugins/tasklist/localization/de_CH.inc @@ -67,3 +67,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 1cbd2c0d..b6d1cc3f 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 8a31be3a..57d6c3c4 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 07d6ddcf..4a37028e 100644 --- a/plugins/tasklist/tasklist.js +++ b/plugins/tasklist/tasklist.js @@ -1467,7 +1467,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; @@ -1480,17 +1480,35 @@ function rcube_tasklist_ui(settings) */ function destroy_list(prop) { - var list = me.tasklists[prop.id], - li = rcmail.get_folder_li(prop.id, 'rcmlitasklist'); + var li, delete_ids = [], + list = me.tasklists[prop.id]; - if (li) { - $(li).remove(); + // 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); + } } }