@@ -164,6 +164,31 @@ function uc_order_rules_condition_info() {
       ),
     ),
   );
+  $conditions['uc_order_condition_has_productclass'] = array(
+   'label' => t("Check an order's product classes"),
+   'group' => t('Order: Product'),
+   'base' => 'uc_order_condition_has_productclass',
+   'parameter' => array(
+     'order' => array(
+       'type' => 'uc_order',
+       'label' => t('Order'),
+     ),
+     'productclasses' => array(
+       'type' => 'list<text>',
+       'label' => t('Product Classes'),
+       'options list' => 'uc_order_condition_has_productclass_options',
+       'restriction' => 'input',
+     ),
+     'required' => array(
+       'type' => 'boolean',
+       'label' => t('Require selected product classes'),
+     ),
+     'forbidden' => array(
+       'type' => 'boolean',
+       'label' => t('Forbid other product classes'),
+     ),
+   ),
+ );
 
   return $conditions;
 }
@@ -280,6 +305,47 @@ function uc_order_rules_action_info() {
  ******************************************************************************/
 
 /**
+* Checks that the order has the selected combination of product classes.
+*/
+function uc_order_condition_has_productclass($order, $productclasses, $required, $forbidden) {
+ $order_productclasses = array();
+ foreach ($order->products as $product) {
+   $order_productclasses[] = $product->type;
+ }
+ $required_productclasses = array_intersect($productclasses, $order_productclasses);
+ if ($required) {
+   $required_check = $required_productclasses == $productclasses;
+ }
+ else {
+   $required_check = (bool)count($required_productclasses);
+ }
+ if ($forbidden) {
+   $forbidden_productclasses = array_diff($order_productclasses, $productclasses);
+   $forbidden_check = (bool)count($forbidden_productclasses);
+ }
+ else {
+   $forbidden_check = FALSE;
+ } 
+ return $required_check && !$forbidden_check;
+}
+
+/**
+* Options callback.
+*
+* @see uc_order_condition_has_product_class()
+*/
+function uc_order_condition_has_productclass_options() {
+ $options = array();
+ // TODO
+ $result = db_query("SELECT * FROM {uc_product_classes}");
+ foreach ($result as $class) {
+   $options += array($class->pcid => $class->name);
+ }
+
+ return $options;
+}
+
+/**
  * Checks that the order has the selected combination of products.
  */
 function uc_order_condition_has_products($order, $products, $required, $forbidden) {