diff --git a/commerce_coupon.rules.inc b/commerce_coupon.rules.inc index 7d7cd65..c763dd6 100644 --- a/commerce_coupon.rules.inc +++ b/commerce_coupon.rules.inc @@ -47,6 +47,50 @@ function commerce_coupon_rules_event_info() { } /** + * Variant of patch at https://drupal.org/node/1407498 + * Implements hook_rules_condition_info(). + */ +function commerce_coupon_rules_condition_info() { + $conditions = array(); + + $conditions['commerce_coupon_applied_to_order'] = array( + 'label' => t('Coupon has been applied to order'), + 'parameter' => array( + 'commerce_order' => array( + 'type' => 'commerce_order', + 'label' => t('Order'), + 'description' => t('The order whose line items should be checked for a coupon line item.'), + ), + ), + 'group' => t('Commerce Coupon'), + 'callbacks' => array( + 'execute' => 'commerce_coupon_rules_line_item_exists', + ), + ); + + return $conditions; +} + +/** + * Checks an order for the existence of a coupon line item. + * + * @param $order + * The order to check for a coupon line item. + * @param $coupon + * The machine-name of a particular coupon to search for; if '-any-' + * the condition returns TRUE for any found coupon line item. + */ +function commerce_coupon_rules_line_item_exists($order, $coupon) { + $order_wrapper = entity_metadata_wrapper('commerce_order', $order); + + if (count($order_wrapper->commerce_coupon_order_reference) > 0) { + return TRUE; + } + + return FALSE; +} + +/** * Implements hook_rules_action_info(). */ function commerce_coupon_rules_action_info() {