123 lines
3.9 KiB
PHP
123 lines
3.9 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @file
|
|
* Admin pages for managing early access codes
|
|
*/
|
|
|
|
// @todo - list all early access codes for the current event, whether they're available, and who used them if not
|
|
|
|
|
|
/**
|
|
* Function to summarise information about early access codes
|
|
*/
|
|
function booking_earlyaccess_admin() {
|
|
global $event;
|
|
$output = "";
|
|
$rows = array();
|
|
$attributes = array('style' => 'max-width:60%', 'id' => 'sort-table');
|
|
$prefix = t("<h2>Early Access Codes</h2>");
|
|
|
|
$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;
|
|
} |