You are here

function commerce_order_order_form_submit in Commerce Core 7

Submit callback for commerce_order_order_form().

1 string reference to 'commerce_order_order_form_submit'
commerce_order_order_form in modules/order/includes/commerce_order.forms.inc
Form callback: create or edit an order.

File

modules/order/includes/commerce_order.forms.inc, line 237
Forms for creating / editing and deleting orders.

Code

function commerce_order_order_form_submit($form, &$form_state) {
  global $user;

  // If the user is editing an order, load a fresh copy to merge changes to.
  if ($form_state['commerce_order']->order_id) {
    $form_state['commerce_order'] = commerce_order_load($form_state['commerce_order']->order_id);
  }

  // Merge changes into the order object in the form state so it is accessible
  // by field handlers.
  $order = $form_state['commerce_order'];
  if ($form_state['values']['revision'] || !empty($form_state['values']['log'])) {
    $order->revision = TRUE;
    $order->log = $form_state['values']['log'];
  }

  // Set the order's owner uid based on the supplied name.
  $converted = FALSE;
  if (!empty($form_state['values']['name']) && ($account = user_load_by_name($form_state['values']['name']))) {

    // If the order is being converted to an authenticated order from an
    // anonymous order...
    if ($order->uid == 0) {

      // Set the converted boolean for later processing.
      $converted = TRUE;
    }
    $order->uid = $account->uid;
    if (empty($form_state['values']['mail'])) {
      $order->mail = $account->mail;
    }
  }
  else {
    $order->uid = 0;
  }
  if (!empty($form_state['values']['mail'])) {
    $order->mail = $form_state['values']['mail'];
  }
  $order->created = !empty($form_state['values']['date_created']) ? strtotime($form_state['values']['date_created']) : REQUEST_TIME;
  if (!empty($form_state['values']['date_placed'])) {
    $order->placed = strtotime($form_state['values']['date_placed']);
  }

  // Notify field widgets.
  field_attach_submit('commerce_order', $order, $form, $form_state);

  // Ensure the attached customer profiles are associated with the order owner
  // if they do not have a uid yet and the order does.
  if ($converted) {
    $wrapper = entity_metadata_wrapper('commerce_order', $order);
    foreach (field_info_instances('commerce_order', $order->type) as $field_name => $instance) {
      $field_info = field_info_field($field_name);
      if ($field_info['type'] == 'commerce_customer_profile_reference') {
        if (!is_null($wrapper->{$field_name}
          ->value()) && $wrapper->{$field_name}->uid
          ->value() == 0) {
          $wrapper->{$field_name}->uid = $order->uid;
          $wrapper->{$field_name}
            ->save();
        }
      }
    }
  }

  // Update the order status if specified.
  if ($form_state['values']['status'] != $form_state['values']['status_original']) {

    // We skip order saving in the update since we do it below once for the
    // entire form submission.
    commerce_order_status_update($order, $form_state['values']['status'], TRUE);
  }

  // Save the order.
  commerce_order_save($order);

  // Ensure the attached line items are associated with the order if they do not
  // have an order_id set yet.
  foreach (entity_metadata_wrapper('commerce_order', $order)->commerce_line_items as $delta => $line_item_wrapper) {
    if ($line_item_wrapper->order_id
      ->value() == 0) {
      $line_item_wrapper->order_id = $order->order_id;
      commerce_line_item_save($line_item_wrapper
        ->value());
    }
  }
}