function commerce_shipping_pane_checkout_form_submit in Commerce Shipping 7.2
Same name and namespace in other branches
- 7 includes/commerce_shipping.checkout_pane.inc \commerce_shipping_pane_checkout_form_submit()
Checkout pane callback: submit the shipping checkout pane.
File
- includes/
commerce_shipping.checkout_pane.inc, line 361 - Callback functions for the shipping module's checkout panes.
Code
function commerce_shipping_pane_checkout_form_submit($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];
// Initialize the extra details if necessary.
if (empty($pane_values['service_details'])) {
$pane_values['service_details'] = array();
}
// Only submit if there were shipping services available.
if (!empty($pane_values['shipping_rates'])) {
$shipping_service = commerce_shipping_service_load($pane_values['shipping_service']);
// Delete any existing shipping line items from the order.
commerce_shipping_delete_shipping_line_items($order, TRUE);
// Extract the unit price from the calculated rate.
$rate_line_item = $pane_values['shipping_rates'][$pane_values['shipping_service']];
$rate_line_item_wrapper = entity_metadata_wrapper('commerce_line_item', $rate_line_item);
$unit_price = $rate_line_item_wrapper->commerce_unit_price
->value();
// Create a new shipping line item with the calculated rate from the form.
$line_item = commerce_shipping_line_item_new($pane_values['shipping_service'], $unit_price, $order->order_id, $rate_line_item->data, $rate_line_item->type);
// Add the service details to the line item's data array and the order.
$line_item->data['service_details'] = $pane_values['service_details'];
// Allow the details form submit handler to make any necessary updates to
// the line item before adding it to the order.
if ($callback = commerce_shipping_service_callback($shipping_service, 'details_form_submit')) {
$callback($pane_form['service_details'], $pane_values['service_details'], $line_item);
}
// Save and add the line item to the order.
commerce_shipping_add_shipping_line_item($line_item, $order, TRUE);
}
}
}