--- /var/www/sichuanteachers/modules/signup/signup.module	2009-08-23 23:44:54.000000000 +0800
+++ /var/www/sichuanteachers/sites/all/modules/signup/signup.module	2009-10-03 23:27:14.000000000 +0800
@@ -844,6 +844,11 @@
  */
 function signup_action_info() {
   return array(
+    'signup_save_action' => array(
+      'type' => 'signup',
+      'description' => t('Signup'),
+      'configurable' => FALSE,
+    ),
     'signup_cancel_action' => array(
       'type' => 'signup',
       'description' => t('Cancel signup'),
@@ -862,6 +867,10 @@
   );
 }
 
+function signup_save_action($signup) {
+  signup_save_signup($signup);
+  watchdog('action', 'Save signup @signup_id.', array('@signup_id' => $signup->sid));
+}
 /**
  * Action callback to cancel a given signup.
  *
@@ -1038,6 +1047,7 @@
 
   // Invoke hook_signup_cancel().
   module_invoke_all('signup_cancel', $signup, $node);
+  module_invoke_all('signup', 'cancel', $signup);
 
   // Delete the record from the {signup_log} table.
   db_query('DELETE FROM {signup_log} WHERE sid = %d', $signup->sid);
@@ -1178,6 +1188,8 @@
 
     // Allow other modules to inject data into the user's signup data.
     $extra = module_invoke_all('signup_sign_up', $node, $user);
+    module_invoke_all('signup', 'sign_up', $signup);
+
     $signup_info = array();
     if (!empty($signup_form['signup_form_data'])) {
       $signup_info = $signup_form['signup_form_data'];
@@ -1698,3 +1710,52 @@
   }
   return $values;
 }
+
+/**
+ * Implementation of hook_hook_info().
+ */
+function signup_hook_info() {
+  return array(
+    'signup' => array(
+      'signup' => array(
+        'sign_up' => array(
+          'runs when' => t('After signing up a node'),
+        ),
+        'cancel' => array(
+          'runs when' => t('After canceling signup of a node'),
+        ),
+/*        'signup_cancel' => array(
+          'runs when' => t('When a user cancel his signup to a node'),
+        ),
+*/
+      ),
+    ),
+  );
+}
+
+/**
+* Implementation of hook_trigger_name().
+*/
+function signup_signup ($op, $signup) {
+  if (!in_array($op, array('sign_up', 'cancel'))) {
+    return;
+  }
+  $aids = _trigger_get_hook_aids('signup', $op);
+  $context = array(
+    'hook' => 'signup',
+    'op' => $op,
+  );
+  actions_do(array_keys($aids), $signup, $context);
+}
+
+/**
+ * Implementation of hook_menu_alter().
+ * 
+ * Work around loss of menu local task inheritance in Drupal 6.2.
+ */
+function signup_menu_alter(&$callbacks) {
+  print_r ($callbacks);
+  if (module_exists('trigger') & isset($callbacks['admin/build/trigger/signup'])) {
+    $callbacks['admin/build/trigger/signup']['access callback'] = 'trigger_access_check';
+  }
+}
