[nag] PATCH: Show whups tickets on nag task list.

Jason M. Felice jfelice at cronosys.com
Tue Jun 3 13:27:59 PDT 2003


The attached patch adds logic to Nag::listTasks() to check for applications
with registered 'getListAsTypes' and 'listAs' apis that support a type
called 'taskHash'.  Any app supporting this will be queried for tasks to
display on the task list.  And this patch implements those two apis for whups.

This patch also implements the listAs API for nag itself.

-------------- next part --------------
Index: nag/list.php
===================================================================
RCS file: /repository/nag/list.php,v
retrieving revision 1.53
diff -u -u -r1.53 list.php
--- nag/list.php	23 May 2003 03:56:10 -0000	1.53
+++ nag/list.php	3 Jun 2003 20:05:05 -0000
@@ -95,11 +95,6 @@
         } else {
             $style = 'text' . $task['priority'];
         }
-        $viewurl = Horde::addParameter('view.php', 'task=' . $task['task_id']);
-        $viewurl = Horde::addParameter($viewurl, 'tasklist=' . $task['tasklist_id']);
-
-        $taskurl = Horde::addParameter('task.php', 'task=' . $task['task_id']);
-        $taskurl = Horde::addParameter($taskurl, 'tasklist=' . $task['tasklist_id']);
         $share = $GLOBALS['nag_shares']->getShare($task['tasklist_id']);
 
         $owner = $task['tasklist_id'];
Index: nag/lib/Nag.php
===================================================================
RCS file: /repository/nag/lib/Nag.php,v
retrieving revision 1.74
diff -u -u -r1.74 Nag.php
--- nag/lib/Nag.php	1 Jun 2003 01:38:47 -0000	1.74
+++ nag/lib/Nag.php	3 Jun 2003 20:05:05 -0000
@@ -91,7 +91,7 @@
     function listTasks($sortby = NAG_SORT_PRIORITY,
                        $sortdir = NAG_SORT_ASCEND)
     {
-        global $prefs, $conf;
+        global $prefs, $conf, $registry;
         $tasks = array();
 
         /* Sorting criteria for the task list. */
@@ -112,24 +112,51 @@
 
             /* Retrieve the task list for storage. */
             $newtasks = $storage->listTasks();
+            foreach ($newtasks as $taskID => $task) {
+                $url = Horde::addParameter('view.php', 'task=' . $task['task_id']);
+                $url = Horde::addParameter($url, 'tasklist=' . $task['tasklist_id']);
+                $newtasks[$taskID]['view_link'] = Horde::applicationUrl($url);
 
-            /* Filter complete/incomplete tasks if the user doesn't
-             * want them shown. */
-            if ($prefs->getValue('show_completed') == 0) {
-                foreach ($newtasks as $taskID => $task) {
-                    if (!empty($task['completed'])) {
-                        unset($newtasks[$taskID]);
-                    }
-                }
-            } elseif ($prefs->getValue('show_completed') == 2) {
-                foreach ($newtasks as $taskID => $task) {
-                    if (empty($task['completed'])) {
-                        unset($newtasks[$taskID]);
-                    }
-                }
+                $url = Horde::addParameter('task.php', 'task=' . $task['task_id']);
+                $url = Horde::addParameter($url, 'tasklist=' . $task['tasklist_id']);
+                $newtasks[$taskID]['complete_link'] = Horde::applicationUrl(Horde::addParameter($url, 'actionID=' . NAG_COMPLETE_TASKS));
+                $newtasks[$taskID]['edit_link'] = Horde::applicationUrl(Horde::addParameter($url, 'actionID=' . NAG_MODIFY_TASK));
+                $newtasks[$taskID]['delete_link'] = Horde::applicationUrl(Horde::addParameter($url, 'actionID=' . NAG_DELETE_TASKS));
             }
 
             $tasks = array_merge($tasks, $newtasks);
+        }
+
+        // We look for registered apis that support listAs(taskHash).
+        $apps = $registry->listApps();
+        foreach ($apps as $app) {
+            if ($app == 'nag')
+                continue;
+            if ($registry->hasMethod('getListAsTypes', $app)) {
+                $listAsTypes = $registry->callByPackage($app, 'getListAsTypes');
+                if (in_array('taskHash',$listAsTypes)) {
+                    $newtasks = $registry->callByPackage($app, 'listAs', array('taskHash'));
+                    $tasks = array_merge($tasks, $newtasks);
+                }
+            }
+        }
+
+        /* Filter complete/incomplete tasks if the user doesn't
+         * want them shown. */
+        switch ($prefs->getValue('show_completed')) {
+        case 0:
+            foreach ($tasks as $taskID => $task) {
+                if (!empty($task['completed']))
+                    unset($tasks[$taskID]);
+            }
+            break;
+
+        case 2:
+            foreach ($tasks as $taskID => $task) {
+                if (empty($task['completed']))
+                    unset($tasks[$taskID]);
+            }
+            break;
         }
 
         // Sort the array if we have a sort function defined for this
Index: nag/lib/api.php
===================================================================
RCS file: /repository/nag/lib/api.php,v
retrieving revision 1.44
diff -u -u -r1.44 api.php
--- nag/lib/api.php	22 Apr 2003 03:29:57 -0000	1.44
+++ nag/lib/api.php	3 Jun 2003 20:05:05 -0000
@@ -62,6 +62,13 @@
     'args' => array('categoryID', 'tasklist'),
     'type' => 'string');
 
