--- uc_discounts_multi_product.module 2008-10-20 10:05:20.000000000 -0700 +++ uc_discounts_multi_product_new.module 2010-10-09 23:27:09.609375000 -0700 @@ -38,27 +38,32 @@ function uc_discounts_multi_product_disc ******************************************************************************/ function uc_discounts_multi_product_check($condition, $total_price, $cart) { - - if (isset($condition->item)) { - $product_count = 0; + if (isset($condition->item_id)) { + //items is a serialize array of items in the situation I tested. Not testing for other cases + $items = unserialize($condition->item_id); + //a counter of valid conditions. Will be used to verify that all conditions are met + $count_valid_product = 0; foreach ($cart as $product) { - if ( (in_array($product->type, $condition->item) || in_array($product->nid, $condition->item)) && (($condition->amount > 0) ? ($product->price == (float)$condition->amount) : TRUE) ) { - $product_count += $product->qty; + //verify that the products nid is inside of the $items array, which is now an unserialized array of products + if (in_array($product->nid, $items)) { + //this section is left over from the previous method. Hopefully will catch other testing methods for multi-product + if ((($condition->amount > 0) ? ($product->price == (float)$condition->amount) : TRUE) ) { + //we need to check to verify that all the conditions for each multi condition have been met, so will be added to the counter + if ($condition->op == '=' && $product->qty == $condition->value) { $count_valid_product++; } + elseif ($condition->op == '!=' && $product->qty != $conditions->value) { $count_valid_product++; } + elseif ($condition->op == '>=' && $product->qty >= $condition->value) { $count_valid_product++; } + elseif ($condition->op == '>' && $product->qty > $condition->value) { $count_valid_product++; } + elseif ($condition->op == '<=' && $product->qty <= $condition->value) { $count_valid_product++; } + elseif ($condition->op == '<' && $product->qty < $condition->value) { $count_valid_product++; } + } } } } - - if ($product_count == 0) { - return FALSE; + //if the number of valid conditions is the same as the count of all item conditions, then return TRUE + if ($count_valid_product == count($items)) { + return TRUE; } - elseif ($condition->op == '=' && $product_count == $condition->value) { return TRUE; } - elseif ($condition->op == '!=' && $product_count != $conditions->value) { return TRUE; } - elseif ($condition->op == '>=' && $product_count >= $condition->value) { return TRUE; } - elseif ($condition->op == '>' && $product_count > $condition->value) { return TRUE; } - elseif ($condition->op == '<=' && $product_count <= $condition->value) { return TRUE; } - elseif ($condition->op == '<' && $product_count < $condition->value) { return TRUE; } - else { return FALSE; } - + return FALSE; } function uc_discounts_multi_product_class_name($product_id) { @@ -68,8 +73,15 @@ function uc_discounts_multi_product_clas } function uc_discounts_multi_product_item_name($class_id) { - $result = db_query("SELECT name FROM {uc_product_classes} WHERE pcid='%s'", $class_id); - $class_name = check_plain(db_result($result)); + $class_array = unserialize($class_id); + $sql = db_query("SELECT `nid`, `model` FROM {uc_products} WHERE `nid` IN (". implode(',', $class_array) .") ORDER BY `weight`, `model`"); + $classes = ''; + while ($row = db_fetch_object($sql)) { + $classes .= '