From 2de968d89bb4bc183935b9704511ec3ef194f714 Mon Sep 17 00:00:00 2001 From: Jan Schneider Date: Mon, 16 Nov 2009 19:14:12 +0100 Subject: [PATCH] Implement task deletion. --- kronolith/ajax.php | 17 +++++++++++ kronolith/js/kronolith.js | 58 ++++++++++++++++++++++++++++++++++++++ kronolith/templates/index/task.inc | 1 + nag/lib/Api.php | 26 +++++++++++++++-- 4 files changed, 99 insertions(+), 3 deletions(-) diff --git a/kronolith/ajax.php b/kronolith/ajax.php index 0f753efa5..9288db902 100644 --- a/kronolith/ajax.php +++ b/kronolith/ajax.php @@ -370,6 +370,23 @@ try { $result->task = $task->toJson(true, $prefs->getValue('twentyFour') ? 'H:i' : 'h:i A'); break; + case 'DeleteTask': + if (!$registry->hasMethod('tasks/deleteTask')) { + break; + } + if (is_null($id = Horde_Util::getFormData('id')) || + is_null($list = Horde_Util::getFormData('list'))) { + break; + } + $result = $registry->tasks->deleteTask($list, $id); + if (is_a($result, 'PEAR_Error')) { + $notification->push($result, 'horde.error'); + break; + } + $result = new stdClass; + $result->deleted = true; + break; + case 'ToggleCompletion': if (!$registry->hasMethod('tasks/toggleCompletion')) { break; diff --git a/kronolith/js/kronolith.js b/kronolith/js/kronolith.js index e16188cf1..bbb7c5ead 100644 --- a/kronolith/js/kronolith.js +++ b/kronolith/js/kronolith.js @@ -1782,6 +1782,7 @@ KronolithCore = { this.doAction('GetTask', { 'list': tasklist, 'id': id }, this._editTask.bind(this)); } else { $('kronolithTaskId').clear(); + $('kronolithTaskOldList').clear(); $('kronolithTaskList').setValue(Kronolith.conf.default_tasklist); $('kronolithTaskDelete').hide(); $('kronolithTaskDueDate').setValue(d.toString(Kronolith.conf.date_format)); @@ -1808,6 +1809,7 @@ KronolithCore = { /* Basic information */ $('kronolithTaskId').setValue(task.id); + $('kronolithTaskOldList').setValue(task.l); $('kronolithTaskList').setValue(task.l); $('kronolithTaskTitle').setValue(task.n); //$('kronolithTaskLocation').setValue(task.l); @@ -1853,6 +1855,21 @@ KronolithCore = { }, /** + * Finally removes a task from the DOM and the cache. + * + * @param string task A task id. + * @param string list A task list name. + */ + _removeTask: function(task, list) + { + this._deleteTasksCache(task, list); + $('kronolithViewTasksBody').select('tr').find(function(el) { + return el.retrieve('tasklist') == list && + el.retrieve('taskid') == task; + }).remove(); + }, + + /** * Parses a date attribute string into a Date object. * * For other strings use Date.parse(). @@ -2019,6 +2036,23 @@ KronolithCore = { }, /** + * Deletes a task from the cache. + * + * @param string task A task ID. + * @param string list A task list string. + */ + _deleteTasksCache: function(task, list) + { + this._deleteCache(task, [ 'external', 'tasks/' + list ]); + [ 'complete', 'incomplete' ].each(function(type) { + if (!Object.isUndefined(this.tcache.get(type)) && + !Object.isUndefined(this.tcache.get(type).get(list))) { + this.tcache.get(type).get(list).unset(task); + } + }, this); + }, + + /** * Return all events for a single day from all displayed calendars merged * into a single hash. * @@ -2249,6 +2283,30 @@ KronolithCore = { e.stop(); return; + case 'kronolithTaskDelete': + var tasklist = $F('kronolithTaskOldList'), + taskid = $F('kronolithTaskId'); + this.doAction('DeleteTask', + { 'list': tasklist, 'id': taskid }, + function(r) { + if (r.response.deleted) { + this._removeTask(taskid, tasklist); + } else { + $('kronolithViewTasksBody').select('tr').find(function(el) { + return el.retrieve('tasklist') == tasklist && + el.retrieve('taskid') == taskid; + }).toggle(); + } + }.bind(this)); + $('kronolithViewTasksBody').select('tr').find(function(el) { + return el.retrieve('tasklist') == tasklist && + el.retrieve('taskid') == taskid; + }).hide(); + this._closeRedBox(); + window.history.back(); + e.stop(); + return; + case 'kronolithEventCancel': case 'kronolithTaskCancel': this._closeRedBox(); diff --git a/kronolith/templates/index/task.inc b/kronolith/templates/index/task.inc index b596feb64..1f9561093 100644 --- a/kronolith/templates/index/task.inc +++ b/kronolith/templates/index/task.inc @@ -1,6 +1,7 @@