+$_services['getListAsTypes'] = array(
+    'args' => array(),
+    'type' => 'array');
+
+$_services['listAs'] = array(
+    'args' => array('type'),
+    'type' => 'array');
 
 function _nag_linkParameters()
 {
@@ -185,4 +192,15 @@
     } else {
         return _("Task not found.");
     }
+}
+
+function _nag_getListAsTypes ()
+{
+    return array('taskHash');
+}
+
+function _nag_listAs ($type)
+{
+    require_once dirname(__FILE__) . '/base.php';
+    return Nag::listTasks();
 }
Index: nag/templates/list/task_summaries.inc
===================================================================
RCS file: /repository/nag/templates/list/task_summaries.inc,v
retrieving revision 1.31
diff -u -u -r1.31 task_summaries.inc
--- nag/templates/list/task_summaries.inc	7 May 2003 15:14:21 -0000	1.31
+++ nag/templates/list/task_summaries.inc	3 Jun 2003 20:05:05 -0000
@@ -1,16 +1,16 @@
 <tr class="<?php echo $style ?>" onmouseover="javascript:style.backgroundColor='<?php echo $css['.' . $style . '-hi']['background-color'] ?>'" onmouseout="javascript:style.backgroundColor='<?php echo $css['.' . $style]['background-color'] ?>'">
     <td nowrap="nowrap">
         <?php if (!is_a($share, 'PEAR_Error') && $share->hasPermission(Auth::getAuth(), _PERMS_DELETE)): ?>
-            <?php echo Horde::link(Horde::applicationUrl(Horde::addParameter($taskurl, 'actionID=' . NAG_DELETE_TASKS)), _("Delete Task"), 'widget') ?>
+            <?php echo Horde::link($task['delete_link'], _("Delete Task"), 'widget') ?>
             <?php echo Horde::img('delete.gif', _("Delete Task")) ?>
             </a>
         <?php endif; ?>
 
         <?php if (!is_a($share, 'PEAR_Error') && $share->hasPermission(Auth::getAuth(), _PERMS_EDIT) && empty($task['completed'])): ?>
-            <?php echo Horde::link(Horde::applicationUrl(Horde::addParameter($taskurl, 'actionID=' . NAG_MODIFY_TASK)), _("Edit Task"), 'widget') ?>
+            <?php echo Horde::link($task['edit_link'], _("Edit Task"), 'widget') ?>
             <?php echo Horde::img('edit.gif', _("Edit Task")) ?>
             </a>
