Index: signup_status_cert.info
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/signup_status/modules/signup_status_cert/signup_status_cert.info,v
retrieving revision 1.2
diff -u -r1.2 signup_status_cert.info
--- signup_status_cert.info	12 Jan 2009 18:10:26 -0000	1.2
+++ signup_status_cert.info	14 Aug 2009 18:59:37 -0000
@@ -1,4 +1,11 @@
 ; $Id: signup_status_cert.info,v 1.2 2009/01/12 18:10:26 jrbeeman Exp $
-name = "Signup Status Certificates"
-description = "Allow signup-enabled node creators to grant users a certificate when they 'complete' a signup."
-dependencies = signup_status token
\ No newline at end of file
+name = Signup Status Certificates
+description = Allow signup-enabled node creators to grant users a certificate when they 'complete' a signup.
+dependencies[] = signup_status 
+dependencies[] = token
+; Information added by drupal.org packaging script on 2009-05-12
+version = "6.x-1.x-dev"
+core = "6.x"
+project = "signup_status"
+datestamp = "1242087451"
+
Index: signup_status_cert.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/signup_status/modules/signup_status_cert/signup_status_cert.install,v
retrieving revision 1.2
diff -u -r1.2 signup_status_cert.install
--- signup_status_cert.install	12 Jan 2009 18:10:26 -0000	1.2
+++ signup_status_cert.install	31 Aug 2009 14:38:29 -0000
@@ -2,21 +2,22 @@
 // $Id: signup_status_cert.install,v 1.2 2009/01/12 18:10:26 jrbeeman Exp $
 
 /**
+ * @file
+ * Print certification for completed events.
+ */
+ 
+/**
  * Implementation of hook_install
  */
 function signup_status_cert_install() {
-  switch ($GLOBALS['db_type']) {
-    case 'mysqli':
-    case 'mysql':
+       $ret = array(); 
       // Add the certificate and completion tracking info to the signup log
-      db_query("ALTER TABLE {signup_log}
-        ADD completion_time int unsigned NOT NULL default '0',
-        ADD cert_id int unsigned NOT NULL default '0',
-        ADD KEY cert_id (cert_id)");
-      // Add the node certificate template info to the signup table
-      db_query("ALTER TABLE {signup} ADD signup_status_cert_nid int unsigned NOT NULL default '0'");
-    break;
-  }
+     $spec = array('type' => 'int', 'default' => 0, 'unsigned' =>  TRUE, 'not null' => TRUE); 
+     $ret = db_add_field($ret, 'signup_log', 'completion_time', $spec); 
+     $ret = db_add_field($ret, 'signup_log', 'cert_id', $spec); 
+     $ret = db_add_field($ret, 'signup', 'signup_status_cert_nid', $spec); 
+
+  return $ret;      
 }
 
 
@@ -24,15 +25,16 @@
  * Implementation of hook_uninstall
  */
 function signup_status_cert_uninstall() {
-  switch ($GLOBALS['db_type']) {
-    case 'mysqli':
-    case 'mysql':
+
+    $ret = array();
       // Remove the certificate and completion tracking info from the signup log
-      db_query("ALTER TABLE {signup_log} DROP completion_time, DROP cert_id");
+    $ret =  db_drop_field($ret, 'signup_log', 'completion_time'); 
+    $ret =   db_drop_field($ret, 'signup_log', 'cert_id');
+    $ret =   db_drop_field($ret, 'signup', 'signup_status_cert_nid'); 
       $variables = db_query("SELECT name FROM {variable} WHERE name LIKE 'signup_status_cert%%'");
       while ($variable = db_fetch_object($variables)) {
         variable_del($variable->name);
       }
-    break;
+
+  return $ret;
   }
-}
\ No newline at end of file
Index: signup_status_cert.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/signup_status/modules/signup_status_cert/signup_status_cert.module,v
retrieving revision 1.2
diff -u -r1.2 signup_status_cert.module
--- signup_status_cert.module	12 Jan 2009 18:10:26 -0000	1.2
+++ signup_status_cert.module	8 Sep 2009 22:13:38 -0000
@@ -1,7 +1,11 @@
 <?php
 // $Id: signup_status_cert.module,v 1.2 2009/01/12 18:10:26 jrbeeman Exp $
 
-
+/**
+ * @file
+ * Print certification for completed events.
+ */
+ 
 /**
  * Implementation of hook_perm()
  */
@@ -11,60 +15,72 @@
   );
 }
 
-
 /**
  * Implementation of hook_menu()
  */
-function signup_status_cert_menu($may_cache) {
-  global $_signup_status_cert_pdf_size, $_signup_status_cert_pdf_orientation;
+function signup_status_cert_menu() {
+  global $_signup_status_cert_pdf_size, $_signup_status_cert_pdf_orientation, $user;
   $_signup_status_cert_pdf_size = variable_get('signup_status_cert_pdf_size', 'letter');
   $_signup_status_cert_pdf_orientation = variable_get('signup_status_cert_pdf_orientation', 'landscape');
- 
+  
   $items = array();
- 
-  if ($may_cache) {
-    $items[] = array(
-      'path' => 'admin/settings/signup_status/cert',
-      'title' => t('Certificates'),
-      'callback' => 'drupal_get_form',
-      'callback arguments' => array('signup_status_cert_admin_form'),
+     
+    $items['admin/settings/signup_status/cert'] = array(
+      'title' => 'Certificates',
+      'page callback' => 'drupal_get_form',
+      'page arguments' => array('signup_status_cert_admin_form'),
+       'access callback' => 'user_access',
+       'access arguments' => array(1),
       'type' => MENU_LOCAL_TASK,
     );
-    $items[] = array(
-      'path' => 'signup_status_cert',
-      'title' => t('Print certificate'),
-      'callback' => 'drupal_get_form',
-      'callback arguments' => array('signup_status_cert_search_form'),
+    $items['signup_status_cert'] = array(
+      'title' => 'Print certificate',
+      'page callback' => 'drupal_get_form',
+      'page arguments' => array('signup_status_cert_search_form'),
+      'access callback' => TRUE,
       'type' => MENU_CALLBACK,
-      'access' => TRUE,
     );
-  }
-  else {
-    if (arg(0) == 'node' && is_numeric(arg(1)) && db_num_rows(db_query("SELECT nid FROM {signup} WHERE nid = %d", arg(1)))) {
-      global $user;
-      $nid = arg(1);
-      $cid = variable_get('signup_status_cert_cid', 1);
-      $status = signup_status_user_signup_status($user->uid, $nid);
-      $access = $status == $cid ? TRUE : FALSE;
-      $items[] = array(
-        'path' => 'node/'. arg(1) .'/signups/mycert',
-        'title' => t('My certificate'),
-        'callback' => 'signup_status_cert_print',
-        'callback arguments' => array($user->uid, $nid, NULL),
-        'access' => $access,
+
+ 
+ // not $may-cache
+     
+      $items['node/%/signups/mycert'] = array(
+        'title' => 'My certificate',
+        'page callback' => 'signup_status_cert_print',
+        'page arguments' => array($user->uid, 1, NULL),
+        'access callback' => 'signup_status_cert_check',
+        'access arguments' => array($user->uid, 1),
         'type' => MENU_CALLBACK,
       );
-    }
-  }
+
  
   return $items;
 }
 
+/**
+ * check if valid user certificatio number
+ */
+function signup_status_cert_check($uid, $nid) {
+    global $user;
+
+    $cid = variable_get('signup_status_cert_cid', 1);
+    $status = signup_status_user_signup_status($user->uid, $nid);
+    $access = $status == $cid ? TRUE : FALSE;
+    $valid_cert = db_result(db_query("SELECT COUNT(*) FROM {signup} WHERE nid = %d", arg(1)));
+    if (($valid_cert > 0) && ($access == TRUE)) {
+        return TRUE;
+    } 
+    else{
+        return FALSE;
+    }
+    
+}
 
 /**
  * Menu callback: provides module administration form.
  */
 function signup_status_cert_admin_form() {
+ 
   $form = array();
   $options = array();
   $codes = signup_status_codes();
@@ -113,16 +129,15 @@
 /**
  * Implementation of hook_form_alter
  */
-function signup_status_cert_form_alter($form_id, &$form) {
-  switch ($form_id) {
-    case $form['type']['#value'] .'_node_form' && isset($form['signup']):
-      signup_status_cert_alter_node_form($form_id, $form);
-      break;
-   
-    case variable_get('signup_status_cert_template_type', NULL) .'_node_form':
-      signup_status_cert_alter_template_form($form_id, $form);
-      break;
-  }
+function signup_status_cert_form_alter(&$form, $form_state, $form_id) {
+    return;
+    if((array_key_exists('type',$form)) AND (array_key_exists('#value',$form['type'])) 
+        AND ($form['type']['#value'] .'_node_form' == $form_id) AND (isset($form['signup']))) {
+       signup_status_cert_alter_node_form($form_id, $form);
+        }
+          elseif ((variable_get('signup_status_cert_template_type', NULL) .'_node_form') == $form_id){
+           signup_status_cert_alter_template_form($form_id, $form);
+          }
 }
 
 
@@ -130,6 +145,7 @@
  * Alter the node edit form
  */
 function signup_status_cert_alter_node_form($form_id, &$form) {
+    
   $options = signup_status_cert_template_options();
   $node = $form['#node'];
   $form['signup_status_cert_nid'] = array(
@@ -146,16 +162,22 @@
  * Implementation of hook_nodeapi()
  */
 function signup_status_cert_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
+          
   // load
   if ($op == 'load' && $node->signup) {
     $node->signup_status_cert_nid = signup_status_cert_get_cert_nid($node);
   }
  
   // submit
-  if ($op == 'submit' && $node->signup_status_cert_nid) {
+  if ($op == 'insert' && $node->signup_status_cert_nid) {
     signup_status_cert_set_cert_nid($node);
   }
- 
+
+  // submit
+  if ($op == 'update' && $node->signup_status_cert_nid) {
+    signup_status_cert_set_cert_nid($node);
+  }
+   
   // view
   if ($op == 'view' && $node->signup) {
     signup_status_cert_nodeapi_view($node);
@@ -180,6 +202,25 @@
 
 
 /**
+* Implementation of hook_theme().
+*/
+function signup_status_cert_theme() {
+
+       $path = drupal_get_path('module', 'signup_status_cert') .'/theme'; 
+    return array(
+        'signup_status_cert_user_node_view' => array(
+        'arguments' => array('node')
+        ),
+        'signup_status_cert_page' => array(
+        'arguments' => array('node'),
+        ),
+        'signup_status_cert' => array(
+        'arguments' => array('node'),
+        ),
+    );
+}
+
+/**
  * Used to add a link to print the user's certificate to the given node.
  *
  * @param $node
@@ -356,18 +397,24 @@
 
 
 /**
- * Implementation of hook_update_signup_status.
+ * Implementation of hook_signup_status.
  *
  * Grants the user a certificate, if they have been transferred to the state
  * that grants it.
  */
-function signup_status_cert_update_signup_status($uid, $nid, $curr_cid, $new_cid, $anon_mail = NULL) {
-  if ($new_cid == variable_get('signup_status_cert_cid', 1)) {
-    $curr_cert_id = signup_status_cert_user_cert_id($uid, $nid, $anon_mail);
-    if (!$curr_cert_id) {
-      signup_status_cert_grant_cert($uid, $nid, $anon_mail);
-    }
-  }
+   function signup_status_cert_signup_status($action, $signup ) {
+       switch ($action) {
+           case 'update':
+            if ($signup->status == variable_get('signup_status_cert_cid', 1)) {
+                $curr_cert_id = signup_status_cert_user_cert_id($signup->uid, $signup->nid, $signup->anon_mail);
+                if (!$curr_cert_id) {
+                  signup_status_cert_grant_cert($signup->uid, $signup->nid, $signup->anon_mail);
+                }
+            }
+            break;
+            case 'delete':
+            default:
+       }
 }
 
 
@@ -385,10 +432,12 @@
  *   and locating a certificate.
  */
 function signup_status_cert_search_form($cert_id = NULL, $format = 'html') {
+          
   if (user_access('print any signup certificate')) {
-    if ($cert_id) {
-      $result = db_query("SELECT * FROM {signup_log} WHERE cert_id = %d", $cert_id);
-      if (db_num_rows($result)) {
+    if (($cert_id) && ((is_int($cert_id)) || array_key_exists('cert_id', $cert_id['post']))) {
+        $cert_id_value = $cert_id['post']['cert_id'];
+      if (db_result(db_query("SELECT COUNT(*) FROM {signup_log} WHERE cert_id = %d", $cert_id_value))) {
+        $result = db_query("SELECT * FROM {signup_log} WHERE cert_id = %d", $cert_id_value); 
         $signup = db_fetch_object($result);
         signup_status_cert_print($signup->uid, $signup->nid, $signup->anon_mail, $format);
         exit();
@@ -429,8 +478,8 @@
 /**
  * Submit handler for signup_status_cert_search_form
  */
-function signup_status_cert_search_form_submit($form_id, $form_values) {
-  drupal_goto('signup_status_cert/'. $form_values['cert_id'] .'/'. $form_values['output']);
+function signup_status_cert_search_form_submit($form, &$form_state) {
+  drupal_goto('signup_status_cert/'. $form_state['values']['cert_id'] .'/'. $form_state['values']['output']);
 }
 
 
@@ -447,7 +496,9 @@
 function signup_status_cert_grant_cert($uid, $nid, $anon_mail = NULL) {
   // We fudge the use of db_next_id, which should refer to an actual table,
   // but here we use it to handle tracking the certificate IDs.
-  $cert_id = db_next_id('{signup_status}_cert_id');
+ 
+  $cert_id = db_last_insert_id('signup_log', 'cert_id');
+  $cert_id++;
   $sql = "UPDATE {signup_log}
           SET completion_time = %d, cert_id = %d
           WHERE uid = %d AND nid = %d AND anon_mail = '%s'";
@@ -469,7 +520,50 @@
   return db_result(db_query("SELECT cert_id FROM {signup_log} WHERE uid = %d AND nid = %d AND anon_mail = '%s'", $uid, $nid, $anon_mail));
 }
 
+/**
+ * Implementation of hook_action_info().
+ */
+function signup_status_cert_action_info() {
+    $info['signup_status_cert_alter_action'] = array(
+        'type' => 'signup', 
+        'description' => t('Print Certificate(s)'),
+        'configurable' => TRUE,
+        'hooks' => array(
+                'any' => TRUE,
+            ),
+        );
+    return $info;
+}
+/**
+ * Perform the action to alter the signup status of a given signup.
+ */
+function signup_status_cert_alter_action(&$signup, $context) {
+ 
+  
+   signup_status_cert_print($signup->uid, $signup->nid, $signup->anon_mail,$context['signup_status_cert_print']);
+   
+  }
+
+
+function signup_status_cert_alter_action_form($context) {
 
+     $options = array('html' => 'HTML','pdf'=> 'PDF');
+
+  $form['signup_status_cert_print'] = array(
+    '#type' => 'select',
+    '#title' => t('Format'),
+    '#options' => $options,
+    '#default_value' => isset($context['out_style']) ? $context['out_style'] : 'html',
+    '#required' => TRUE,
+  );
+  return $form;
+}
+ function signup_status_cert_alter_action_submit($form, $form_state) {
+
+ return array(
+    'signup_status_cert_print' => $form_state['values']['signup_status_cert_print']);
+ }
+ 
 /**
  * Implementation of hook_signup_status_operations
  *
@@ -492,6 +586,24 @@
 
 
 /**
+ * Get a user's current signup status to a node
+ *
+ * @param $uid
+ *   The uid for the user.
+ * @param $nid
+ *   The nid for the node.
+ * @param $anon_mail
+ *   The email address provided by the user when she registered, if
+ *   applicable.
+ * @return
+ *   The status code or NULL, if the user is not signed up.
+ */
+function signup_status_user_signup_status($uid, $nid, $anon_mail = NULL) {
+
+  return db_result(db_query("SELECT status FROM {signup_log} WHERE uid = %d AND nid = %d AND anon_mail = '%s'", $uid, $nid, $anon_mail));
+}
+
+/**
  * Print certificates for a bulk set of users for a node
  *
  * @param $users
@@ -504,6 +616,7 @@
  *   default) or 'pdf', if the dompdf module is installed.
  */
 function signup_status_cert_bulk_print($users, $nid, $format = 'html') {
+
   global $_signup_status_cert_pdf_size, $_signup_status_cert_pdf_orientation;
   $node = node_load($nid);
   $cid = variable_get('signup_status_cert_cid', 1);
@@ -528,7 +641,7 @@
       'set_paper' => array($_signup_status_cert_pdf_size, $_signup_status_cert_pdf_orientation),
     );
     dompdf_stream_pdf($output, $filename, $directives);
-    exit();
+    //exit();
   }
 }
 
@@ -545,9 +658,10 @@
  *   default) or 'pdf', if the dompdf module is installed.
  */
 function signup_status_cert_print($uid, $nid, $anon_mail = NULL, $format = 'html') {
-  global $_signup_status_cert_pdf_size, $_signup_status_cert_pdf_orientation;
+  $_signup_status_cert_pdf_size = variable_get('signup_status_cert_pdf_size', 'letter');
+  $_signup_status_cert_pdf_orientation = variable_get('signup_status_cert_pdf_orientation', 'landscape');
+
   $node = node_load($nid);
- 
   $tag_results_before = signup_status_process_tags($original, 'before generate');
   $output = signup_status_cert_generate_cert($nid, $uid, $anon_mail);
   $tag_results_after = signup_status_process_tags($original, 'after generate');
@@ -557,18 +671,19 @@
     print $output;
     exit();
   }
- 
+      
   if ($format == 'pdf' && module_exists('dompdf')) {
     $filename = substr(check_url($node->title), 0, 16) .'.'. t('certificate') .'.'. format_date(time(), 'custom', "Ymd") .'.pdf';
     $directives = array(
       'set_paper' => array($_signup_status_cert_pdf_size, $_signup_status_cert_pdf_orientation),
     );
     dompdf_stream_pdf($output, $filename, $directives);
-    exit();
+    //exit();
   }
 }
 
 
+
 /**
  * Render a page of HTML containing the certificate.
  *
@@ -804,7 +919,7 @@
 function signup_status_cert_views_tables_alter(&$tables) {
   $tables['signup_log']['fields']['completion_time'] = array(
     'name' => t('Signup: User: Completion time'),
-    'sortable' => true,
+    'sortable' => TRUE,
     'handler' => views_handler_field_dates(),
     'option' => 'string',
   );

