Index: modules/signup_status_cert/signup_status_cert.install =================================================================== --- modules/signup_status_cert/signup_status_cert.install (revision 5383) +++ modules/signup_status_cert/signup_status_cert.install (working copy) @@ -1,21 +1,22 @@ '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; } @@ -23,15 +24,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; - } -} \ No newline at end of file + + return $ret; +} Index: modules/signup_status_cert/signup_status_cert.module =================================================================== --- modules/signup_status_cert/signup_status_cert.module (revision 5383) +++ modules/signup_status_cert/signup_status_cert.module (working copy) @@ -1,7 +1,11 @@ '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(); @@ -112,16 +128,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); + } } @@ -129,6 +144,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( @@ -145,16 +161,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); @@ -179,6 +201,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 @@ -355,18 +396,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: + } } @@ -384,10 +431,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(); @@ -428,8 +477,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']); } @@ -446,7 +495,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'"; @@ -468,7 +519,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 * @@ -491,6 +585,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 @@ -503,6 +615,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); @@ -527,7 +640,7 @@ 'set_paper' => array($_signup_status_cert_pdf_size, $_signup_status_cert_pdf_orientation), ); dompdf_stream_pdf($output, $filename, $directives); - exit(); + //exit(); } } @@ -544,9 +657,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'); @@ -556,18 +670,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. * @@ -803,7 +918,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', );