You are here

function uc_order_edit_form_submit in Ubercart 6.2

Same name and namespace in other branches
  1. 5 uc_order/uc_order.module \uc_order_edit_form_submit()
  2. 7.3 uc_order/uc_order.admin.inc \uc_order_edit_form_submit()

Form submission handler for uc_order_edit_form().

See also

uc_order_edit_form()

uc_order_edit_form_validate()

theme_uc_order_edit_form()

File

uc_order/uc_order.admin.inc, line 1246
Order administration menu items.

Code

function uc_order_edit_form_submit($form, &$form_state) {
  if ($form_state['values']['op'] == t('Delete')) {
    drupal_goto('admin/store/orders/' . $form_state['values']['order_id'] . '/delete');
  }
  $order = uc_order_load($form_state['values']['order_id']);
  $log = array();
  uc_order_module_invoke('edit-products', $order, $_POST);
  $panes = _order_pane_list();
  foreach ($panes as $pane) {
    if (in_array('edit', $pane['show']) && variable_get('uc_order_pane_' . $pane['id'] . '_show_edit', TRUE)) {
      $func = $pane['callback'];
      if (function_exists($func)) {
        if (($changes = $func('edit-process', $form_state['values'])) != NULL) {
          foreach ($changes as $key => $value) {
            if ($order->{$key} != $value) {
              if (!is_array($value)) {
                $log[$key] = array(
                  'old' => $order->{$key},
                  'new' => $value,
                );
              }
              $order->{$key} = $value;
            }
          }
        }
        if (($ops = $func('edit-ops', NULL)) != NULL) {
          $perform[$func] = $ops;
        }
      }
    }
  }
  unset($order->products);
  if (isset($_POST['products']) && is_array($_POST['products'])) {
    foreach ($_POST['products'] as $product) {
      if (!isset($product['remove']) && intval($product['qty']) > 0) {
        $product['data'] = unserialize($product['data']);
        $product = (object) $product;
        $order->products[] = $product;
      }
      else {
        $log['remove_' . $product['nid']] = $product['title'] . ' removed from order.';
      }
    }
  }

  // Load line items again, since some may have been updated by the form.
  $order->line_items = uc_order_load_line_items($order, TRUE);

  // Merge it with the defaultish line items.
  $order->line_items = array_merge($order->line_items, uc_order_load_line_items($order, FALSE));
  usort($order->line_items, 'uc_weight_sort');
  if (variable_get('uc_order_logging', TRUE)) {
    uc_order_log_changes($order->order_id, $log);
  }
  uc_order_save($order);
  if (is_array($perform)) {
    foreach ($perform as $func => $ops) {
      if (in_array($form_state['values']['op'], $ops)) {
        $func($form_state['values']['op'], $form_state['values']);
      }
    }
  }
  drupal_set_message(t('Order changes saved.'));
}