📄 ot_coupon.php
字号:
<?php
/**
* @package orderTotal
* @copyright Copyright 2003-2005 Zen Cart Development Team
* @copyright Portions Copyright 2003 osCommerce
* @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
* @version $Id: ot_coupon.php 3694 2006-06-03 02:17:36Z ajeh $
*/
class ot_coupon {
var $title, $output;
function ot_coupon() {
$this->code = 'ot_coupon';
$this->header = MODULE_ORDER_TOTAL_COUPON_HEADER;
$this->title = MODULE_ORDER_TOTAL_COUPON_TITLE;
$this->description = MODULE_ORDER_TOTAL_COUPON_DESCRIPTION;
$this->user_prompt = '';
$this->sort_order = MODULE_ORDER_TOTAL_COUPON_SORT_ORDER;
$this->include_shipping = MODULE_ORDER_TOTAL_COUPON_INC_SHIPPING;
$this->include_tax = MODULE_ORDER_TOTAL_COUPON_INC_TAX;
$this->calculate_tax = MODULE_ORDER_TOTAL_COUPON_CALC_TAX;
$this->tax_class = MODULE_ORDER_TOTAL_COUPON_TAX_CLASS;
$this->credit_class = true;
$this->output = array();
}
function process() {
global $order, $currencies, $db;
$od_amount = $this->calculate_deductions($this->get_order_total());
$this->deduction = $od_amount['total'];
if ($od_amount['total'] > 0) {
while (list($key, $value) = each($order->info['tax_groups'])) {
$tax_rate = zen_get_tax_rate_from_desc($key);
if ($od_amount[$key]) {
$order->info['tax_groups'][$key] -= $od_amount[$key];
$order->info['total'] -= $od_amount[$key];
}
}
if ($od_amount['type'] == 'S') $order->info['shipping_cost'] = 0;
$sql = "select coupon_code from " . TABLE_COUPONS . " where coupon_id = '" . $_SESSION['cc_id'] . "'";
$zq_coupon_code = $db->Execute($sql);
$this->coupon_code = $zq_coupon_code->fields['coupon_code'];
$order->info['total'] = $order->info['total'] - $od_amount['total'];
$this->output[] = array('title' => $this->title . ': ' . '<a href="javascript:couponpopupWindow(\'' . zen_href_link(FILENAME_POPUP_COUPON_HELP, 'cID=' . $_SESSION['cc_id']) . '\')">' . $this->coupon_code . '</a> :',
'text' => '-' . $currencies->format($od_amount['total']),
'value' => $od_amount['total']);
}
}
function selection_test() {
return false;
}
function clear_posts() {
unset($_SESSION['cc_id']);
}
function pre_confirmation_check($order_total) {
global $order;
if ($this->include_shipping == 'false') $order_total -= $order->info['shipping_cost'];
if ($this->include_tax == 'false') $order_total -= $order->info['tax'];
$od_amount = $this->calculate_deductions($order_total);
return $od_amount['total'] + $od_amount['tax'];
// return $od_amount['total'];
}
function use_credit_amount() {
return false;
}
function credit_selection() {
global $discount_coupon;
global $db;
// note the placement of the redeem code can be moved within the array on the instructions or the title
$selection = array('id' => $this->code,
'module' => $this->title,
'redeem_instructions' => MODULE_ORDER_TOTAL_COUPON_REDEEM_INSTRUCTIONS . ($discount_coupon->fields['coupon_code'] != '' ? MODULE_ORDER_TOTAL_COUPON_REMOVE_INSTRUCTIONS : ''),
'fields' => array(array('title' => ($discount_coupon->fields['coupon_code'] != '' ? MODULE_ORDER_TOTAL_COUPON_TEXT_CURRENT_CODE . '<a href="javascript:couponpopupWindow(\'' . zen_href_link(FILENAME_POPUP_COUPON_HELP, 'cID=' . $_SESSION['cc_id']) . '\')">' . $discount_coupon->fields['coupon_code'] . '</a><br />' : '') . MODULE_ORDER_TOTAL_COUPON_TEXT_ENTER_CODE,
'field' => zen_draw_input_field('dc_redeem_code', '', 'id="disc-'.$this->code.'" onchange="submitFunction(0,0)"'),
'tag' => 'disc-'.$this->code
)));
return $selection;
}
function collect_posts() {
global $db, $currencies, $messageStack;
// remove discount coupon by request
if (isset($_POST['dc_redeem_code']) && strtoupper($_POST['dc_redeem_code']) == 'REMOVE') {
unset($_POST['dc_redeem_code']);
unset($_SESSION['cc_id']);
$messageStack->add_session('checkout_payment', TEXT_REMOVE_REDEEM_COUPON, 'caution');
}
if ($_POST['dc_redeem_code']) {
$coupon_result=$db->Execute("select coupon_id, coupon_amount, coupon_type, coupon_minimum_order,
uses_per_coupon, uses_per_user, restrict_to_products,
restrict_to_categories from " . TABLE_COUPONS . "
where coupon_code='". $_POST['dc_redeem_code']."'
and coupon_active='Y'");
if ($coupon_result->fields['coupon_type'] != 'G') {
if ($coupon_result->RecordCount() <1 ) {
zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, 'credit_class_error_code=' . $this->code . '&credit_class_error=' . urlencode(TEXT_INVALID_REDEEM_COUPON), 'SSL',true, false));
}
if ($this->get_order_total() < $coupon_result->fields['coupon_minimum_order']) {
zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, 'credit_class_error_code=' . $this->code . '&credit_class_error=' . urlencode(sprintf(TEXT_INVALID_REDEEM_COUPON_MINIMUM, $currencies->format($coupon_result->fields['coupon_minimum_order']))), 'SSL',true, false));
}
// JTD - added missing code here to handle coupon product restrictions
// look through the items in the cart to see if this coupon is valid for any item in the cart
$products = $_SESSION['cart']->get_products();
$foundvalid = false;
for ($i=0; $i<sizeof($products); $i++) {
//$messageStack->add_session('header','START COUPON collect: ' . ' product: ' . $products[$i]['id'] . ' coupon: ' . $coupon_result->fields['coupon_id'], 'success');
if (is_product_valid($products[$i]['id'], $coupon_result->fields['coupon_id'])) {
$foundvalid = true;
continue;
}
}
if (!$foundvalid) zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, 'credit_class_error_code=' . $this->code . '&credit_class_error=' . urlencode(TEXT_INVALID_COUPON_PRODUCT), 'SSL',true, false));
// JTD - end of additions of missing code to handle coupon product restrictions
$date_query=$db->Execute("select coupon_start_date from " . TABLE_COUPONS . "
where coupon_start_date <= now() and
coupon_code='".$_POST['dc_redeem_code']."'");
if ($date_query->RecordCount() < 1 ) {
zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, 'credit_class_error_code=' . $this->code . '&credit_class_error=' . urlencode(TEXT_INVALID_STARTDATE_COUPON), 'SSL', true, false));
}
$date_query=$db->Execute("select coupon_expire_date from " . TABLE_COUPONS . "
where coupon_expire_date >= now() and
coupon_code='".$_POST['dc_redeem_code']."'");
if ($date_query->RecordCount() < 1 ) {
zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, 'credit_class_error_code=' . $this->code . '&credit_class_error=' . urlencode(TEXT_INVALID_FINISDATE_COUPON), 'SSL', true, false));
}
$coupon_count = $db->Execute("select coupon_id from " . TABLE_COUPON_REDEEM_TRACK . "
where coupon_id = '" . $coupon_result->fields['coupon_id']."'");
$coupon_count_customer = $db->Execute("select coupon_id from " . TABLE_COUPON_REDEEM_TRACK . "
where coupon_id = '" . $coupon_result->fields['coupon_id']."' and
customer_id = '" . $_SESSION['customer_id'] . "'");
if ($coupon_count->RecordCount() >= $coupon_result->fields['uses_per_coupon'] && $coupon_result->fields['uses_per_coupon'] > 0) {
zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, 'credit_class_error_code=' . $this->code . '&credit_class_error=' . urlencode(TEXT_INVALID_USES_COUPON . $coupon_result->fields['uses_per_coupon'] . TIMES ), 'SSL', true, false));
}
if ($coupon_count_customer->RecordCount() >= $coupon_result->fields['uses_per_user'] && $coupon_result->fields['uses_per_user'] > 0) {
zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, 'credit_class_error_code=' . $this->code . '&credit_class_error=' . urlencode(sprintf(TEXT_INVALID_USES_USER_COUPON, $_POST['dc_redeem_code']) . $coupon_result->fields['uses_per_user'] . ($coupon_result->fields['uses_per_user'] == 1 ? TIME : TIMES) ), 'SSL', true,false));
}
if ($coupon_result->fields['coupon_type']=='S') {
$coupon_amount = $order->info['shipping_cost'];
} else {
$coupon_amount = $currencies->format($coupon_result->fields['coupon_amount']) . ' ';
}
$_SESSION['cc_id'] = $coupon_result->fields['coupon_id'];
}
// if ($_POST['submit_redeem_coupon_x'] && !$_POST['gv_redeem_code']) zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, 'credit_class_error_code=' . $this->code . '&credit_class_error=' . urlencode(TEST_NO_REDEEM_CODE), 'SSL', true, false));
$messageStack->add_session('checkout', TEXT_VALID_COUPON,'success');
}
}
function update_credit_account($i) {
return false;
}
function apply_credit() {
global $db, $insert_id;
$cc_id = $_SESSION['cc_id'];
if ($this->deduction !=0) {
$db->Execute("insert into " . TABLE_COUPON_REDEEM_TRACK . "
(coupon_id, redeem_date, redeem_ip, customer_id, order_id)
values ('" . $cc_id . "', now(), '" . $_SERVER['REMOTE_ADDR'] . "', '" . $_SESSION['customer_id'] . "', '" . $insert_id . "')");
}
$_SESSION['cc_id'] = "";
}
function calculate_deductions($order_total) {
global $db, $order, $messageStack;
$tax_address = zen_get_tax_locations();
$od_amount = array();
if ($_SESSION['cc_id']) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -