123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- <?php
- /**
- * @file
- * Rules integration for uc_coupon
- */
- /**
- * Implements hook_rules_data_info().
- */
- function uc_coupon_rules_data_info() {
- $types['uc_coupon'] = array(
- 'label' => t('Ubercart discount coupon'),
- 'wrap' => FALSE,
- 'group' => t('Ubercart'),
- );
- }
- /**
- * Implements hook_rules_condition_info().
- */
- function uc_coupon_rules_condition_info() {
- $conditions['uc_coupon_condition_order_has_coupon'] = array(
- 'label' => t('Check if an order has a coupon applied'),
- 'group' => t('Order'),
- 'parameter' => array(
- 'order' => array(
- 'type' => 'uc_order',
- 'label' => t('Order'),
- 'optional' => TRUE,
- 'default value' => NULL,
- 'allow null' => TRUE
- ),
- 'codes' => array(
- 'type' => 'list<text>',
- 'label' => t('Codes'),
- 'description' => t('Enter coupon codes that this condition will apply to, one per line. Wildcards are allowed, e.g. COUPON* will match all codes beginning with COUPON. Leave blank to apply to any order with a coupon.'),
- 'restriction' => 'input',
- ),
- ),
- );
-
- $conditions['uc_coupon_condition_is_bulk'] = array(
- 'label' => t('Check if a coupon is a bulk coupon'),
- 'group' => t('Coupon'),
- 'parameter' => array(
- 'coupon' => array(
- 'type' => 'uc_coupon',
- 'label' => t('Coupon'),
- ),
- ),
- );
- return $conditions;
- }
- /**
- * Check if an order has a coupon applied.
- */
- function uc_coupon_condition_order_has_coupon($order, $codes=array()) {
- $check_codes = array();
- // If the order is in checkout by the current user, use the current session coupons.
- if (_uc_coupon_is_checkout_order($order)) {
- $coupons = uc_coupon_session_validate();
- foreach ($coupons as $coupon) {
- $check_codes[$coupon->code] = $coupon->code;
- }
- }
- // Now add any codes alreay in the order object (these take precedence).
- elseif (isset($order->data['coupons'])) {
- $check_codes = drupal_map_assoc(array_keys($order->data['coupons']));
- }
- if (count($check_codes) > 0) {
- $codes = array_filter($codes);
- // If no codes specified, match any coupon.
- if (count($codes)==0) {
- return TRUE;
- }
- // Check codes for exact or wildcard matches.
- foreach ($codes as $code) {
- foreach (array_keys($check_codes) as $check_code) {
- if (preg_match('/^' . str_replace('\*', '.*?', preg_quote(strtoupper(trim($code)), '/')) . '$/', $check_code)) {
- return TRUE;
- }
- }
- }
- }
- return FALSE;
- }
- /**
- * Check that a coupon is a bulk coupon.
- */
- function uc_coupon_condition_is_bulk($coupon) {
- return $coupon->bulk;
- }
|