You are here

function commerce_webform_order_update in Commerce Webform 8

Same name and namespace in other branches
  1. 7.2 commerce_webform.rules.inc \commerce_webform_order_update()
  2. 7 commerce_webform.rules.inc \commerce_webform_order_update()

Rules actions. Update an order from a commerce webform update.

File

./commerce_webform.rules.inc, line 243
Rules extras supplied by the commerce webform module.

Code

function commerce_webform_order_update($node, $webform_submission, $user) {
  $uid = empty($user) ? 0 : $user->uid;
  $order_id = 0;

  // Find any existing line items for the submission.
  $query = new EntityFieldQuery();
  $result = $query
    ->entityCondition('entity_type', 'commerce_line_item')
    ->entityCondition('bundle', 'commerce_webform')
    ->fieldCondition('commerce_webform_sid', 'value', $webform_submission['sid'], '=')
    ->execute();
  if (!isset($result['commerce_line_item'])) {

    // There were no existing line items for this submission
    // so create a new order.
    return commerce_webform_order_create($node, $webform_submission, $user);
  }
  $line_items = entity_load('commerce_line_item', array_keys($result['commerce_line_item']));
  $product_details = commerce_webform_get_products_from_webform_submission($webform_submission);

  // Loop over the existing submissions, updating or removing them.
  foreach ($line_items as $line_item) {
    $wrapper = entity_metadata_wrapper('commerce_line_item', $line_item);
    $product = $wrapper->commerce_product
      ->value();
    $order_id = $line_item->order_id;
    if (isset($product_details[$product->product_id])) {

      // Update this line item.
      $product_detail = $product_details[$product->product_id];
      $line_item->quantity = $product_detail->quantity;
      $line_item->data['commerce_webform'] = array(
        'choose_quantity' => $product_detail->choose_quantity,
        'required' => $product_detail->required,
      );
      commerce_line_item_save($line_item);

      // Update the webform submission for this product field.
      $webform_submission_object = webform_get_submission($node->nid, $webform_submission['sid']);
      commerce_webform_update_webform_submission_productfield($webform_submission_object, $order_id, $line_item->line_item_id, $product_detail->product->product_id, $product_detail->quantity, FALSE);

      // Remove this from the list of products to update.
      unset($product_details[$product->product_id]);
    }
    else {

      // This is no longer required in the order.
      commerce_line_item_delete($line_item->line_item_id);
    }
  }
  if (!empty($product_details)) {

    // Create new line items for each new product on the submission.
    _commerce_webform_create_order_line_items($product_details, $order_id, $uid, $node->nid, $webform_submission['sid']);
  }
}