Index: signup_status.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/signup_status/signup_status.module,v
retrieving revision 1.3
diff -u -p -u -p -r1.3 signup_status.module
--- signup_status.module	12 Jan 2009 18:43:43 -0000	1.3
+++ signup_status.module	12 Jan 2009 19:01:18 -0000
@@ -1377,6 +1377,7 @@ function signup_status_signup_data_alter
   }
 }
 
+
 /**
  * Implementation of hook_views_api().
  */
@@ -1387,3 +1388,47 @@ function signup_status_views_api() {
   );
 }
 
+
+/**
+ * Implementation of hook_action_info().
+ */
+function signup_status_action_info() {
+  return array(
+    'signup_status_alter_action' => array(
+      'type' => 'signup',
+      'description' => t('Alter signup status'),
+      'configurable' => TRUE,
+    ),
+  );
+}
+
+function signup_status_alter_action(&$signup, $context) {
+  $status_codes = signup_status_codes();
+  $signup->status = $context['signup_status'];
+  db_query("UPDATE {signup_log} SET status = %d WHERE sid = %d", $signup->status, $signup->sid);
+  watchdog('action', 'Set status of %signup_label to %status_name.', array('%signup_label' => $signup->label, '%status_name' => $status_codes[$signup->status]['name']));
+}
+
+function signup_status_alter_action_form($context) {
+  $options = array();
+  foreach (signup_status_codes() as $cid => $code) {
+    $options[$cid] = $code['name'];
+  }
+  $form['signup_status'] = array(
+    '#type' => 'select',
+    '#title' => t('Signup status'),
+    '#options' => $options,
+  );
+  return $form;
+}
+
+function signup_status_alter_action_validate($form, $form_state) {
+  if ($form_state['values']['signup_status'] == 0) {
+    form_set_error('signup_status', t('You must select a status.'));
+  }
+}
+
+function signup_status_alter_action_submit($form, $form_state) {
+  return array('signup_status' => $form_state['values']['signup_status']);
+}
+
