--- 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 .= '<li>'. l($row->model, 'node/'. $row->nid) .'</li>';
+  }
+  if ($classes) {
+  	$class_name = '<ul class="classes">'. $classes .'</ul>';
+  }
   return $class_name;
 }
 
