@@ -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', + '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) {