? .svn
? cart-coupon.patch
Index: uc_coupon.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/uc_coupon/uc_coupon.module,v
retrieving revision 1.28
diff -u -p -r1.28 uc_coupon.module
--- uc_coupon.module	14 May 2009 14:10:41 -0000	1.28
+++ uc_coupon.module	29 May 2009 16:41:37 -0000
@@ -950,3 +950,83 @@ 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 <a href="!url">here</a> to change this setting.', array('!url' => url('admin/store/settings/payment/edit/methods'))));
   }
 }
+
+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_cart_pane().
+ */
+function uc_coupon_cart_pane($items) {
+  if (!variable_get('uc_checkout_enabled', TRUE)) {
+    $panes[] = array(
+      'id' => 'coupon',
+      'body' => drupal_get_form('uc_cart_pane_coupon'),
+      'title' => t('Coupon discount'),
+      'desc' => t('Allows shoppers to use a coupon during checkout for order discounts.'),
+      'weight' => 1,
+      'enabled' => TRUE,
+    );
+    return $panes;
+  }
+}
+
+/**
+ * Cart Pane coupon form.
+ *
+ * Used when no checkout pane is configured.
+ */
+function uc_cart_pane_coupon($form_state) {
+  $form['code'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Coupon code'),
+    '#description' => variable_get('uc_coupon_pane_description', 'Enter a coupon code for this order.'),
+    '#size' => 25,
+  );
+  $form['apply'] = array(
+    '#type' => 'submit',
+    '#value' => t('Apply to order'),
+  );
+  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) {
+      $_SESSION['uc_coupon_valid'] = 0;
+      drupal_set_message($coupon->message, 'error');
+    }
+    else {
+      $_SESSION['uc_coupon_valid'] = $coupon->amount;
+      $coupon->message = t('The coupon has been applied to your order.');
+      drupal_set_message($coupon->message);
+    }
+  }
+}
+
+/**
+ * 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)) {
+          $items[$key]->price = $item->price -  $_SESSION['uc_coupon_valid'];
+          $items[$key]->altered = TRUE;
+        }
+      }
+    }
+  }
+}
