'max-width:60%', 'id' => 'sort-table'); $prefix = t("

Early Access Codes

"); $header = array( 'booking_regn_earlyaccess_code' => array('data' => t('Code'), 'field' => 'c.booking_regn_earlyaccess_code', 'sort' => 'asc'), 'booking_regn_earlyaccess_code_avail' => array('data' => t('Available?'), 'field' => 'c.booking_regn_earlyaccess_code_avail'), 'booking_firstname' => array('data' => t('First Name'), 'field' => 'p.booking_firstname'), 'booking_lastname' => array('data' => t('Last Name'), 'field' => 'p.booking_lastname'), ); //get a list of all the early access codes for this event $codelist_query = db_select('booking_regn_earlyaccess_codes', 'c'); $codelist_query->leftJoin('booking_person', 'p', 'c.cid = p.booking_earlyaccess_code_id'); $codelist_query->condition('c.booking_eventid', $event->eid, '=') ->fields('c') ->fields('p') ->orderBy('cid'); $result = $codelist_query->execute(); //add results to array foreach($result as $data) { $rows[] = array( 'data' => array( $data->booking_regn_earlyaccess_code, $data->booking_regn_earlyaccess_code_avail == 'Y' ? 'Yes' : 'No', $data->booking_firstname, $data->booking_lastname, ), ); } //theme output $output = array ( 'first_para' => array ( '#type' => 'markup', '#markup' => $prefix, ), 'table' => array ( '#theme' => 'table', '#header' => $header, '#rows' => $rows, '#attributes' => $attributes, //'#sticky' => FALSE, ) ); //return markup array return $output; } /** * Function to generate early access codes for the current event */ function booking_earlyaccess_generate_codes() { global $event; $num_codes_to_add = 0; $num_codes_available = 0; $code_length = 6; //determine number of currently available access codes for this event $codecount_query = db_query("SELECT count(*) as num_codes FROM {booking_regn_earlyaccess_codes} where booking_eventid = :eventid and booking_regn_earlyaccess_code_avail = 'Y'", array(':eventid' => $event->eid)) ->fetchObject(); $num_codes_available = $codecount_query->num_codes; //get the number of codes we need to have available from variable_get('booking_earlyaccess_codes_count') $num_codes_to_add = variable_get('booking_earlyaccess_codes_count', 0) - $num_codes_available; //add required number of codes to database table watchdog('booking_debug', "Creating $num_codes_to_add early access codes."); //use the multi-insert query type at https://drupal.org/node/310079 $insert_query = db_insert('booking_regn_earlyaccess_codes') ->fields(array( 'booking_eventid', 'booking_regn_earlyaccess_code', 'booking_regn_earlyaccess_code_avail', )); for ($i = 0; $i < $num_codes_to_add; $i++) { $insert_query->values(array( 'booking_eventid' => $event->eid, 'booking_regn_earlyaccess_code' => booking_getToken($code_length), 'booking_regn_earlyaccess_code_avail' => 'Y', )); } $insert_query->execute(); return t("Created $num_codes_to_add early access codes."); } /** * Function to calculate unique code * @see https://stackoverflow.com/questions/1846202/php-how-to-generate-a-random-unique-alphanumeric-string * Requires PHP7 */ function booking_getToken($length) { $token = ""; $codeAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //$codeAlphabet.= "abcdefghijklmnopqrstuvwxyz"; $codeAlphabet.= "0123456789"; $max = strlen($codeAlphabet); // edited for ($i=0; $i < $length; $i++) { $token .= $codeAlphabet[random_int(0, $max-1)]; } return $token; } /** * Function to generate csv of early access codes for the current event */ function booking_earlyaccess_csv_report() { global $event; $data = array(); //set options for the CSV file $name = 'bookings-earlyaccesscodes-' . format_date(time(), 'custom', 'Y-m-d-His'); $filename = file_directory_temp() . '/' . $name; $csv = ''; $delimiter = ','; $enclosure = '"'; $encloseAll = true; $nullToMysqlNull = true; $delimiter_esc = preg_quote($delimiter, '/'); $enclosure_esc = preg_quote($enclosure, '/'); //get a list of all the early access codes for this event $codelist_query = db_select('booking_regn_earlyaccess_codes', 'c'); $codelist_query->condition('c.booking_eventid', $event->eid, '=') ->fields('c') ->orderBy('cid'); $result = $codelist_query->execute(); //calculate the header row for CSV $header = implode( $delimiter, array_keys($data)); $csv .= $header . "\n"; //add the records foreach ($result as $record) { $output = array(); //each keypair in the record foreach ($record as $key => $value) { // Enclose fields containing $delimiter, $enclosure or whitespace if ($encloseAll || preg_match( "/(?:${delimiter_esc}|${enclosure_esc}|\s)/", $value ) ) { $output[] = $enclosure . str_replace($enclosure, $enclosure . $enclosure, $value) . $enclosure; } else { $output[] = $field; } $row = implode($delimiter, $output) . "\n"; $csv .= $row; } } //output the CSV to the browser drupal_add_http_header("Content-type", "application/octet-stream; charset=utf-8"); drupal_add_http_header("Content-Disposition", "attachment; filename=" . $name . ".csv"); print $csv; exit(0); }