-            <?php echo Horde::link(Horde::applicationUrl(Horde::addParameter($taskurl, 'actionID=' . NAG_COMPLETE_TASKS)), _("Complete Task"), 'widget') ?>
+            <?php echo Horde::link($task['complete_link'], _("Complete Task"), 'widget') ?>
             <?php echo Horde::img('complete.gif', _("Complete Task")) ?>
             </a>
         <?php endif; ?>
@@ -19,7 +19,7 @@
     <td align="center" nowrap="nowrap"><?php echo htmlspecialchars(Nag::formatCompletion($task['completed'])) ?></a></td>
     <td align="center" nowrap="nowrap"><?php echo $owner ?></td>
     <td align="center"><?php echo $task['priority'] ?></td>
-    <td nowrap="nowrap"><?php echo Horde::link(Horde::applicationUrl($viewurl), _("View Task Details"), '', '', '', $task['desc']) ?><?php echo !empty($task['name']) ? htmlspecialchars($task['name']) : _("[none]") ?></a></td>
+    <td nowrap="nowrap"><?php echo Horde::link($task['view_link'], _("View Task Details"), '', '', '', $task['desc']) ?><?php echo !empty($task['name']) ? htmlspecialchars($task['name']) : _("[none]") ?></a></td>
     <td nowrap="nowrap">
 <?php if ($task['due'] > 0): ?>
        <?php if (empty($task['completed']) && $task['due'] < time()) { echo '<span class="overdue">' . strftime($conf['list']['date_format'], $task['due']) . '</span>';
Index: whups/lib/api.php
===================================================================
RCS file: /repository/whups/lib/api.php,v
retrieving revision 1.41
diff -u -u -r1.41 api.php
--- whups/lib/api.php	5 Apr 2003 02:41:33 -0000	1.41
+++ whups/lib/api.php	3 Jun 2003 20:05:05 -0000
@@ -69,6 +69,13 @@
     'args' => array(),
     'type' => 'array');
 
+$_services['getListAsTypes'] = array(
+    'args' => array(),
+    'type' => 'array');
+
+$_services['listAs'] = array(
+    'args' => array('type'),
+    'type' => 'array');
 
 function _whups_block($type, $params)
 {
@@ -504,4 +511,53 @@
     } else {
         return $ticket;
     }
+}
+
+function _whups_getListAsTypes ()
+{
+    return array('taskHash');
+}
+
+function _whups_listAs ($type)
+{
+    if ($type != 'taskHash')
+        return array();
+
+    require_once dirname(__FILE__) . '/base.php';
+    global $whups;
+    $info = array('owner' => Auth::getAuth(),
+                  'nores' => true);
+    $tickets = &$whups->getTicketsByProperties($info);
+    if (is_a($tickets, 'PEAR_Error')) {
+        return $tickets;
+    }
+    $result = array();
+    foreach ($tickets as $ticket) {
+        $base = Horde::addParameter('details.php', 'id='.$ticket['id']);
+        $view_link = Horde::applicationUrl($base);
+
+        $delete_link = Horde::addParameter($base, 'action=dt');
+        $delete_link = Horde::applicationUrl($delete_link);
+
+        $complete_link = Horde::addParameter($base, 'action=ss');
+        $complete_link = Horde::applicationUrl($complete_link);
+
+        $result['whups/'.$ticket['id']] = array(
+            'task_id'           => $ticket['id'],
+            'priority'          => $ticket['_priority_name'],
+            'tasklist_id'       => $ticket['user_id_owner'],
+            'completed'         => !empty($ticket['_date_resolved']),
+            'name'              => $ticket['_module_name'] . ' ' .
+                                   $ticket['id'] . ' - ' . $ticket['summary'],
+            'desc'              => null,
+            'due'               => null,
+            'category'          => null,
+            'view_link'         => $view_link,
+            'delete_link'       => $delete_link,
+            'edit_link'         => $view_link,
+            'complete_link'     => $complete_link,
+            );
+
+    }
+    return $result;
 }


More information about the nag mailing list