Index: signup.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/signup/signup.module,v
retrieving revision 1.205.2.18
diff -u -p -u -p -r1.205.2.18 signup.module
--- signup.module	4 Mar 2009 20:20:37 -0000	1.205.2.18
+++ signup.module	17 Mar 2009 07:09:02 -0000
@@ -1505,3 +1505,23 @@ function _signup_get_admin_list_view() {
   return variable_get('signup_admin_list_view', $default);
 }
 
+/**
+ * Menu access callback for the signup_plugin_access_user_signup_list plugin.
+ */
+function signup_view_user_list_access($view_name, $display_id, $argument_name) {
+  global $user;
+  if (user_access('view all signups')) {
+    return TRUE;
+  }
+  $view = views_get_view($view_name);
+  $view->build($display_id);
+  $i = 0;
+  foreach (explode('/', $view->display_handler->get_option('path')) as $element) {
+    if ($element == '%') {
+      $view->args[] = arg($i);
+    }
+    $i++;
+  }
+  return $user->uid == $view->argument[$argument_name]->get_value();
+}
+
Index: views/signup.views.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/signup/views/signup.views.inc,v
retrieving revision 1.4.2.6
diff -u -p -u -p -r1.4.2.6 signup.views.inc
--- views/signup.views.inc	22 Jan 2009 19:00:55 -0000	1.4.2.6
+++ views/signup.views.inc	17 Mar 2009 07:09:03 -0000
@@ -341,12 +341,22 @@ function signup_views_handlers() {
  * Implementation of hook_views_plugins().
  */
 function signup_views_plugins() {
+  $path = drupal_get_path('module', 'signup') .'/views/plugins';
   return array(
     'argument validator' => array(
       'signup_status' => array(
         'title' => t('Signup status'),
         'handler' => 'signup_plugin_argument_validate_signup_status',
-        'path' => drupal_get_path('module', 'signup') .'/views/plugins',
+        'path' => $path,
+      ),
+    ),
+    'access' => array(
+      'user_signup_list' => array(
+        'title' => t('View per-user signup lists'),
+        'help' => t("Access will be granted to users viewing their own signup list or with the 'view all signups' permission."),
+        'handler' => 'signup_plugin_access_user_signup_list',
+        'uses options' => TRUE,
+        'path' => $path,
       ),
     ),
   );
Index: views/plugins/signup_plugin_access_user_signup_list.inc
===================================================================
RCS file: views/plugins/signup_plugin_access_user_signup_list.inc
diff -N views/plugins/signup_plugin_access_user_signup_list.inc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ views/plugins/signup_plugin_access_user_signup_list.inc	17 Mar 2009 07:09:03 -0000
@@ -0,0 +1,55 @@
+<?php
+// $Id$
+
+/**
+ * Validate whether an argument is a user who has permission to view signups.
+ */
+class signup_plugin_access_user_signup_list extends views_plugin_access {
+
+  /**
+   * See if the given user should have access outside of the menu system.
+   *
+   * This is used for block displays, for example. If the given account has
+   * the 'view all signups' permission, we always grant access.  Otherwise, we
+   * only grant access if the user the view is listing (from a given argument)
+   * matches the given account.
+   */
+  function access($account) {
+    if (user_access('view all signups', $account)) {
+      return TRUE;
+    }
+    $this->view->set_display($this->display->id);
+    $this->view->init_handlers();
+    $user_arg = $this->options['signup_user_argument'];
+    $argument = $this->view->argument[$user_arg];
+    return $account->uid == $argument->get_value();
+  }
+
+  function get_access_callback() {
+    return array('signup_view_user_list_access', array($this->view->name, $this->display->id, $this->options['signup_user_argument']));
+  }
+
+  function summary_title() {
+    return t('View signup user list');
+  }
+
+  function option_defaults(&$options) {
+    $options['signup_user_argument'] = '';
+  }
+  
+  function options_form(&$form, &$form_state) {
+    $arguments = array();
+    foreach ($this->view->display_handler->get_handlers('argument') as $id => $handler) {
+      $arguments[$id] = $handler->definition['title'];
+    }
+    $form['signup_user_argument'] = array(
+      '#type' => 'select',
+      '#options' => $arguments,
+      '#title' => t('Signup user argument'),
+      '#description' => t('You must select which argument to this view represents the user who signed up.'),
+      '#default_value' => $this->options['signup_user_argument'],
+    );
+  }
+
+}
+
