function commerce_shipping_pane_checkout_form_validate in Commerce Shipping 7.2
Same name and namespace in other branches
- 7 includes/commerce_shipping.checkout_pane.inc \commerce_shipping_pane_checkout_form_validate()
Checkout pane callback: validate the shipping service selection and details.
File
- includes/
commerce_shipping.checkout_pane.inc, line 308 - Callback functions for the shipping module's checkout panes.
Code
function commerce_shipping_pane_checkout_form_validate($form, &$form_state, $checkout_pane, $order) {
$pane_id = $checkout_pane['pane_id'];
// Only attempt validation if we actually had shipping services 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];
// Initialize the extra details if necessary.
if (empty($pane_values['service_details'])) {
$pane_values['service_details'] = array();
}
// Only attempt validation if there were shipping services available.
if (!empty($pane_values['shipping_rates'])) {
// If the selected shipping service was changed...
if ($pane_values['shipping_service'] != $pane_form['shipping_service']['#default_value']) {
// And the newly selected service has a valid details form callback...
if ($shipping_service = commerce_shipping_service_load($pane_values['shipping_service'])) {
if (commerce_shipping_service_callback($shipping_service, 'details_form')) {
// Fail validation so the form is rebuilt to include the shipping
// service specific form elements.
return FALSE;
}
}
}
// Allow the shipping service to validate the service details.
$shipping_service = commerce_shipping_service_load($pane_values['shipping_service']);
if ($callback = commerce_shipping_service_callback($shipping_service, 'details_form_validate')) {
$result = $callback($pane_form['service_details'], $pane_values['service_details'], $shipping_service, $order, array(
$checkout_pane['pane_id'],
'service_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_shipping_pane_require_service', FALSE)) {
// But fail validation if no rates were returned and we require selection.
drupal_set_message(t('You cannot continue checkout without selecting a valid shipping service. Please verify your address information or contact us if an error is preventing you from seeing valid shipping rates for your order.'), 'error');
return FALSE;
}
}
// Nothing to validate.
return TRUE;
}