Adding tasks.
authorJan Schneider <jan@horde.org>
Mon, 23 Nov 2009 14:47:04 +0000 (15:47 +0100)
committerJan Schneider <jan@horde.org>
Mon, 23 Nov 2009 15:45:57 +0000 (16:45 +0100)
kronolith/ajax.php
kronolith/js/kronolith.js
kronolith/lib/Kronolith.php
kronolith/templates/index/tasks.inc
kronolith/themes/silver/screen.css
nag/lib/Api.php
nag/lib/Task.php

index 1a0a8e6..a1917be 100644 (file)
@@ -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');
index 7533f54..11ae0d5 100644 (file)
@@ -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;
             }
index edd30fd..ce5e6c4 100644 (file)
@@ -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();
index 38344a5..40ccdbf 100644 (file)
@@ -12,7 +12,7 @@
   </caption>
   <tbody id="kronolithViewTasksBody">
      <tr class="kronolithTaskRow">
-       <td class="kronolithTaskCol kronolithAddTask">
+       <td class="kronolithTaskCol kronolithAddTask button">
          <div class="kronolithAddTaskIcon"></div><?php echo _("Add Task") ?>
        </td>
     </tr>
index e11e471..451066f 100644 (file)
@@ -16,3 +16,6 @@ body #sbarHide {
 table.monthgrid {
     border-top: 0;
 }
+table.kronolithView td.button {
+    border-color: #999;
+}
index 40af573..88ad723 100644 (file)
@@ -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
index 110340e..ec78402 100644 (file)
@@ -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;