1135 lines
45 KiB
PHP
Executable File
1135 lines
45 KiB
PHP
Executable File
<?php
|
|
/*
|
|
+--------------------------------------------------------------------------
|
|
| CubeCart 4
|
|
| ========================================
|
|
| CubeCart is a registered trade mark of Devellion Limited
|
|
| Copyright Devellion Limited 2006. All rights reserved.
|
|
| Devellion Limited,
|
|
| 5 Bridge Street,
|
|
| Bishops Stortford,
|
|
| HERTFORDSHIRE.
|
|
| CM23 2JU
|
|
| UNITED KINGDOM
|
|
| http://www.devellion.com
|
|
| UK Private Limited Company No. 5323904
|
|
| ========================================
|
|
| Web: http://www.cubecart.com
|
|
| Email: info (at) cubecart (dot) com
|
|
| License Type: CubeCart is NOT Open Source Software and Limitations Apply
|
|
| Licence Info: http://www.cubecart.com/v4-software-license
|
|
+--------------------------------------------------------------------------
|
|
| cart.inc.php
|
|
| ========================================
|
|
| Core Checkout & Cart Pages
|
|
+--------------------------------------------------------------------------
|
|
*/
|
|
|
|
if(!defined('CC_INI_SET')) die("Access Denied");
|
|
|
|
session_start(); // required for PayPal Pro
|
|
|
|
/* BEGIN Browser back button fix - Thanks Convict */
|
|
|
|
if ($_SESSION['cc_back']) { // session variable set in gateway.inc.php around line 290
|
|
|
|
$sess_cart_order_id = base64_decode($_SESSION['cc_back']);
|
|
unset($_SESSION['cc_back']);
|
|
|
|
require_once("classes".CC_DS."cart".CC_DS."order.php");
|
|
$order = new order();
|
|
$sess_sum = $order->getOrderSum($sess_cart_order_id);
|
|
if ($sess_sum['status']!=2 && $sess_sum['status']!=3) {
|
|
$pastBasket = $db->select(sprintf("SELECT `basket` FROM `%sCubeCart_order_sum` WHERE `cart_order_id` = %s",$glob['dbprefix'],$db->MySQLSafe($sess_cart_order_id)));
|
|
if($pastBasket==true) {
|
|
$record['basket'] = "'".$pastBasket[0]['basket']."'";
|
|
$db->update($glob['dbprefix']."CubeCart_sessions", $record, "`sessId`= '".$cc_session->ccUserData['sessId']."'");
|
|
}
|
|
$order->orderStatus(6, $sess_cart_order_id, false, true);
|
|
httpredir(currentPage());
|
|
}
|
|
}
|
|
/* END Browser back button fix - Thanks Convict */
|
|
|
|
// include lang file
|
|
|
|
$lang1 = getLang("includes".CC_DS."content".CC_DS."reg.inc.php");
|
|
$lang2 = getLang("includes".CC_DS."content".CC_DS."cart.inc.php");
|
|
|
|
$lang = array_merge($lang1, $lang2);
|
|
|
|
require_once("classes".CC_DS."cart".CC_DS."shoppingCart.php");
|
|
$cart = new cart();
|
|
|
|
// Dangerous var fixed $view_cart->assign("VAL_BACK_TO", $_GET['_a']);
|
|
$allowed_a = array("cart","step1","step2");
|
|
$current_a = (in_array($_GET['_a'],$allowed_a)) ? $_GET['_a'] : "cart";
|
|
|
|
// check the user is logged on
|
|
if($_GET['_a']=="step2" && empty($cc_session->ccUserData['customer_id'])) {
|
|
httpredir("index.php?_g=co&_a=step1");
|
|
}
|
|
// if user is logged in an act = cart jump ahead to step2
|
|
else if($_GET['_a']=="cart" && $cc_session->ccUserData['customer_id']>0) {
|
|
# $basket = $cart->cartContents($cc_session->ccUserData['basket']);
|
|
# if (!empty($basket)) {
|
|
httpredir("index.php?_g=co&_a=step2");
|
|
# }
|
|
}
|
|
|
|
$basket = $cart->cartContents($cc_session->ccUserData['basket']);
|
|
|
|
// Flexible Taxes, by Estelle Winterflood
|
|
$config_tax_mod = fetchDbConfig("Multiple_Tax_Mod");
|
|
|
|
if(isset($_GET['remlast'])) {
|
|
$cart->unsetVar("invArray");
|
|
$cart->removeLastItem();
|
|
$refresh = true;
|
|
}
|
|
if (isset($_GET['remCode'])) {
|
|
$cart->removeCoupon($_GET['remCode']);
|
|
// lose the post vars
|
|
$refresh = true;
|
|
|
|
}
|
|
|
|
if (isset($_POST['coupon']) && !empty($_POST['coupon']) && !isset($basket['code'])){
|
|
|
|
$cart->addCoupon($_POST['coupon']);
|
|
// lose post vars
|
|
$refresh = true;
|
|
|
|
}
|
|
if(isset($_POST['shipKey']) && $_POST['shipKey']>0) {
|
|
|
|
$cart->setVar($_POST['shipKey'],"shipKey");
|
|
// lose post vars
|
|
$refresh = true;
|
|
|
|
}
|
|
if(isset($_POST['delInf'])) {
|
|
|
|
// start: Flexible Taxes, by Estelle Winterflood
|
|
if (isset($_POST['which_field'])){
|
|
$delivery = $_POST['delInf'];
|
|
if ($_POST['which_field']=="T"){
|
|
unset($delivery['county_sel']);
|
|
} elseif ($_POST['which_field']=="S") {
|
|
$delivery['county'] = $delivery['county_sel'];
|
|
unset($delivery['county_sel']);
|
|
}
|
|
$_POST['delInf'] = $delivery;
|
|
}
|
|
|
|
$cart->setVar($_POST['delInf'],"delInf");
|
|
$refresh = true;
|
|
|
|
}
|
|
|
|
if(isset($_GET['remove'])) {
|
|
$cart->unsetVar("invArray");
|
|
$cart->remove($_GET['remove']);
|
|
$refresh = true;
|
|
}
|
|
|
|
if (isset($_POST['quan'])) {
|
|
$cart->unsetVar('invArray');
|
|
foreach ($_POST['quan'] as $key => $value) {
|
|
$cart->update($key, $value);
|
|
}
|
|
$refresh = true;
|
|
}
|
|
if(isset($_GET['mode']) && $_GET['mode'] == "emptyCart") {
|
|
## Empty the cart
|
|
$cart->emptyCart();
|
|
$refresh = true;
|
|
}
|
|
|
|
if(isset($_POST['productCode']) && !empty($_POST['productCode'])) {
|
|
$cart->addByCode($_POST['productCode']);
|
|
|
|
$refresh = true;
|
|
}
|
|
|
|
if ($refresh) {
|
|
$excludeGetVars = array("editDel" => 1, "remCode" => 1, "mode" => 1, "remove" => 1, "remlast" => 1);
|
|
httpredir(currentpage($excludeGetVars));
|
|
}
|
|
|
|
$view_cart = new XTemplate ("content".CC_DS."cart.tpl");
|
|
$view_cart->assign("LANG_CART",$lang['cart']['cart']);
|
|
$view_cart->assign("LANG_CHECKOUT", $lang['cart']['checkout']);
|
|
$view_cart->assign("LANG_PAYMENT", $lang['cart']['payment']);
|
|
$view_cart->assign("LANG_COMPLETE", $lang['cart']['complete']);
|
|
$view_cart->assign("LANG_ADD_PRODCODE",$lang['cart']['add_more']);
|
|
$view_cart->assign("LANG_ADD", $lang['cart']['add']);
|
|
$view_cart->assign("LANG_QTY",$lang['cart']['qty']);
|
|
$view_cart->assign("LANG_PRODUCT",$lang['cart']['product']);
|
|
$view_cart->assign("LANG_CODE",$lang['cart']['code']);
|
|
$view_cart->assign("LANG_STOCK",$lang['cart']['stock']);
|
|
$view_cart->assign("LANG_PRICE",$lang['cart']['price']);
|
|
$view_cart->assign("LANG_LINE_PRICE",$lang['cart']['line_price']);
|
|
$view_cart->assign("LANG_DELETE",$lang['cart']['delete']);
|
|
$view_cart->assign("LANG_REMOVE_ITEM",$lang['cart']['remove']);
|
|
|
|
if ($_GET['_a'] == 'cart') {
|
|
|
|
$view_cart->assign("CONT_VAL","index.php?_g=co&_a=step1");
|
|
$view_cart->assign("LANG_CHECKOUT_BTN",$lang['cart']['checkout_btn']);
|
|
$view_cart->assign("LANG_VIEW_CART",$lang['cart']['view_cart']);
|
|
$view_cart->assign("CLASS_CART","class='txtcartProgressCurrent'");
|
|
$view_cart->assign("CLASS_STEP2","");
|
|
|
|
} else if ($_GET['_a'] == 'step2' && !empty($basket['conts'])) {
|
|
|
|
# if (empty($basket)) httpredir('?_g=co&_a=cart');
|
|
|
|
// Place Order Link
|
|
$view_cart->assign("CONT_VAL", "index.php?_g=co&_a=step3");
|
|
$view_cart->assign("CONT_VAL", ($_GET['editDel'] == 1) ? "javascript:submitDoc('cart');" : "index.php?_g=co&_a=step3");
|
|
|
|
$view_cart->assign("CLASS_CART","");
|
|
$view_cart->assign("CLASS_STEP2","class='txtcartProgressCurrent'");
|
|
$view_cart->assign("LANG_VIEW_CART",$lang['cart']['place_order_title']);
|
|
|
|
$view_cart->assign("LANG_INVOICE_ADDRESS",$lang['cart']['invoice_address']);
|
|
$view_cart->assign("LANG_DELIVERY_ADDRESS",$lang['cart']['delivery_address']);
|
|
|
|
$view_cart->assign("TXT_TITLE",$lang['cart']['title']);
|
|
$view_cart->assign("LANG_TITLE_DESC",$lang['reg']['title_desc']);
|
|
|
|
$view_cart->assign("TXT_FIRST_NAME",$lang['cart']['first_name']);
|
|
$view_cart->assign("TXT_LAST_NAME",$lang['cart']['last_name']);
|
|
$view_cart->assign("TXT_COMPANY_NAME",$lang['cart']['company_name']);
|
|
$view_cart->assign("TXT_ADD_1",$lang['cart']['address2']);
|
|
$view_cart->assign("TXT_ADD_2","");
|
|
$view_cart->assign("TXT_TOWN",$lang['cart']['town']);
|
|
$view_cart->assign("TXT_COUNTY",$lang['cart']['county']);
|
|
$view_cart->assign("TXT_POSTCODE",$lang['cart']['postcode']);
|
|
$view_cart->assign("TXT_COUNTRY",$lang['cart']['country']);
|
|
|
|
// PayPal EC make payment button
|
|
if (isset($_SESSION['token']) && isset($_SESSION['payer_id'])) {
|
|
$lang = getLang("includes".CC_DS."content".CC_DS."gateway.inc.php");
|
|
$view_cart->assign("LANG_CHECKOUT_BTN",$lang['gateway']['continue']);
|
|
} else {
|
|
$view_cart->assign("LANG_CHECKOUT_BTN",$lang['cart']['place_order']);
|
|
}
|
|
|
|
// stick in delivery details
|
|
if (!isset($basket['delInf']) || $config['shipAddressLock']) {
|
|
$iniDeliv['title'] = stripslashes(html_entity_decode($cc_session->ccUserData['title']));
|
|
$iniDeliv['firstName'] = stripslashes(html_entity_decode($cc_session->ccUserData['firstName']));
|
|
$iniDeliv['lastName'] = stripslashes(html_entity_decode($cc_session->ccUserData['lastName']));
|
|
$iniDeliv['companyName'] = stripslashes(html_entity_decode($cc_session->ccUserData['companyName']));
|
|
$iniDeliv['add_1'] = stripslashes(html_entity_decode($cc_session->ccUserData['add_1']));
|
|
$iniDeliv['add_2'] = stripslashes(html_entity_decode($cc_session->ccUserData['add_2']));
|
|
$iniDeliv['town'] = stripslashes(html_entity_decode($cc_session->ccUserData['town']));
|
|
$iniDeliv['county'] = stripslashes(html_entity_decode($cc_session->ccUserData['county']));
|
|
$iniDeliv['postcode'] = stripslashes(html_entity_decode($cc_session->ccUserData['postcode']));
|
|
$iniDeliv['country'] = stripslashes(html_entity_decode($cc_session->ccUserData['country']));
|
|
$basket = $cart->setVar($iniDeliv, 'delInf');
|
|
}
|
|
|
|
// stick in delivery details
|
|
$view_cart->assign("VAL_DEL_TITLE", stripslashes(html_entity_decode($basket['delInf']['title'])));
|
|
$view_cart->assign("VAL_DEL_FIRST_NAME",stripslashes(html_entity_decode($basket['delInf']['firstName'])));
|
|
$view_cart->assign("VAL_DEL_LAST_NAME",stripslashes(html_entity_decode($basket['delInf']['lastName'])));
|
|
$view_cart->assign("VAL_DEL_COMPANY_NAME",stripslashes(html_entity_decode($basket['delInf']['companyName'])));
|
|
$view_cart->assign("VAL_DEL_ADD_1",stripslashes(html_entity_decode($basket['delInf']['add_1'])));
|
|
$view_cart->assign("VAL_DEL_ADD_2",stripslashes(html_entity_decode($basket['delInf']['add_2'])));
|
|
$view_cart->assign("VAL_DEL_TOWN",stripslashes(html_entity_decode($basket['delInf']['town'])));
|
|
$view_cart->assign("VAL_DEL_COUNTY",stripslashes(html_entity_decode($basket['delInf']['county'])));
|
|
$view_cart->assign("VAL_DEL_POSTCODE",stripslashes(html_entity_decode($basket['delInf']['postcode'])));
|
|
$view_cart->assign("VAL_DEL_COUNTRY",getCountryFormat($basket['delInf']['country'],"id","printable_name"));
|
|
|
|
// stick in invoice details
|
|
$view_cart->assign("VAL_TITLE",stripslashes($cc_session->ccUserData['title']));
|
|
$view_cart->assign("VAL_FIRST_NAME",stripslashes($cc_session->ccUserData['firstName']));
|
|
$view_cart->assign("VAL_LAST_NAME",stripslashes($cc_session->ccUserData['lastName']));
|
|
$view_cart->assign("VAL_COMPANY_NAME",stripslashes($cc_session->ccUserData['companyName']));
|
|
$view_cart->assign("VAL_ADD_1",stripslashes($cc_session->ccUserData['add_1']));
|
|
$view_cart->assign("VAL_ADD_2",stripslashes($cc_session->ccUserData['add_2']));
|
|
$view_cart->assign("VAL_TOWN",stripslashes($cc_session->ccUserData['town']));
|
|
$view_cart->assign("VAL_COUNTY",stripslashes($cc_session->ccUserData['county']));
|
|
$view_cart->assign("VAL_POSTCODE",stripslashes($cc_session->ccUserData['postcode']));
|
|
$view_cart->assign("VAL_COUNTRY",getCountryFormat($cc_session->ccUserData['country'],"id","printable_name"));
|
|
|
|
$view_cart->assign("LANG_CHANGE_INV_ADD",$lang['cart']['edit_invoice_address']);
|
|
$view_cart->assign("VAL_BACK_TO", $current_a);
|
|
|
|
// start: Flexible Taxes, by Estelle Winterflood
|
|
// counties selector
|
|
|
|
if (isset($_GET['editDel']) && $_GET['editDel'] == true && !$config['shipAddressLock']) {
|
|
$jsScript = jsGeoLocationExtended('country', 'county_sel', $lang['cart']['na'], 'divCountySelect', 'divCountyText', 'county', 'which_field');
|
|
$counties = $db->select("SELECT * FROM ".$glob['dbprefix']."CubeCart_iso_counties WHERE countryId = '".$basket['delInf']['country']."';");
|
|
|
|
if (is_array($counties)){
|
|
$view_cart->assign("VAL_COUNTY_SEL_STYLE", "style='display:block;'");
|
|
$view_cart->assign("VAL_COUNTY_TXT_STYLE", "style='display:none;'");
|
|
$view_cart->assign("VAL_COUNTY_WHICH_FIELD", "S");
|
|
} else {
|
|
$view_cart->assign("VAL_COUNTY_SEL_STYLE", "style='display:none;'");
|
|
$view_cart->assign("VAL_COUNTY_TXT_STYLE", "style='display:block;'");
|
|
$view_cart->assign("VAL_COUNTY_WHICH_FIELD", 'T');
|
|
}
|
|
$view_cart->assign('JS_COUNTY_OPTIONS', '<script type="text/javascript">'.$jsScript.'</script>');
|
|
|
|
for ($i=0; $i<count($counties); $i++) {
|
|
if ($counties[$i]['name'] == $basket['delInf']['county']){
|
|
$view_cart->assign('COUNTY_SELECTED', 'selected="selected"');
|
|
} else {
|
|
$view_cart->assign('COUNTY_SELECTED', '');
|
|
}
|
|
|
|
$countyName = $counties[$i]['name'];
|
|
if (strlen($countyName)>20) $countyName = substr($countyName ,0, 20).'…';
|
|
|
|
$view_cart->assign('VAL_DEL_COUNTY_NAME', $countyName);
|
|
$view_cart->parse('view_cart.cart_true.edit_delivery.county_opts');
|
|
}
|
|
|
|
// end: Flexible Taxes
|
|
$cache = new cache('glob.countries');
|
|
$countries = $cache->readCache();
|
|
|
|
if (!$cache->cacheStatus) {
|
|
$countries = $db->select("SELECT id, printable_name FROM ".$glob['dbprefix']."CubeCart_iso_countries ORDER BY printable_name");
|
|
$cache->writeCache($countries);
|
|
}
|
|
|
|
for ($i=0; $i<count($countries); $i++) {
|
|
if ($countries[$i]['id'] == $basket['delInf']['country']) {
|
|
$view_cart->assign('COUNTRY_SELECTED', 'selected="selected"');
|
|
} else {
|
|
$view_cart->assign('COUNTRY_SELECTED', '');
|
|
}
|
|
$view_cart->assign("VAL_DEL_COUNTRY_ID",$countries[$i]['id']);
|
|
$countryName = $countries[$i]['printable_name'];
|
|
|
|
if (strlen($countryName)>20) {
|
|
$countryName = substr($countryName,0,20)."…";
|
|
}
|
|
|
|
$view_cart->assign('VAL_DEL_COUNTRY_NAME', $countryName);
|
|
$view_cart->parse('view_cart.cart_true.edit_delivery.country_opts');
|
|
}
|
|
$view_cart->parse('view_cart.cart_true.edit_delivery');
|
|
} else {
|
|
if (!$config['shipAddressLock']) {
|
|
$view_cart->assign('LANG_CHANGE_DEL_ADD', $lang['cart']['edit_delivery_address']);
|
|
$view_cart->parse('view_cart.cart_true.fixed_delivery.edit_btn');
|
|
}
|
|
$view_cart->parse("view_cart.cart_true.fixed_delivery");
|
|
}
|
|
}
|
|
|
|
## See if there are contents in the basket array
|
|
if ($basket['conts']) {
|
|
|
|
$tax = 0;
|
|
$taxCustomer = 0;
|
|
$taxZone = array();
|
|
|
|
// $config['priceTaxDelInv'] 0 = devivery address
|
|
// $config['priceTaxDelInv'] 1 = invoice address
|
|
//$countyDel = $db->select("SELECT `id` FROM ".$glob['dbprefix']."CubeCart_iso_counties WHERE `abbrev` = ".$db->MySQLSafe($basket['delInf']['county'])." AND `countryId` = ".$db->MySQLSafe($basket['delInf']['country']));
|
|
$countyDel = $db->select("SELECT `id` FROM ".$glob['dbprefix']."CubeCart_iso_counties WHERE (`abbrev` = ".$db->MySQLSafe($basket['delInf']['county'])." OR `name` = ".$db->MySQLSafe($basket['delInf']['county']).") AND `countryId` = ".$db->MySQLSafe($basket['delInf']['country']));
|
|
|
|
$countyInv = $db->select("SELECT `id` FROM ".$glob['dbprefix']."CubeCart_iso_counties WHERE `name` = ".$db->mySQLSafe($cc_session->ccUserData['county'])." AND `countryId` = ".$db->MySQLSafe($cc_session->ccUserData['country']));
|
|
|
|
if(!$config['priceIncTax']) { // Only tax customers if tax is enabled
|
|
|
|
if($config['priceTaxDelInv']==0 || $config['shipAddressLock'] == 1) {
|
|
// calculate tax on delivery address
|
|
$taxZone['countyId'] = $countyDel[0]['id'];
|
|
|
|
$taxZone['countryId'] = $basket['delInf']['country'];
|
|
|
|
} elseif($config['priceTaxDelInv']==1) {
|
|
// calculate tax on invoice address
|
|
$taxZone['countyId'] = $countyInv[0]['id'];
|
|
$taxZone['countryId'] = $cc_session->ccUserData['country'];
|
|
}
|
|
|
|
if ($taxZone['countryId']==$config['taxCountry']) {
|
|
if ($config['taxCounty']==0) {
|
|
// tax customer
|
|
$taxCustomer = 1;
|
|
} else if ($taxZone['countyId']==$config['taxCounty']) {
|
|
// tax customer
|
|
$taxCustomer = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
// start: Flexible Taxes, by Estelle Winterflood
|
|
if (!$config['priceIncTax'] && $config_tax_mod['status']) {
|
|
// get specific entries for this state, and also entries for this whole country (ie. county_id=0)
|
|
$query = "SELECT d.name AS name, taxName AS type_name, type_id, country_id, county_id, abbrev, tax_percent, goods, shipping, display FROM ".$glob['dbprefix']."CubeCart_taxes AS t, ".$glob['dbprefix']."CubeCart_tax_rates AS r LEFT JOIN ".$glob['dbprefix']."CubeCart_tax_details AS d ON r.details_id=d.id LEFT JOIN ".$glob['dbprefix']."CubeCart_iso_counties AS c ON c.id=county_id WHERE r.type_id=t.id AND d.status='1' AND r.active='1' AND country_id='".$taxZone['countryId']."' AND (county_id='0' OR (county_id = '".$taxZone['countyId']."'))";
|
|
|
|
// "Testing" mode info display
|
|
if ($config_tax_mod['debug']) {
|
|
echo "<div style=\"border: 1px solid grey; background: white; text: black; margin-bottom: 1em; padding: 0.5em 1em; font-family: verdana; font-size: 11px;\">";
|
|
echo "<p>This information is being printed because the taxes is in "Testing Configuration" mode.<br/>Please use this information to ensure you have your taxes configured correctly, then set the Flexible Taxes mod to "Live Store" mode.</p>";
|
|
echo "<p><strong>Customer Delivery Location:</strong><br/>";
|
|
if (empty($basket['delInf']['county'])) {
|
|
$state_id = "n/a";
|
|
} else {
|
|
$state_id = $taxZone['countyId'];
|
|
}
|
|
echo "Country id [".$taxZone['countryId']."] State/County/Zone ID [".$state_id."]</p>";
|
|
}
|
|
|
|
$taxes_config = $db->select($query);
|
|
|
|
$taxes = array();
|
|
|
|
// is there any possibility of taxing this delivery address?
|
|
if (is_array($taxes_config)){
|
|
if ($config_tax_mod['debug'])
|
|
echo "<p><strong>Taxes which affect this customer:</strong><br/>";
|
|
|
|
for ($i=0; $i<count($taxes_config); $i++){
|
|
$tax_config = $taxes_config[$i];
|
|
|
|
// "Testing" mode info display
|
|
if ($config_tax_mod['debug']) {
|
|
if ($tax_config['abbrev']=="") {
|
|
$state_abbrev = "--all--";
|
|
} else {
|
|
$state_abbrev = $tax_config['abbrev'];
|
|
}
|
|
echo "Tax [".$tax_config['name']."] Class [".$tax_config['type_name']."] Country ID [".$tax_config['country_id']."] State/County/Zone [".$state_abbrev."] Rate [".number_format($tax_config['tax_percent'],2)." %]<br/>";
|
|
}
|
|
|
|
// Prepare array to hold tax name/display/amount
|
|
// The tax_config array may contain multiple occurances
|
|
// of the same tax if there are multiple tax classes
|
|
$setup = false;
|
|
for ($j=0; $j<count($taxes); $j++){
|
|
if ($taxes[$j]['name'] == $tax_config['name'])
|
|
$setup = true;
|
|
}
|
|
if (!$setup){
|
|
$idx = count($taxes);
|
|
$taxes[$idx]['name'] = $tax_config['name'];
|
|
$taxes[$idx]['display'] = $tax_config['display'].":";
|
|
$taxes[$idx]['amount'] = 0;
|
|
}
|
|
}
|
|
|
|
$taxCustomer = 1;
|
|
|
|
if ($config_tax_mod['debug'])
|
|
echo "</p>";
|
|
}
|
|
// "Testing" mode info display
|
|
elseif ($config_tax_mod['debug']) {
|
|
echo "<p><strong>No taxes active/enabled for this location.</strong></p>";
|
|
}
|
|
}
|
|
|
|
// end: Flexible Taxes
|
|
|
|
$totalWeight = "";
|
|
$i = 0;
|
|
$subTotal = 0;
|
|
$shipCost = 0;
|
|
$grandTotal = 0;
|
|
$discount = 0;
|
|
|
|
##########################
|
|
## START PRODUCTS LOOP ##
|
|
##########################
|
|
|
|
## Start discounts
|
|
if ($basket['discount_percent']>0) {
|
|
$discount_percent = $basket['discount_percent'];
|
|
|
|
} else if ($basket['discount_price']>0) {
|
|
$discount_remainder = $basket['discount_price'];
|
|
}
|
|
|
|
foreach($basket['conts'] as $key => $value){
|
|
|
|
$i++;
|
|
$linePrice = 0; // line price for basket
|
|
$optionsCost = 0; // product options cost
|
|
$plainOpts = ''; // options as plain text
|
|
|
|
|
|
// fetch shipping by category module
|
|
$module = fetchDbConfig("Per_Category");
|
|
$shipByCat = $module['status'];
|
|
|
|
$extraJoin = "";
|
|
|
|
if ($shipByCat==1) {
|
|
$extraJoin = "INNER JOIN ".$glob['dbprefix']."CubeCart_category AS C ON I.cat_id = C.cat_id";
|
|
}
|
|
|
|
## Check for custom basket data e.g Gift Certificates
|
|
if ($basket['conts'][$key]['custom'] == 1) {
|
|
|
|
$gc = fetchDbConfig('gift_certs');
|
|
|
|
$product[0]['productId'] = 0;
|
|
$product[0]['productCode'] = $gc['productCode'];
|
|
$product[0]['quantity'] = $basket['conts'][$key]['quantity'];
|
|
$product[0]['price'] = $basket['conts'][$key]['gcInfo']['amount'];
|
|
$product[0]['name'] = $lang['cart']['gift_cert'];
|
|
$product[0]['image'] = $GLOBALS['rootRel'].'images/general/giftcert.gif';
|
|
$product[0]['cat_id'] = 0;
|
|
$product[0]['sale_price'] = 0;
|
|
$product[0]['stock_level'] = 0;
|
|
$product[0]['useStockLevel']= 0;
|
|
$product[0]['digital'] = (strtolower($basket['conts'][$key]['gcInfo']['delivery']) == 'm') ? false : true;
|
|
$product[0]['prodWeight'] = ($gc['delivery']=="e") ? 0 : $gc['weight'];
|
|
$product[0]['taxType'] = $gc['taxType'];
|
|
$product[0]['tax_inclusive']= ($gc['tax']) ? true : false;
|
|
$product[0]['giftCert'] = true;
|
|
|
|
// START PSEUDO PRODUCT OPTS
|
|
$view_cart->assign("VAL_OPT_NAME",$lang['cart']['gift_cert_recip_name']);
|
|
$view_cart->assign("VAL_OPT_VALUE",$basket['conts'][$key]['gcInfo']['recipName']);
|
|
|
|
$plainOpts .= $lang['cart']['gift_cert_recip_name']." - ".$basket['conts'][$key]['gcInfo']['recipName']."\r\n";
|
|
$view_cart->parse("view_cart.cart_true.repeat_cart_contents.options");
|
|
|
|
$view_cart->assign("VAL_OPT_NAME",$lang['cart']['gift_cert_recip_email']);
|
|
$view_cart->assign("VAL_OPT_VALUE",$basket['conts'][$key]['gcInfo']['recipEmail']);
|
|
|
|
$plainOpts .= $lang['cart']['gift_cert_recip_email']." - ".$basket['conts'][$key]['gcInfo']['recipEmail']."\r\n";
|
|
$view_cart->parse("view_cart.cart_true.repeat_cart_contents.options");
|
|
|
|
$view_cart->assign("VAL_OPT_NAME",$lang['cart']['gift_cert_recip_message']);
|
|
|
|
$gcMessage = $basket['conts'][$key]['gcInfo']['message'];
|
|
|
|
if (strlen($gcMessage) > 30) $gcMessage = substr($gcMessage, 0, 30).'…';
|
|
|
|
$view_cart->assign("VAL_OPT_VALUE", $gcMessage);
|
|
|
|
$plainOpts .= $lang['cart']['gift_cert_recip_message']." - ".$basket['conts'][$key]['gcInfo']['message']."\r\n";
|
|
$view_cart->parse("view_cart.cart_true.repeat_cart_contents.options");
|
|
|
|
$view_cart->assign("VAL_OPT_NAME",$lang['cart']['gift_cert_delivery']);
|
|
$view_cart->assign("VAL_OPT_VALUE",$lang['cart']['delivery_method_'.$basket['conts'][$key]['gcInfo']['delivery']]);
|
|
|
|
$plainOpts .= $lang['cart']['gift_cert_delivery']." - ".$lang['cart']['delivery_method_'.$basket['conts'][$key]['gcInfo']['delivery']]."\r\n";
|
|
$view_cart->parse("view_cart.cart_true.repeat_cart_contents.options");
|
|
|
|
// END PSEUDO PRODUCT OPTS
|
|
} else {
|
|
|
|
$productId = $cart->getProductId($key);
|
|
$product = $db->select("SELECT * FROM ".$glob['dbprefix']."CubeCart_inventory AS I INNER JOIN ".$glob['dbprefix']."CubeCart_taxes AS T ON T.id = taxType ".$extraJoin." WHERE I.productId=".$db->mySQLSafe($productId));
|
|
|
|
// FIX FOR DELETED TAX BANDS PRE 3.0.5
|
|
if (!$product) {
|
|
$product = $db->select("SELECT * FROM ".$glob['dbprefix']."CubeCart_inventory WHERE productId=".$db->mySQLSafe($productId));
|
|
$product[0]['percent'] = 0;
|
|
}
|
|
if (($val = prodAltLang($product[0]['productId'])) == TRUE) {
|
|
$product[0]['name'] = $val['name'];
|
|
}
|
|
}
|
|
|
|
$view_cart->assign("TD_CART_CLASS",cellColor($i, 'tdcartEven', 'tdcartOdd'));
|
|
$view_cart->assign("VAL_PRODUCT_ID",$productId);
|
|
$view_cart->assign("VAL_CURRENT_STEP",$current_a);
|
|
$view_cart->assign("VAL_PRODUCT_KEY", md5($key));
|
|
|
|
if ($product[0]['giftCert'] === true) {
|
|
$view_cart->assign('VAL_IMG_SRC', imgPath($product[0]['image'], false, ''));
|
|
} else {
|
|
if (file_exists(imgPath($product[0]['image'], true, 'root')) && !empty($product[0]['image'])) {
|
|
$view_cart->assign('VAL_IMG_SRC', imgPath($product[0]["image"], true, 'rel'));
|
|
} else {
|
|
$view_cart->assign('VAL_IMG_SRC', 'skins/'. SKIN_FOLDER . '/styleImages/thumb_nophoto.gif');
|
|
}
|
|
}
|
|
|
|
## Only calculate shipping IF the product is tangible
|
|
if (!$product[0]['digital']) {
|
|
$orderTangible = true;
|
|
}
|
|
|
|
$view_cart->assign("VAL_PRODUCT_NAME", validHTML($product[0]["name"]));
|
|
$view_cart->assign("VAL_PRODUCT_CODE", $product[0]["productCode"]);
|
|
|
|
## Build the product options
|
|
$optionKeys = $cart->getOptions($key);
|
|
|
|
if (!empty($optionKeys)) {
|
|
$options = explode('|', $optionKeys);
|
|
|
|
foreach ($options as $value) {
|
|
## Split on separator
|
|
$value_data = explode('@', $value);
|
|
## Get Option Data
|
|
$option_name = false;
|
|
$option_value = false;
|
|
$option_top = $db->select(sprintf("SELECT T.* FROM %1\$sCubeCart_options_top AS T WHERE T.option_id = %2\$s", $glob['dbprefix'], $value_data[0]));
|
|
if ($option_top) {
|
|
$option_name = $option_top[0]['option_name'];
|
|
if ($option_top[0]['option_type'] == 0) {
|
|
$option = $db->select(sprintf("SELECT M.*, B.* FROM %1\$sCubeCart_options_mid AS M, %1\$sCubeCart_options_bot AS B WHERE M.value_id = B.value_id AND B.assign_id = %2\$d", $glob['dbprefix'], $value_data[1]));
|
|
if ($option) {
|
|
$option_price = $option[0]['option_price'];
|
|
$option_symbol = $option[0]['option_symbol'];
|
|
$option_value = $option[0]['value_name'];
|
|
}
|
|
} else {
|
|
$option = $db->select(sprintf("SELECT B.* FROM %1\$sCubeCart_options_bot AS B WHERE B.option_id = %2\$d AND B.product = %3\$d LIMIT 1", $glob['dbprefix'], $value_data[0], $productId));
|
|
if ($option) {
|
|
$option_price = $option[0]['option_price'];
|
|
$option_symbol = $option[0]['option_symbol'];
|
|
$option_value = $value_data[1];
|
|
}
|
|
}
|
|
}
|
|
if (!empty($option_value) && !empty($option_name)) {
|
|
## Assign values
|
|
$view_cart->assign('VAL_OPT_NAME', validHTML($option_name));
|
|
$view_cart->assign('VAL_OPT_VALUE', htmlentities(strip_tags($option_value), ENT_QUOTES, 'UTF-8'));
|
|
|
|
$plainOpts .= $option_name.' - '.$option_value."\r\n";
|
|
|
|
if ($option_price > 0) {
|
|
if ($option_symbol == "+") {
|
|
$optionsCost = $optionsCost + $option_price;
|
|
} else if ($option_symbol == "-") {
|
|
$optionsCost = $optionsCost - $option_price;
|
|
} else if ($option_symbol == "~") {
|
|
$optionsCost = 0;
|
|
}
|
|
}
|
|
$view_cart->parse('view_cart.cart_true.repeat_cart_contents.options');
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($product[0]['useStockLevel'] && $config['stockLevel']){
|
|
$view_cart->assign('VAL_INSTOCK', $product[0]['stock_level']);
|
|
} else {
|
|
$view_cart->assign('VAL_INSTOCK', '∞');
|
|
}
|
|
|
|
if (($config['outofstockPurchase']) && ($product[0]["stock_level"]<$cart->cartArray['conts'][$key]["quantity"]) && ($product[0]['useStockLevel'])) {
|
|
$view_cart->assign("VAL_STOCK_WARN",$lang['cart']['stock_warn']);
|
|
|
|
$quantity = $cart->cartArray['conts'][$key]["quantity"];
|
|
$view_cart->parse("view_cart.repeat_cart_contents.stock_warn");
|
|
|
|
} else if ((!$config['outofstockPurchase']) && ($product[0]["stock_level"]<$cart->cartArray['conts'][$key]["quantity"]) && ($product[0]['useStockLevel'])) {
|
|
|
|
$view_cart->assign("VAL_STOCK_WARN",$lang['cart']['amount_capped']." ".$product[0]["stock_level"].".");
|
|
$quantity = $product[0]["stock_level"];
|
|
$basket = $cart->update($key, $quantity);
|
|
$view_cart->parse("view_cart.cart_true.repeat_cart_contents.stock_warn");
|
|
} else {
|
|
$quantity = $cart->cartArray['conts'][$key]["quantity"];
|
|
}
|
|
$view_cart->assign("VAL_QUANTITY", $quantity);
|
|
|
|
if ($basket['conts'][$key]['custom']==1 || !salePrice($product[0]['price'], $product[0]['sale_price'])) {
|
|
$price = $product[0]['price'];
|
|
} else {
|
|
$price = salePrice($product[0]['price'], $product[0]['sale_price']);
|
|
}
|
|
|
|
$price = ($price+$optionsCost < 0) ? 0 : $price+($optionsCost);
|
|
|
|
if (!$basket['conts'][$key]['custom']) {
|
|
$altCheckoutInv[$i]['taxType'] = $product[0]['taxType'];
|
|
$altCheckoutInv[$i]['name'] = $product[0]['name'];
|
|
$altCheckoutInv[$i]['options'] = $plainOpts;
|
|
$altCheckoutInv[$i]['quantity'] = $quantity;
|
|
|
|
if($product[0]['tax_inclusive'] == true) {
|
|
$altCheckoutInv[$i]['price'] = sprintf("%.2f",$price / (($product[0]['percent'] / 100) +1));
|
|
$altCheckoutInv[$i]['priceIncTax'] = sprintf("%.2f",$price);
|
|
} else {
|
|
$altCheckoutInv[$i]['price'] = sprintf("%.2f",$price);
|
|
}
|
|
|
|
## Private data
|
|
$altCheckoutInv[$i]['private_data']['digital'] = $product[0]['digital'];
|
|
$altCheckoutInv[$i]['private_data']['productcode'] = $product[0]['productCode'];
|
|
$altCheckoutInv[$i]['private_data']['productid'] = $productId;
|
|
} else {
|
|
## Alternative checkout can only be used for tangible goods right now
|
|
$customWarn = true;
|
|
}
|
|
|
|
$linePrice = $price * $quantity;
|
|
|
|
// set live vars for order inv and its the last step
|
|
$basket = $cart->setVar($productId,"productId","invArray",$i);
|
|
$basket = $cart->setVar($product[0]['name'],"name","invArray",$i);
|
|
$basket = $cart->setVar($product[0]['productCode'],"productCode","invArray",$i);
|
|
$basket = $cart->setVar($plainOpts, "prodOptions", "invArray", $i);
|
|
$basket = $cart->setVar(sprintf("%.2f",$linePrice),"price","invArray",$i);
|
|
$basket = $cart->setVar($quantity,"quantity","invArray",$i);
|
|
$basket = $cart->setVar($product[0]['digital'],"digital","invArray",$i);
|
|
|
|
if ($basket['conts'][$key]['custom'] == 1) {
|
|
$basket = $cart->setVar(serialize($basket['conts'][$key]['gcInfo']),"custom","invArray",$i);
|
|
$view_cart->parse("view_cart.cart_true.repeat_cart_contents.quanDisabled");
|
|
} else {
|
|
$view_cart->parse("view_cart.cart_true.repeat_cart_contents.quanEnabled");
|
|
}
|
|
|
|
$view_cart->assign("VAL_IND_PRICE", priceFormat($price, true));
|
|
$view_cart->assign("VAL_LINE_PRICE", priceFormat($linePrice, true));
|
|
|
|
if ($shipByCat) {
|
|
## Calculate the line category shipping price
|
|
require CC_ROOT_DIR.CC_DS."modules".CC_DS."shipping".CC_DS."Per_Category".CC_DS."line.inc.php";
|
|
}
|
|
|
|
## Apply discounts
|
|
$itemDiscount = 0;
|
|
if (isset($discount_percent) && $discount_percent > 0 && !$product[0]['giftCert']) {
|
|
## Percentile discounts
|
|
$itemDiscount = $linePrice*($discount_percent/100);
|
|
$totalDiscount += $linePrice*($discount_percent/100);
|
|
|
|
} else if (isset($discount_remainder) && $discount_remainder > 0 && !$product[0]['giftCert']) {
|
|
## Fixed value discounts
|
|
if ($discount_remainder <= $linePrice) {
|
|
$discount = $discount_remainder;
|
|
$discount_remainder = 0;
|
|
} else if ($discount_remainder > $linePrice) {
|
|
$discount = $linePrice;
|
|
$discount_remainder = $discount_remainder - $discount;
|
|
}
|
|
|
|
if ($discount > 0) {
|
|
$totalDiscount += $discount;
|
|
$itemDiscount = $discount;
|
|
$discount = 0;
|
|
}
|
|
}
|
|
$linePrice -= $itemDiscount;
|
|
|
|
## Calculate weight
|
|
//if ($product[0]['prodWeight']>0 && !$product[0]['digital']) {
|
|
if ($product[0]['prodWeight']>0) {
|
|
$totalWeight = ($product[0]['prodWeight'] * $quantity) + $totalWeight;
|
|
}
|
|
|
|
## Calculate tax
|
|
if ($taxCustomer) {
|
|
// start: Flexible Taxes, by Estelle Winterflood
|
|
// calculate Tax on Goods
|
|
if ($config_tax_mod['status']) {
|
|
for ($j=0; is_array($taxes_config) && $j<count($taxes_config); $j++) {
|
|
$tax_config = $taxes_config[$j];
|
|
if ($tax_config['type_id'] == $product[0]['taxType']) {
|
|
// tax on goods
|
|
if ($tax_config['goods']) {
|
|
|
|
$lineTax = getTax($linePrice, ($product[0]['tax_inclusive']) ? false : true, $tax_config['tax_percent']);
|
|
|
|
for ($k=0; $k<count($taxes); $k++){
|
|
if ($taxes[$k]['name'] == $tax_config['name']){
|
|
// "Testing" mode info display
|
|
if ($config_tax_mod['debug']) {
|
|
if (!isset($debug)) $debug = '';
|
|
$debug .= "Item ".$i." [".$product[0]['name']."] [".$product[0]['taxName']."] [".$quantity." x ".priceFormat($price, true)."] --- Tax [".$taxes[$k]['name']."] [".$tax_config['type_name']."] [".number_format($tax_config['tax_percent'],2)." %] --- ".priceFormat($lineTax,TRUE)."<br/>";
|
|
}
|
|
$taxes[$k]['amount'] += $lineTax;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
## end: Flexible Taxes
|
|
} else if (!$config['priceIncTax']) {
|
|
$tax += getTax($linePrice, ($product[0]['tax_inclusive']) ? false : true, $product[0]['percent']);
|
|
}
|
|
}
|
|
$subTotal += $linePrice;
|
|
$view_cart->parse("view_cart.cart_true.repeat_cart_contents");
|
|
}
|
|
|
|
## Deduct the total discount from the subtotal - Fixes bug report #705
|
|
//$subTotal -= $totalDiscount;
|
|
|
|
## Work out discount on price if any - OLD CODE, left for reference
|
|
/*
|
|
if ($basket['discount_percent']>0) {
|
|
if ($basket['discount_percent'] > 100) $basket['discount_percent'] = 100;
|
|
$totalDiscount = ($basket['discount_percent']/100) * $subTotal;
|
|
$subTotal = $subTotal - $totalDiscount;
|
|
|
|
} else if ($basket['discount_price']>0) {
|
|
if (isset($discountRemainder) && $discountRemainder>0) {
|
|
$lineDiscount = $discountRemainder;
|
|
} else if (!isset($discountRemainder)) {
|
|
$lineDiscount = $basket['discount_price'];
|
|
}
|
|
if ($lineDiscount<$linePrice) {
|
|
$discount = $lineDiscount;
|
|
} else {
|
|
$discount = $linePrice;
|
|
$discountRemainder = $lineDiscount - $discount;
|
|
}
|
|
|
|
$totalDiscount = $discount;
|
|
$subTotal -= $totalDiscount;
|
|
|
|
} else {
|
|
$discount = 0;
|
|
}
|
|
*/
|
|
|
|
// start: Flexible Taxes, by Estelle Winterflood
|
|
if ($config_tax_mod['status'] && is_array($taxes_config) && $config_tax_mod['debug']){
|
|
echo "<p><strong>Tax applied to goods:</strong><br/>".$debug."</p>";
|
|
}
|
|
// end: Flexible Taxes
|
|
|
|
// calculate shipping when we have reached step2
|
|
if ($_GET['_a'] == 'step2' && $orderTangible) {
|
|
|
|
$shippingModules = $db->select("SELECT DISTINCT `folder` FROM ".$glob['dbprefix']."CubeCart_Modules WHERE module='shipping' AND status = 1");
|
|
|
|
$noItems = $cart->noItems();
|
|
$sum = 0;
|
|
|
|
if (is_array($shippingModules) && !empty($shippingModules)) {
|
|
// if selected key has not been set, set it
|
|
if (!isset($basket['shipKey'])) $basket = $cart->setVar(1, 'shipKey');
|
|
|
|
foreach ($shippingModules as $shippingModule) {
|
|
$shippingCalcPath = 'modules'.CC_DS.'shipping'.CC_DS.$shippingModule['folder'].CC_DS.'calc.php';
|
|
if (file_exists($shippingCalcPath)) {
|
|
include($shippingCalcPath);
|
|
}
|
|
}
|
|
|
|
#:convict:# Shipping cost from lowest to highest >>
|
|
$Shipping = array();
|
|
foreach ($shipArray as $shipMethod) {
|
|
if (!empty($shipMethod) && is_array($shipMethod)) {
|
|
foreach ($shipMethod as $shipDetails) {
|
|
$Shipping[] = $shipDetails;
|
|
}
|
|
}
|
|
}
|
|
function cmp($a, $b) { $b=floatval($b['value']); $a=floatval($a['value']); return $a<$b ? -1 : ($a>$b ? 1 : 0); }
|
|
usort($Shipping, "cmp");
|
|
$shipKey = 0;
|
|
foreach ($Shipping as $shipDetails) {
|
|
$shipKey++;
|
|
if ($shipKey == $basket['shipKey']) {
|
|
$selected = ' selected="selected"';
|
|
|
|
$basket = $cart->setVar($shipDetails['method'], 'shipMethod');
|
|
$basket = $cart->setVar(sprintf("%.2f", $shipDetails['value']), 'shipCost');
|
|
|
|
$shippingTaxId = $shipDetails['taxId'];
|
|
$shippingTaxAmount = $shipDetails['taxAmount'];
|
|
} else {
|
|
$selected = '';
|
|
}
|
|
$shippingPrice[] = '<option value="'.$shipKey.'"'.$selected.'>'.$shipDetails['desc'].'</option>';
|
|
}
|
|
|
|
if (is_array($shippingPrice)) {
|
|
$shippingPrice = '<select class="textbox" style="width: 150px" id="shipping-select" name="shipKey" onchange="submitDoc(\'cart\');">'.implode("\n", $shippingPrice).'</select>';
|
|
}
|
|
|
|
## if no shipping method is available go to error page
|
|
if (!$shipKey) httpredir('index.php?_g=co&_a=error&code=10001');
|
|
|
|
## if shipping key is greater than those available set to 1, and redirect
|
|
if ($basket['shipKey']>$shipKey) {
|
|
$cart->setVar(1, 'shipKey');
|
|
$basket = $cart->setVar(0.00, 'shipCost');
|
|
httpredir('index.php?_g=co&_a=step2') or die('help');
|
|
}
|
|
|
|
} else {
|
|
$shippingPrice .= priceFormat(0, true);
|
|
$basket = $cart->setVar($lang['cart']['free_shipping'], 'shipMethod');
|
|
$basket = $cart->setVar(0.00, 'shipCost');
|
|
}
|
|
} else {
|
|
$shippingPrice = $lang['cart']['na'];
|
|
## set shipping cost to 0.00 just incase
|
|
$basket = $cart->setVar(0.00, 'shipCost');
|
|
}
|
|
|
|
|
|
|
|
## If the voucher is a gift certificate, we'll let them use it to discount shipping
|
|
if ($basket['code_is_purchased'] && $totalDiscount < $basket['discount_price']) {
|
|
$shippingCost = (is_numeric($shippingPrice)) ? $shippingPrice : $basket['shipCost'];
|
|
|
|
if ($discount_remainder <= $basket['shipCost']) {
|
|
$shippingCost -= $discount_remainder;
|
|
$totalDiscount = $basket['discount_price'];
|
|
$basket = $cart->setVar(sprintf('%.2f', $shippingCost), 'shipCost');
|
|
|
|
} else if ($discount_remainder > $basket['shipCost']) {
|
|
$totalDiscount += $basket['shipCost'];
|
|
$basket = $cart->setVar(0.00, 'shipCost');
|
|
}
|
|
}
|
|
|
|
// start: Flexible Taxes, by Estelle Winterflood
|
|
// calculate tax on shipping
|
|
if ($taxCustomer && $config_tax_mod['status']) {
|
|
|
|
if ($config_tax_mod['debug'] && is_array($taxes_config))
|
|
echo "<p><strong>Tax applied to shipping & handling:</strong><br/>";
|
|
|
|
for ($i=0; is_array($taxes_config) && $i<count($taxes_config); $i++){
|
|
$tax_config = $taxes_config[$i];
|
|
if ($tax_config['type_id'] == $shippingTaxId){
|
|
// tax on shipping
|
|
|
|
if ($tax_config['shipping']) {
|
|
$lineTax = getTax($basket['shipCost'], true, $tax_config['tax_percent']);
|
|
for ($j=0; $j<count($taxes); $j++){
|
|
if ($taxes[$j]['name'] == $tax_config['name']){
|
|
// "Testing" mode info display
|
|
if ($config_tax_mod['debug']) {
|
|
echo "Method [".$folder."] [".$tax_config['type_name']."] [".priceFormat($basket['shipCost'], true)."] --- Tax [".$taxes[$j]['name']."] [".$tax_config['type_name']."] [".number_format($tax_config['tax_percent'],2)." %] --- ".priceFormat($lineTax,TRUE)."<br />";
|
|
}
|
|
$taxes[$j]['amount'] += $lineTax;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if ($config_tax_mod['debug'] && is_array($taxes_config))
|
|
|
|
echo "</p>";
|
|
} elseif($taxCustomer) { ## claculate basic tax on shipping
|
|
$tax += $shippingTaxAmount;
|
|
}
|
|
if ($config_tax_mod['status'] && $config_tax_mod['debug']){
|
|
## "Testing" mode info display
|
|
echo "</div>";
|
|
}
|
|
## end: Flexible Taxes
|
|
|
|
$view_cart->assign("LANG_SHIPPING", $lang['cart']['shipping']);
|
|
|
|
$view_cart->assign("VAL_SHIPPING", $shippingPrice);
|
|
|
|
// start: Flexible Taxes, by Estelle Winterflood
|
|
// display taxes
|
|
if ($config_tax_mod['status']){
|
|
if (count($taxes)==0){
|
|
$view_cart->assign("LANG_TAX",$lang['cart']['tax']);
|
|
$view_cart->assign("VAL_TAX",$lang['cart']['na']);
|
|
} else {
|
|
// any additional taxes
|
|
for ($i=1; $i<count($taxes); $i++) {
|
|
$view_cart->assign("LANG_TAX",$taxes[$i]['display']);
|
|
$view_cart->assign("VAL_TAX",priceFormat($taxes[$i]['amount'],TRUE));
|
|
$view_cart->parse("view_cart.cart_true.repeat_more_taxes");
|
|
}
|
|
|
|
// first tax
|
|
$view_cart->assign("LANG_TAX",$taxes[0]['display']);
|
|
$view_cart->assign("VAL_TAX",priceFormat($taxes[0]['amount'],TRUE));
|
|
}
|
|
|
|
// tax registration number(s)
|
|
$reg_number = $db->select("SELECT reg_number FROM ".$glob['dbprefix']."CubeCart_tax_details;");
|
|
$reg_string = "";
|
|
for ($i=0; is_array($reg_number) && $i<count($reg_number); $i++) {
|
|
if (strlen($reg_string) && $reg_number[$i]['reg_number']!="")
|
|
{
|
|
$reg_string .= "<br/>";
|
|
}
|
|
$reg_string .= $reg_number[$i]['reg_number'];
|
|
}
|
|
$view_cart->assign("VAL_TAX_REG",$reg_string);
|
|
// end: Flexible Taxes
|
|
} else {
|
|
$view_cart->assign("LANG_TAX",$lang['cart']['tax']);
|
|
if($tax>0) {
|
|
$view_cart->assign("VAL_TAX",priceFormat($tax,TRUE));
|
|
} else {
|
|
$view_cart->assign("VAL_TAX",$lang['cart']['na']);
|
|
}
|
|
}
|
|
|
|
## Work out if the Gift Certificate has any discount left
|
|
if ($basket['code_is_purchased'] == true && $totalDiscount <= $basket['discount_price']) {
|
|
$couponRemainder = $basket['discount_price'] - $totalDiscount;
|
|
$basket = $cart->setVar(sprintf("%.2f", $couponRemainder),"code_remainder");
|
|
|
|
## Update coupon so that it can be used again with remainder, if there is any
|
|
if ($couponRemainder > 0) {
|
|
$giftRecord['discount_price'] = $db->mySQLSafe(sprintf("%.2f", $couponRemainder));
|
|
} else {
|
|
$giftRecord = array(
|
|
'discount_price' => 0,
|
|
'allowed_uses' => 0,
|
|
'count' => 1,
|
|
);
|
|
}
|
|
$basket = $cart->setVar(sprintf("%.2f",$couponRemainder),"code_remainder");
|
|
|
|
$where = 'code = '.$db->mySQLSafe($basket['code']);
|
|
$update = $db->update($glob['dbprefix'].'CubeCart_Coupons', $giftRecord, $where);
|
|
}
|
|
|
|
$basket = $cart->setVar($totalDiscount, "discount");
|
|
$view_cart->assign("LANG_DISCOUNT",$lang['cart']['discount']);
|
|
// set discount to return value if null
|
|
if(empty($basket['discount']) || !isset($basket['discount'])) {
|
|
$basket['discount'] = 0;
|
|
}
|
|
$view_cart->assign("VAL_DISCOUNT", priceFormat($basket['discount'], true));
|
|
|
|
$view_cart->assign("LANG_SUBTOTAL", $lang['cart']['subtotal']);
|
|
$view_cart->assign("VAL_SUBTOTAL", priceFormat($subTotal, true));
|
|
|
|
if($totalWeight>0){
|
|
$view_cart->assign("LANG_BASKET_WEIGHT",$lang['cart']['basket_weight']);
|
|
$view_cart->assign("VAL_BASKET_WEIGHT",$totalWeight.$config['weightUnit']);
|
|
}
|
|
|
|
// start: Flexible Taxes, by Estelle Winterflood
|
|
// grand total
|
|
if ($config_tax_mod['status']) {
|
|
$tax = 0;
|
|
for ($i=0; is_array($taxes) && $i<count($taxes); $i++) {
|
|
$tax += $taxes[$i]['amount'];
|
|
}
|
|
$grandTotal = $subTotal + $tax + $basket['shipCost'];
|
|
}
|
|
// end: Flexible Taxes
|
|
else {
|
|
$grandTotal = $subTotal + $tax + $basket['shipCost'];
|
|
}
|
|
|
|
|
|
$view_cart->assign("LANG_CART_TOTAL",$lang['cart']['cart_total']);
|
|
$view_cart->assign("VAL_CART_TOTAL",priceFormat($grandTotal, true));
|
|
|
|
if (isset($basket['codeResult'])) {
|
|
if (!$basket['codeResult']) {
|
|
# add remove link
|
|
$view_cart->assign("LANG_CODE_REMOVE",$lang['cart']['coupon_remove']);
|
|
$view_cart->assign("VAL_OLD_CODE",base64_encode($basket['code']));
|
|
$view_cart->assign("VAL_CURRENT_PAGE",currentPage());
|
|
$view_cart->parse("view_cart.cart_true.coupon_code_result.remove");
|
|
}
|
|
$view_cart->assign("LANG_CODE_RESULT",$lang['cart']['coupon_result_'.$basket['codeResult']]);
|
|
$view_cart->parse("view_cart.cart_true.coupon_code_result");
|
|
|
|
}
|
|
|
|
if (!isset($basket['codeResult']) || $basket['codeResult']>0) {
|
|
$view_cart->assign("LANG_GOT_CODE", $lang['cart']['got_code']);
|
|
$view_cart->assign("LANG_ENTER_CODE", $lang['cart']['enter_code']);
|
|
$view_cart->parse("view_cart.cart_true.enter_coupon_code");
|
|
$basket = $cart->unsetVar("codeResult");
|
|
}
|
|
|
|
// build array of price vars in session data
|
|
$basket = $cart->setVar(sprintf("%.2f",$subTotal),"subTotal");
|
|
$basket = $cart->setVar(sprintf("%.2f",$tax),"tax");
|
|
$basket = $cart->setVar(sprintf("%.2f",$grandTotal),"grandTotal");
|
|
// start: Flexible Taxes, by Estelle Winterflood
|
|
// leave "tax" in session data as the total tax
|
|
// define a new array to hold the individual tax names/amounts
|
|
if ($config_tax_mod['status']) {
|
|
for ($i=1; $i<=count($taxes); $i++) {
|
|
$basket = $cart->setVar($taxes[$i-1]['display'],'tax'.$i.'_disp');
|
|
$basket = $cart->setVar(sprintf("%.2f",$taxes[$i-1]['amount']),'tax'.$i.'_amt');
|
|
}
|
|
|
|
}
|
|
// end: Flexible Taxes
|
|
|
|
$view_cart->assign("LANG_UPDATE_CART_DESC",$lang['cart']['if_changed_quan']);
|
|
|
|
$view_cart->assign("LANG_UPDATE_CART",$lang['cart']['update_cart']);
|
|
|
|
$view_cart->assign("LANG_CHECKOUT",$lang['cart']['checkout']);
|
|
// see if passports are enabled
|
|
$altCheckout = $db->select("SELECT `folder`, `default` FROM `".$glob['dbprefix']."CubeCart_Modules` WHERE `module`='altCheckout' AND `status` = 1");
|
|
|
|
// stop alt checkout if they have aleady chosen PayPal... mission
|
|
if($grandTotal>0 && !isset($_SESSION['token']) && !isset($_SESSION['payer_id']) && $altCheckout) {
|
|
|
|
$noAltCheckouts = count($altCheckout);
|
|
|
|
if($noAltCheckouts == 1 && $altCheckout[0]['folder']=="PayPal_Pro") { unset($customWarn); }
|
|
|
|
if ($customWarn) {
|
|
$view_cart->assign("LANG_CUSTOM_WARN",$lang['cart']['custom_warn']);
|
|
$view_cart->parse("view_cart.cart_true.alt_checkout.custom_warn");
|
|
}
|
|
$view_cart->assign("LANG_ALTERNATIVE_CHECKOUT",$lang['cart']['alternative']);
|
|
|
|
## Get alt checkout shipping
|
|
$query = "SELECT `name`, `byprice`, `low`, `high`, `price` FROM ".$glob['dbprefix']."CubeCart_alt_shipping a LEFT JOIN ".$glob['dbprefix']."CubeCart_alt_shipping_prices b ON a.id = b.alt_ship_id ORDER BY `order`, `low`, `high` ASC";
|
|
$altShipping = $db->select($query);
|
|
|
|
if ($altShipping) {
|
|
$n=0;
|
|
for($i=0;$i<count($altShipping);$i++) {
|
|
if($altShipping[$i]['byprice']==1 && $subTotal>=$altShipping[$i]['low'] && $subTotal<=$altShipping[$i]['high']){
|
|
$altShippingPrices[$n]['name'] = $altShipping[$i]['name'];
|
|
$altShippingPrices[$n]['price'] = $altShipping[$i]['price'];
|
|
$n++;
|
|
} elseif($altShipping[$i]['byprice']==0 && $totalWeight>=$altShipping[$i]['low'] && $totalWeight<=$altShipping[$i]['high']) {
|
|
$altShippingPrices[$n]['name'] = $altShipping[$i]['name'];
|
|
$altShippingPrices[$n]['price'] = $altShipping[$i]['price'];
|
|
$n++;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!isset($customWarn) || $customWarn != true) {
|
|
## build checkout buttons
|
|
for ($i=0;$i<count($altCheckout);$i++) {
|
|
require("modules".CC_DS."altCheckout".CC_DS.$altCheckout[$i]['folder'].CC_DS."button.php");
|
|
## get module config
|
|
$altCheckoutConf = fetchDbConfig($altCheckout[$i]['folder']);
|
|
if($altCheckoutConf['mode']!=="USDPO") {
|
|
## Run class and functions
|
|
$altCheckoutButton = new $altCheckout[$i]['folder']();
|
|
$buttonCode = $altCheckoutButton->buildIt($altCheckout[$i]['folder']);
|
|
$view_cart->assign("IMG_CHECKOUT_ALT",$buttonCode);
|
|
$view_cart->parse("view_cart.cart_true.alt_checkout.loop_button");
|
|
## set include path right again - this fixes things, for some reason
|
|
ini_set('include_path', ini_get('include_path').CC_PS.CC_ROOT_DIR);
|
|
}
|
|
}
|
|
}
|
|
$view_cart->parse("view_cart.cart_true.alt_checkout");
|
|
}
|
|
$view_cart->assign("VAL_FORM_ACTION", currentPage());
|
|
$view_cart->parse("view_cart.cart_true");
|
|
} else {
|
|
|
|
$view_cart->assign("CONT_VAL","index.php?_g=co&_a=step1");
|
|
$view_cart->assign("LANG_CHECKOUT_BTN",$lang['cart']['checkout_btn']);
|
|
$view_cart->assign("LANG_VIEW_CART",$lang['cart']['view_cart']);
|
|
$view_cart->assign("CLASS_CART","class='txtcartProgressCurrent'");
|
|
$view_cart->assign("CLASS_STEP2","");
|
|
|
|
$view_cart->assign("LANG_CART_EMPTY", $lang['cart']['cart_empty']);
|
|
$view_cart->parse("view_cart.cart_false");
|
|
|
|
}
|
|
$view_cart->parse("view_cart");
|
|
$page_content = $view_cart->text("view_cart");
|
|
?>
|