Index: signup.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/signup/signup.module,v
retrieving revision 1.144
diff -u -p -r1.144 signup.module
--- signup.module	10 Aug 2008 05:56:38 -0000	1.144
+++ signup.module	17 Sep 2008 00:01:17 -0000
@@ -824,17 +824,18 @@ function _signup_node_output($node, $typ
   // If the user has the view signups perm, display the current signups.
   // Pull all users signed up for this event, and start table creation.
   if (user_access('view all signups')) {
-    $registered_signups = db_query("SELECT u.uid, u.name, s.signup_time, s.form_data FROM {signup_log} s INNER JOIN {users} u ON u.uid = s.uid WHERE s.nid = %d AND u.uid <> 0", $node->nid);
-    $anon_signups = db_num_rows(db_query("SELECT anon_mail FROM {signup_log} WHERE nid = %d AND uid = 0", $node->nid));
-    $header = array(array('data' => t('!users signed up', array('!users' => format_plural((db_num_rows($registered_signups) + $anon_signups), '1 individual', '@count individuals')))));
-    $rows = array();
-    while ($signed_up_user = db_fetch_object($registered_signups)) {
-      $rows[] = array(theme('username', $signed_up_user));
+    $registered_query = db_query("SELECT u.uid, u.name, s.signup_time, s.form_data FROM {signup_log} s INNER JOIN {users} u ON u.uid = s.uid WHERE s.nid = %d AND u.uid <> 0", $node->nid);
+    $registered_signups = array();
+    while ($signed_up_user = db_fetch_object($registered_query)) {
+      $registered_signups[] = $signed_up_user;
+    }
+    $anon_query = db_query("SELECT * FROM {signup_log} WHERE nid = %d AND uid = 0", $node->nid);
+    $anon_signups = array();
+    while ($signed_up_user = db_fetch_object($anon_query)) {
+      $anon_signups[] = $signed_up_user;
     }
-    if ($anon_signups) {
-      $rows[] = array(t('!count anonymous', array('!count' => $anon_signups)));
-    }
-    $output .= theme('table', $header, $rows);
+    include_once(SIGNUP_PATH .'/signup.theme');
+    $output .= theme('signup_user_list', $registered_signups, $anon_signups);
   }
   return $output;
 }
Index: signup.theme
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/signup/signup.theme,v
retrieving revision 1.13
diff -u -p -r1.13 signup.theme
--- signup.theme	16 May 2008 19:20:58 -0000	1.13
+++ signup.theme	17 Sep 2008 00:01:17 -0000
@@ -19,6 +19,28 @@ function theme_signup_user_schedule($nod
 }
 
 /**
+ * Formats the list of users signed up for a particular node.
+ *
+ * @param $registered_signups
+ *  Array of objects with data for each registered user signed up.
+ * @param $anon_signups
+ *  Array of objects with data for each anonymous user signed up.
+ */
+function theme_signup_user_list($registered_signups, $anon_signups) {
+  $output = '';
+  $header = array(array('data' => t('!users signed up', array('!users' => format_plural((count($registered_signups) + count($anon_signups)), '1 individual', '@count individuals')))));
+  $rows = array();
+  foreach ($registered_signups as $signup) {
+    $rows[] = array(theme('username', $signup));
+  }
+  if (!empty($anon_signups)) {
+    $rows[] = array(t('!count anonymous', array('!count' => count($anon_signups))));
+  }
+  $output .= theme('table', $header, $rows);
+  return $output;
+}
+
+/**
  * Returns any site-specific custom fields for the signup user form.
  *
  * Feel free to alter any elements in this section, remove them, or
Index: signup_views.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/signup/signup_views.inc,v
retrieving revision 1.9
diff -u -p -r1.9 signup_views.inc
--- signup_views.inc	16 Oct 2007 19:39:30 -0000	1.9
+++ signup_views.inc	17 Sep 2008 00:01:17 -0000
@@ -514,5 +514,88 @@ print l(t("View signup schedule"), "user
   $view->requires = array(node, signup);
   $views[$view->name] = $view;
 
+  $view = new stdClass();
+  $view->name = 'signup_user_list';
+  $view->description = 'List all users signed up for a node';
+  $view->disabled = TRUE;
+  $view->access = array ();
+  $view->view_args_php = '';
+  $view->page = TRUE;
+  $view->page_title = '';
+  $view->page_header = '';
+  $view->page_header_format = '1';
+  $view->page_footer = '';
+  $view->page_footer_format = '1';
+  $view->page_empty = '';
+  $view->page_empty_format = '1';
+  $view->page_type = 'table';
+  $view->url = 'node/$signup/signup-list';
+  $view->use_pager = TRUE;
+  $view->nodes_per_page = '200';
+  $view->menu = TRUE;
+  $view->menu_title = 'Signup list';
+  $view->menu_tab = TRUE;
+  $view->menu_tab_weight = '0';
+  $view->menu_tab_default = FALSE;
+  $view->menu_tab_default_parent = NULL;
+  $view->menu_tab_default_parent_type = 'tab';
+  $view->menu_parent_tab_weight = '0';
+  $view->menu_parent_title = '';
+  $view->sort = array ();
+  $view->argument = array (
+    array (
+      'type' => 'nid',
+      'argdefault' => '1',
+      'title' => '%1',
+      'options' => '0',
+      'wildcard' => '',
+      'wildcard_substitution' => '',
+    ),
+  );
+  $view->field = array (
+    array (
+      'tablename' => 'signup_log',
+      'field' => 'uid',
+      'label' => 'Username',
+      'sortable' => '1',
+    ),
+    array (
+      'tablename' => 'signup_log',
+      'field' => 'signup_time',
+      'label' => 'Time signed up',
+      'handler' => 'views_handler_field_since',
+      'sortable' => '1',
+      'defaultsort' => 'DESC',
+    ),
+  );
+  $view->filter = array ();
+  $view->exposed_filter = array ();
+  $view->requires = array(signup_log);
+  $views[$view->name] = $view;
+
   return $views;
 }
+
+function signup_views_url_tokens() {
+  return array(
+    '$signup' => 'signup_url_node',
+  );
+}
+
+function signup_url_node($token, $argument, $arg) {
+  if (!is_numeric($arg)) {
+    return FALSE;
+  }
+
+  $node = node_load($arg);
+  if (!$node) {
+    return FALSE;
+  }
+  
+  // This node is signup enabled
+  if ($node->signup) {
+    return TRUE;
+  }
+  
+  return FALSE;
+}
