--- uc_coupon.module.orig 2009-07-23 07:49:24.000000000 -0400 +++ uc_coupon.module 2010-06-02 16:02:03.182167484 -0400 @@ -920,7 +920,9 @@ function uc_coupon_validate($code) { $result->code = $code; $result->cid = $coupon->cid; $result->title = t('Coupon: @code', array('@code' => $code)); - + $result->type = $coupon->type; + $result->value = $coupon->value; + $result->name = $coupon->name; if ($coupon->type == 'percentage') { $result->amount = $applicable_total * $coupon->value / 100; } @@ -963,20 +965,29 @@ function uc_cart_pane_coupon($form_state return $form; } -function uc_cart_pane_coupon_submit($form, &$form_state) { - if ($form_state['values']['code']) { - $code = strtoupper(check_plain($form_state['values']['code'])); - $coupon = uc_coupon_validate($code); - if (!$coupon->valid) { - unset($_SESSION['uc_coupon']); - drupal_set_message($coupon->message, 'error'); - } - else { - $_SESSION['uc_coupon'] = $code; - drupal_set_message(t('A coupon discount of !amount will be deducted from your order total at checkout.', array('!amount' => uc_currency_format($coupon->amount)))); - } - } -} +/** + * Submit handler for uc_cart_pane_coupon. + */ + function uc_cart_pane_coupon_submit($form, &$form_state) { + if ($form_state['values']['code']) { + $code = strtoupper(check_plain($form_state['values']['code'])); + $coupon = uc_coupon_validate($code); + if (!$coupon->valid) { + unset($_SESSION['uc_coupon']); + $_SESSION['uc_coupon'] = 0; + drupal_set_message($coupon->message, 'error'); + } + else { + $_SESSION['uc_coupon'] = $code; + $_SESSION['uc_coupon_valid'] = $coupon->amount; + $_SESSION['uc_coupon_value'] = $coupon->value; + $_SESSION['uc_coupon_type'] = $coupon->type; + $coupon->message = t('The coupon "%name" has been applied to your order', array('%name' => $coupon->name)); + drupal_set_message($coupon->message); + } + } + } + /** * Implementation of hook_order(). @@ -1083,7 +1094,7 @@ function uc_checkout_pane_coupon($op, &$ function uc_coupon_checkout_apply() { $coupon = uc_coupon_validate($_POST['code']); if ($coupon->valid) { - $coupon->message = t('The coupon has been applied to your order.'); + $coupon->message = t('The coupon "%name" has been applied to your order.', array('%name' => $coupon->name)); } drupal_set_header("Content-Type: text/javascript; charset=utf-8"); @@ -1250,3 +1261,27 @@ function _uc_coupon_paypal_check() { drupal_set_message(t('To use coupons with PayPal you must select "Submit the whole order as a single line item". Click here to change this setting.', array('!url' => url('admin/store/settings/payment/edit/methods')))); } } + +/** + * Implementation of hook_uc_cart_alter(). + * When cart-based discounts are used, alter the cart prices. + */ +function uc_coupon_uc_cart_alter(&$items) { + if (isset($_SESSION['uc_coupon_valid']) && $_SESSION['uc_coupon_valid']) { + if (count($items)) { + foreach ($items as $key => $item) { + if (!isset($item->altered)) { + switch($_SESSION['uc_coupon_type']) { + case 'percentage': + $items[$key]->price = $items[$key]->price * ((100 - $_SESSION['uc_coupon_value']) / 100); + break; + case 'price': + $items[$key]->price = $item->price - ($_SESSION['uc_coupon_value'] / count($items)); + break; + } + $items[$key]->altered = TRUE; + } + } + } + } +}