You are here

function uc_product_kit_uc_order_product_alter in Ubercart 8.4

Same name and namespace in other branches
  1. 7.3 uc_product_kit/uc_product_kit.module \uc_product_kit_uc_order_product_alter()

Implements hook_uc_order_product_alter().

The hookups for making product kits work on the order edit admin screen.

Parameters

\Drupal\uc_order\OrderProductInterface $product: The order product being saved.

\Drupal\uc_order\OrderInterface $order: The order being edited.

File

uc_product_kit/uc_product_kit.module, line 882
The product kit module for Ubercart.

Code

function uc_product_kit_uc_order_product_alter(OrderProductInterface &$product, OrderInterface $order) {
  if (empty($product->type) || $product->type !== 'product_kit') {
    return;
  }

  // Have to save each individual product if this is a kit.
  foreach ($product->products as $kit_product) {
    $qty = $kit_product->qty * $product->qty;
    $data = isset($kit_product->data) ? $kit_product->data : [];
    $data += \Drupal::moduleHandler()
      ->invokeAll('uc_add_to_cart_data', [
      $_POST['product_controls']['sub_products'][$kit_product->nid],
    ]);
    $data['shippable'] = $product->shippable;
    $kit_product = uc_product_load_variant($kit_product->nid, $data);
    $kit_product->qty = $qty;
    \Drupal::moduleHandler()
      ->alter('uc_order_product', $kit_product, $order);

    // Save the individual item to the order.
    uc_order_product_save($order
      ->id(), $kit_product);
  }

  // Don't save the base kit node, though.
  $product->skip_save = TRUE;
}