? .DS_Store Index: uc_coupon.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/uc_coupon/uc_coupon.module,v retrieving revision 1.30 diff -u -p -r1.30 uc_coupon.module --- uc_coupon.module 1 Jun 2009 18:04:30 -0000 1.30 +++ uc_coupon.module 4 Jun 2009 17:23:11 -0000 @@ -772,6 +772,9 @@ function uc_coupon_validate($code) { $result->code = $coupon->code; $result->cid = $coupon->cid; $result->title = t('Coupon: @code', array('@code' => $coupon->code)); + $result->type = $coupon->type; + $result->value = $coupon->value; + if ($coupon->type == 'percentage') { $result->amount = $applicable_total * $coupon->value / 100; @@ -815,17 +818,27 @@ function uc_cart_pane_coupon($form_state return $form; } + +/** + * 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; drupal_set_message(t('The coupon has been applied to your order.')); + $_SESSION['uc_coupon_valid'] = $coupon->amount; + $_SESSION['uc_coupon_value'] = $coupon->value; + $_SESSION['uc_coupon_type'] = $coupon->type; + $coupon->message = t('The coupon has been applied to your order.'); + drupal_set_message($coupon->message); } } } @@ -1102,3 +1115,38 @@ 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_form_alter(). + */ +function uc_coupon_form_alter(&$form, $form_state, $form_id) { + if ($form_id == 'uc_cart_view_form') { + if (!variable_get('uc_checkout_enabled', TRUE)) { + // dpm($form); + } + } +} + + +/** + * 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)) { + if ($_SESSION['uc_coupon_type'] == 'percentage') { + $items[$key]->price = $items[$key]->price * ((100 - $_SESSION['uc_coupon_value']) / 100); + } + if ($_SESSION['uc_coupon_type'] == 'price') { + $items[$key]->price = $item->price - ($_SESSION['uc_coupon_value'] / count($items)); + } + $items[$key]->altered = TRUE; + } + } + } + } +}