From: Jan Schneider Date: Mon, 23 Nov 2009 14:47:04 +0000 (+0100) Subject: Adding tasks. X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=c9fe2f6e63293860b99cb5287a1f33425f207d20;p=horde.git Adding tasks. --- diff --git a/kronolith/ajax.php b/kronolith/ajax.php index 1a0a8e6f9..a1917be17 100644 --- a/kronolith/ajax.php +++ b/kronolith/ajax.php @@ -371,13 +371,13 @@ try { break; case 'SaveTask': - if (!$registry->hasMethod('tasks/updateTask')) { - break; - } - if (is_null($id = Horde_Util::getFormData('task_id')) || - is_null($list = Horde_Util::getFormData('old_tasklist'))) { + if (!$registry->hasMethod('tasks/updateTask') || + !$registry->hasMethod('tasks/addTask')) { break; } + + $id = Horde_Util::getFormData('task_id'); + $list = Horde_Util::getFormData('old_tasklist'); $task = Horde_Util::getFormData('task'); $due = trim($task['due_date'] . ' ' . $task['due_time']); @@ -412,11 +412,18 @@ try { $task['alarm'] = 0; } - $result = $registry->tasks->updateTask($list, $id, $task); + if ($id && $list) { + $result = $registry->tasks->updateTask($list, $id, $task); + } else { + $result = $registry->tasks->addTask($task); + } if (is_a($result, 'PEAR_Error')) { $notification->push($result, 'horde.error'); break; } + if (!$id) { + $id = $result[0]; + } $task = $registry->tasks->getTask($task['tasklist'], $id); if (is_a($task, 'PEAR_Error')) { $notification->push($task, 'horde.error'); diff --git a/kronolith/js/kronolith.js b/kronolith/js/kronolith.js index 7533f5426..11ae0d51c 100644 --- a/kronolith/js/kronolith.js +++ b/kronolith/js/kronolith.js @@ -1847,10 +1847,15 @@ KronolithCore = { } else { $('kronolithTaskId').clear(); $('kronolithTaskOldList').clear(); - //$('kronolithTaskList').setValue(Kronolith.conf.default_tasklist); + $('kronolithTaskList').setValue(Kronolith.conf.tasks.default_tasklist); + $('kronolithTaskTitle').clear(); + //$('kronolithTaskLocation').setValue('http://'); + $('kronolithTaskDueDate').clear(); + $('kronolithTaskDueTime').clear(); + $('kronolithTaskDescription').clear(); + $('kronolithTaskPriority').setValue(3); + $('kronolithTaskCompleted').setValue(0); $('kronolithTaskDelete').hide(); - $('kronolithTaskDueDate').setValue(d.toString(Kronolith.conf.date_format)); - $('kronolithTaskDueTime').setValue(d.toString(Kronolith.conf.time_format)); RedBox.showHtml($('kronolithTaskDialog').show()); } }, @@ -1896,6 +1901,19 @@ KronolithCore = { $('kronolithEventAlarmOff').setValue(true); } + if (task.pe) { + $('kronolithTaskSave').show(); + $('kronolithTaskForm').enable(); + } else { + $('kronolithTaskSave').hide(); + $('kronolithTaskForm').disable(); + } + if (task.pd) { + $('kronolithTaskDelete').show(); + } else { + $('kronolithTaskDelete').hide(); + } + this.setTitle(task.n); RedBox.showHtml($('kronolithTaskDialog').show()); }, @@ -2583,7 +2601,11 @@ KronolithCore = { return; case 'kronolithTaskRow': - this.go('task:' + elt.retrieve('tasklist') + ':' + elt.retrieve('taskid')); + if (elt.retrieve('taskid')) { + this.go('task:' + elt.retrieve('tasklist') + ':' + elt.retrieve('taskid')); + } else { + this.go('task'); + } e.stop(); return; } diff --git a/kronolith/lib/Kronolith.php b/kronolith/lib/Kronolith.php index edd30fd37..ce5e6c4ed 100644 --- a/kronolith/lib/Kronolith.php +++ b/kronolith/lib/Kronolith.php @@ -118,6 +118,7 @@ class Kronolith $kronolith_webroot = $registry->get('webroot'); $horde_webroot = $registry->get('webroot', 'horde'); + $has_tasks = $GLOBALS['registry']->hasInterface('tasks'); /* Variables used in core javascript files. */ $code['conf'] = array( @@ -156,8 +157,11 @@ class Kronolith '1440' => _("1 day")), ); + if ($has_tasks) { + $code['conf']['tasks'] = $GLOBALS['registry']->tasks->ajaxDefaults(); + } + // Calendars - $has_tasks = $GLOBALS['registry']->hasInterface('tasks'); foreach (array(true, false) as $my) { foreach ($GLOBALS['all_calendars'] as $id => $calendar) { $owner = $calendar->get('owner') == Horde_Auth::getAuth(); diff --git a/kronolith/templates/index/tasks.inc b/kronolith/templates/index/tasks.inc index 38344a5f7..40ccdbf1a 100644 --- a/kronolith/templates/index/tasks.inc +++ b/kronolith/templates/index/tasks.inc @@ -12,7 +12,7 @@ - +
diff --git a/kronolith/themes/silver/screen.css b/kronolith/themes/silver/screen.css index e11e47165..451066f93 100644 --- a/kronolith/themes/silver/screen.css +++ b/kronolith/themes/silver/screen.css @@ -16,3 +16,6 @@ body #sbarHide { table.monthgrid { border-top: 0; } +table.kronolithView td.button { + border-color: #999; +} diff --git a/nag/lib/Api.php b/nag/lib/Api.php index 40af57304..88ad72342 100644 --- a/nag/lib/Api.php +++ b/nag/lib/Api.php @@ -19,6 +19,19 @@ class Nag_Api extends Horde_Registry_Api ); /** + * Returns a number of defaults necessary for the ajax view. + * + * @return array A hash with default values. + */ + public function ajaxDefaults() + { + require_once dirname(__FILE__) . '/base.php'; + return array( + 'default_tasklist' => Nag::getDefaultTasklist(Horde_Perms::EDIT), + ); + } + + /** * Retrieves the current user's task list from storage. * * This function will also sort the resulting list, if requested. @@ -824,6 +837,41 @@ class Nag_Api extends Horde_Registry_Api } /** + * Adds a task. + * + * @param array $task A hash with overwriting task information. + */ + public function addTask($task) + { + require_once dirname(__FILE__) . '/base.php'; + + if (!Horde_Auth::isAdmin() && + !array_key_exists($task['tasklist'], + Nag::listTasklists(false, Horde_Perms::EDIT))) { + return PEAR::raiseError(_("Permission Denied")); + } + + $storage = Nag_Driver::singleton($task['tasklist']); + + return $storage->add( + isset($task['name']) ? $task['name'] : '', + isset($task['desc']) ? $task['desc'] : '', + isset($task['start']) ? $task['start'] : 0, + isset($task['due']) ? $task['due'] : 0, + isset($task['priority']) ? $task['priority'] : 3, + isset($task['estimate']) ? $task['estimate'] : 0, + !empty($task['completed']), + isset($task['category']) ? $task['category'] : '', + isset($task['alarm']) ? $task['alarm'] : 0, + isset($task['methods']) ? $task['alarm'] : null, + isset($task['uid']) ? $task['uid'] : null, + isset($task['parent_id']) ? $task['parent_id'] : '', + !empty($task['private']), + Horde_Auth::getAuth(), + isset($task['assignee']) ? $task['assignee'] : null); + } + + /** * Imports one or more tasks parsed from a string. * * @param string $text The text to parse into diff --git a/nag/lib/Task.php b/nag/lib/Task.php index 110340ea1..ec7840280 100644 --- a/nag/lib/Task.php +++ b/nag/lib/Task.php @@ -704,6 +704,13 @@ class Nag_Task { $json->a = $this->alarm; $json->m = $this->methods; //$json->pv = (boolean)$this->private; + + $share = $GLOBALS['nag_shares']->getShare($this->tasklist); + if (is_a($share, 'PEAR_Error')) { + return $share; + } + $json->pe = $share->hasPermission(Horde_Auth::getAuth(), Horde_Perms::EDIT); + $json->pd = $share->hasPermission(Horde_Auth::getAuth(), Horde_Perms::DELETE); } return $json;