function commerce_payment_pane_checkout_form_validate in Commerce Core 7
Payment pane: validation callback.
File
- modules/
payment/ includes/ commerce_payment.checkout_pane.inc, line 169 - Callback functions for the Payment module's checkout panes.
Code
function commerce_payment_pane_checkout_form_validate($form, &$form_state, $checkout_pane, $order) {
$pane_id = $checkout_pane['pane_id'];
// Only attempt validation if we actually had payment methods on the form.
if (!empty($form[$pane_id]) && !empty($form_state['values'][$pane_id])) {
$pane_form = $form[$pane_id];
$pane_values = $form_state['values'][$pane_id];
// Only attempt validation if there were payment methods available.
if (!empty($pane_values['payment_methods'])) {
// If the selected payment method was changed...
if ($pane_values['payment_method'] != $pane_form['payment_method']['#default_value']) {
// And the newly selected method has a valid form callback...
if ($payment_method = commerce_payment_method_instance_load($pane_values['payment_method'])) {
if (commerce_payment_method_callback($payment_method, 'submit_form')) {
// Fail validation so the form is rebuilt to include the payment method
// specific form elements.
return FALSE;
}
}
}
// Delegate validation to the payment method callback.
$payment_method = commerce_payment_method_instance_load($pane_values['payment_method']);
if ($callback = commerce_payment_method_callback($payment_method, 'submit_form_validate')) {
// Initialize the payment details array to accommodate payment methods
// that don't add any additional details to the checkout pane form.
if (!isset($pane_values['payment_details'])) {
$pane_values['payment_details'] = array();
}
$result = $callback($payment_method, $pane_form['payment_details'], $pane_values['payment_details'], $order, array(
$checkout_pane['pane_id'],
'payment_details',
));
// To prevent payment method validation routines from having to return TRUE
// explicitly, only return FALSE if it was specifically returned. Otherwise
// default to TRUE.
return $result === FALSE ? FALSE : TRUE;
}
}
elseif (variable_get('commerce_payment_pane_require_method', FALSE)) {
drupal_set_message(t('You cannot complete checkout without submitting payment. Please contact us if an error continues to prevent you from seeing valid payment methods for your order.'), 'error');
return FALSE;
}
}
else {
// Otherwise ensure we don't have any leftover payment method data in the
// order's data array.
unset($order->data['payment_method'], $order->data['payment_redirect_key']);
}
// Nothing to validate.
return TRUE;
}