=== modified file 'payment/uc_credit/uc_credit.module'
--- payment/uc_credit/uc_credit.module 2008-05-23 20:53:38 +0000
+++ payment/uc_credit/uc_credit.module 2008-05-25 14:26:51 +0000
@@ -329,8 +329,11 @@
'cc_type' => check_plain($_POST['cc_type']),
'cc_owner' => check_plain($_POST['cc_owner']),
'cc_number' => check_plain($_POST['cc_number']),
+ 'cc_start_month' => check_plain($_POST['cc_start_month']),
+ 'cc_start_year' => check_plain($_POST['cc_start_year']),
'cc_exp_month' => check_plain($_POST['cc_exp_month']),
'cc_exp_year' => check_plain($_POST['cc_exp_year']),
+ 'cc_issue' => check_plain($_POST['cc_issue']),
'cc_cvv' => check_plain($_POST['cc_cvv']),
'cc_bank' => check_plain($_POST['cc_bank']),
);
@@ -382,11 +385,26 @@
}
}
+ // Validate the start date (if entered).
+ if (variable_get('uc_credit_start_enabled', FALSE) &&
+ (!empty($cc_data['cc_start_month']) || !empty($cc_data['cc_start_year']))
+ && !_valid_card_start($cc_data['cc_start_month'], $cc_data['cc_start_year'])) {
+ drupal_set_message(t('The start date you entered is invalid.'), 'error');
+ $return = FALSE;
+ }
+
// Validate the card expiration date.
if (!_valid_card_expiration($cc_data['cc_exp_month'], $cc_data['cc_exp_year'])) {
drupal_set_message(t('The credit card you entered has expired.'), 'error');
$return = FALSE;
}
+
+ // Validate the issue number (if entered).
+ // N.B. With issue numbers, '01' is different to '1', but is_numeric() is still appropriate.
+ if (variable_get('uc_credit_issue_enabled', FALSE) && !_valid_card_issue($cc_data['cc_issue'])) {
+ drupal_set_message(t('The issue number you entered is invalid.'), 'error');
+ $return = FALSE;
+ }
// Validate the CVV number if enabled.
if (variable_get('uc_credit_cvv_enabled', TRUE) && !_valid_cvv($cc_data['cc_cvv'])) {
@@ -420,7 +438,13 @@
$review[] = array('title' => t('Card Owner'), 'data' => check_plain($arg1->payment_details['cc_owner']));
}
$review[] = array('title' => t('Card Number'), 'data' => uc_credit_display_number($arg1->payment_details['cc_number']));
+ if (variable_get('uc_credit_start_enabled', TRUE)) {
+ $review[] = array('title' => t('Start Date'), 'data' => $arg1->payment_details['cc_start_month'] .'/'. $arg1->payment_details['cc_start_year']);
+ }
$review[] = array('title' => t('Expiration'), 'data' => $arg1->payment_details['cc_exp_month'] .'/'. $arg1->payment_details['cc_exp_year']);
+ if (variable_get('uc_credit_issue_enabled', TRUE)) {
+ $review[] = array('title' => t('Issue Number'), 'data' => user_access('view cc numbers') ? $arg1->payment_details['cc_issue'] : str_repeat('-', strlen($arg1->payment_details['cc_issue'])));
+ }
if (variable_get('uc_credit_cvv_enabled', TRUE)) {
$review[] = array('title' => t('CVV'), 'data' => user_access('view cc numbers') ? $arg1->payment_details['cc_cvv'] : str_repeat('-', strlen($arg1->payment_details['cc_cvv'])));
}
@@ -456,11 +480,24 @@
$output .= '
| '. t('Card Number:') .' | '. uc_credit_display_number($arg1->payment_details['cc_number']) .' |
';
if (variable_get('uc_credit_debug', FALSE)) {
+ if (variable_get('uc_credit_start_enabled', FALSE)) {
+ $start = $arg1->payment_details['cc_start_month'] .'/'. $arg1->payment_details['cc_start_year'];
+ if (strlen($start) > 1) {
+ $output .= '| '. t('Start Date:') .' | '. $start .' |
';
+ }
+ }
$exp = $arg1->payment_details['cc_exp_month'] .'/'. $arg1->payment_details['cc_exp_year'];
if (strlen($exp) > 1) {
$output .= '| '. t('Expiration:') .' | '. $exp .' |
';
}
-
+
+ if (variable_get('uc_credit_issue_enabled', FALSE)) {
+ $issue = $arg1->payment_details['cc_issue'];
+ if (strlen($issue) > 0) {
+ $output .= '| '. t('Issue Number:') .' | '. $issue .' |
';
+ }
+ }
+
if (variable_get('uc_credit_cvv_enabled', TRUE)) {
$cvv = user_access('view cc numbers') ? $arg1->payment_details['cc_cvv'] : str_repeat('-', strlen($arg1->payment_details['cc_cvv']));
if (strlen($cvv) > 0) {
@@ -623,6 +660,16 @@
'#title' => t('Enable card owner text field on checkout form.'),
'#default_value' => variable_get('uc_credit_owner_enabled', FALSE),
);
+ $form['cc_fields']['uc_credit_start_enabled'] = array(
+ '#type' => 'checkbox',
+ '#title' => t('Enable card start date text field on checkout form.'),
+ '#default_value' => variable_get('uc_credit_start_enabled', FALSE),
+ );
+ $form['cc_fields']['uc_credit_issue_enabled'] = array(
+ '#type' => 'checkbox',
+ '#title' => t('Enable card issue number text field on checkout form.'),
+ '#default_value' => variable_get('uc_credit_issue_enabled', FALSE),
+ );
$form['cc_fields']['uc_credit_bank_enabled'] = array(
'#type' => 'checkbox',
'#title' => t('Enable issuing bank text field on checkout form.'),
@@ -824,9 +871,40 @@
'#maxlength' => 18,
);
+ if (variable_get('uc_credit_start_enabled', FALSE)) {
+ $form['cc_start_month'] = uc_select_month(t('Start Month'), $order->payment_details['cc_start_month']);
+ $form['cc_start_year'] = uc_select_year(t('Start Year'), $order->payment_details['cc_start_year'], date('Y')-10, date('Y'));
+ }
+
$form['cc_exp_month'] = uc_select_month(t('Expiration Month'), $order->payment_details['cc_exp_month']);
$form['cc_exp_year'] = uc_select_year(t('Expiration Year'), $order->payment_details['cc_exp_year']);
+ if (variable_get('uc_credit_issue_enabled', FALSE)) {
+ // Setup the default Issue Number on the credit card form.
+ if (!_valid_card_issue($order->payment_details['cc_issue'])) {
+ // Display the Issue Number as is if it does not validate so it can be corrected.
+ $default_card_issue = $order->payment_details['cc_issue'];
+ }
+ elseif (!empty($order->payment_details['cc_issue'])) {
+ if (user_access('view cc numbers')) {
+ // Display the full number to those with access.
+ $default_card_issue = $order->payment_details['cc_issue'];
+ }
+ else {
+ // Otherwise mask it with dashes.
+ $default_card_issue = str_repeat('-', strlen($order->payment_details['cc_issue']));
+ }
+ }
+ $form['cc_issue'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Issue Number'),
+ '#default_value' => $default_card_issue,
+ '#attributes' => array('autocomplete' => 'off'),
+ '#size' => 2,
+ '#maxlength' => 2,
+ );
+ }
+
if (variable_get('uc_credit_cvv_enabled', TRUE)) {
// Setup the default CVV on the credit card form.
if (!_valid_cvv($order->payment_details['cc_cvv'])) {
@@ -871,8 +949,11 @@
function theme_uc_payment_method_credit_form($form) {
// Comment out this function to just straight display the form.
$form['cc_number']['#title'] = '';
+ $form['cc_start_month']['#title'] = '';
+ $form['cc_start_year']['#title'] = '';
$form['cc_exp_month']['#title'] = '';
$form['cc_exp_year']['#title'] = '';
+ $form['cc_issue']['#title'] = '';
if (arg(1) == 'checkout') {
$path = base_path() . drupal_get_path('module', 'uc_credit');
@@ -893,9 +974,18 @@
}
$output .= '| '. t('Card Number:') .' | '
. drupal_render($form['cc_number']) .' |
';
+ if (variable_get('uc_credit_start_enabled', FALSE)) {
+ $output .= '| '. t('Start Date:') .' | '
+ . drupal_render($form['cc_start_month']) .' '
+ . drupal_render($form['cc_start_year']) .t(' (if present)').' |
';
+ }
$output .= '| '. t('Expiration Date:') .' | '
. drupal_render($form['cc_exp_month']) .' '
. drupal_render($form['cc_exp_year']) .' |
';
+ if (variable_get('uc_credit_issue_enabled', FALSE)) {
+ $output .= '| '. t('Issue Number:') .' | '
+ . drupal_render($form['cc_issue']) .t(' (if present)').' |
';
+ }
if (variable_get('uc_credit_cvv_enabled', TRUE)) {
$form['cc_cvv']['#title'] = '';
$output .= '| '. t('CVV:') .' | '. drupal_render($form['cc_cvv'])
@@ -1302,6 +1392,38 @@
}
/**
+ * Validates a start date on a card.
+ *
+ * @param $month
+ * The 1 or 2-digit numeric representation of the month, i.e. 1, 6, 12.
+ * @param $year
+ * The 4-digit numeric representation of the year, i.e. 2008.
+ * @return
+ * TRUE for cards whose start date is in the past, FALSE otherwise.
+ */
+function _valid_card_start($month, $year) {
+ if ($year > date('Y')) {
+ return FALSE;
+ }
+ else if ($year == date('Y')) {
+ if ($month > date('n')) {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+// Validates an issue number on a card.
+// Returns true or false.
+function _valid_card_issue($issue) {
+ if (empty($issue) || (is_numeric($issue) && $issue>0)) {
+ return true;
+ }
+ return false;
+}
+
+/**
* Returns either an array of options from a multi-line textarea or an array
* condensed into a multi-line string depending on the type of $data.
*/
|