diff --git a/booking.admin.inc b/booking.admin.inc index db5973e..d6860bf 100644 --- a/booking.admin.inc +++ b/booking.admin.inc @@ -627,6 +627,14 @@ function booking_admin() { t('Yes') ), '#default_value' => variable_get('booking_enable_earlyaccess_codes', 0) + ); + $form['regn_options']['booking_earlyaccess_codes_count'] = array( + '#type' => 'textfield', + '#title' => t('Number of early access codes'), + '#description' => t("Set to the number of early access codes to generate. You will need to visit the configuration page to actually generate these codes."), + '#size' => 3, + '#maxlength' => 3, + '#default_value' => variable_get('booking_earlyaccess_codes_count', '0'), ); $form['management'] = array( diff --git a/booking.earlyaccess_admin.inc b/booking.earlyaccess_admin.inc index 5a9edc3..9115cca 100644 --- a/booking.earlyaccess_admin.inc +++ b/booking.earlyaccess_admin.inc @@ -38,4 +38,59 @@ function booking_earlyaccess_admin() { $output .= theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => $attributes)); 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 + + //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(); +} + +/** + * 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; } \ No newline at end of file diff --git a/booking.misc.inc b/booking.misc.inc index 527935c..5b3b287 100644 --- a/booking.misc.inc +++ b/booking.misc.inc @@ -40,11 +40,4 @@ function booking_generate_luckynumbers() { drupal_set_message(t('Finished.')); return t("