You are here

function uc_product_kit_order_product_alter in Ubercart 6.2

Implements hook_order_product_alter().

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

Parameters

$product: The order product being saved.

$order: The order being edited.

File

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

Code

function uc_product_kit_order_product_alter(&$product, $order) {
  if ($product->type !== 'product_kit') {
    return;
  }

  // Have to save each individual product if this is a kit.
  foreach ($product->products as $kit_product) {
    $kit_product->price = $kit_product->sell_price;
    $kit_product->qty *= $product->qty;

    // Load all the attributes/discounts/etc as if we were adding it to the
    // cart.
    $kit_product->data = module_invoke_all('add_to_cart_data', $_POST['sub_products'][$kit_product->nid]);
    $kit_product->data['kit_id'] = $product->nid;
    $kit_product->data['shippable'] = $product->shippable;

    // Run the product through the alter mill.
    foreach (module_list() as $module) {
      $function = $module . '_cart_item';
      if (function_exists($function)) {

        // $product must be passed by reference.
        $function('load', $kit_product);
      }
    }
    $price_info = array(
      'price' => $kit_product->price,
      'qty' => 1,
    );
    $context = array(
      'revision' => 'altered',
      'type' => 'order_product',
      'subject' => array(
        'order' => $order,
        'product' => $kit_product,
        'node' => node_load($kit_product->nid),
      ),
    );
    $kit_product->price = uc_price($price_info, $context);
    drupal_alter('order_product', $kit_product, $order);

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

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