function commerce_webform_order_update in Commerce Webform 8
Same name and namespace in other branches
- 7.2 commerce_webform.rules.inc \commerce_webform_order_update()
- 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']);
}
}