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;
}