cartArray = unserialize(stripslashes($sqlValue));
return $this->cartArray;
}
return false;
}
function add($productId, $quantity, $options) {
global $config,$db,$glob;
// SO: FIX FOR CHECKOUT FLOW
/* AL: Removed for 1 step CO
$this->setVar(1,"currentStep");
$this->setVar(2,"stepLimit");
*/
// EO: FIX FOR CHECKOUT FLOW
$productKey = $productId.":".$this->buildOptions($options);
if (isset($this->cartArray['conts'][$productKey]['quantity']) && $this->cartArray['conts'][$productKey]['quantity'] > 0) {
$this->cartArray['conts'][$productKey]['quantity'] += $quantity;
} else {
$this->cartArray['conts'][$productKey]['quantity'] = $quantity;
}
/* stock on add to basket for later version maybe
$this->stock($productId,$quantity,"-");
*/
//print_r($this->cartArray);
//die;
return (!$this->sqlValue()) ? $this->error() : $this->cartArray;
}
function addCert($certArray) {
// SO: FIX FOR CHECKOUT FLOW
/* AL: Removed for 1 step CO
$this->setVar(1,"currentStep");
$this->setVar(2,"stepLimit");
*/
// EO: FIX FOR CHECKOUT FLOW
$randCode = 'v'.time().'-'.rand(1000, 9999);
$this->cartArray['conts'][$randCode]['custom'] = 1;
$this->cartArray['conts'][$randCode]['quantity'] = 1;
array_walk($certArray, array(&$this, 'sanitize'));
$this->cartArray['conts'][$randCode]['gcInfo'] = $certArray;
return (!$this->sqlValue()) ? $this->error() : $this->cartArray;
}
function sanitize(&$value, $key) {
$value = stripslashes(html_entity_decode_utf8($value, ENT_COMPAT, 'UTF-8'));
$value = htmlentities(strip_tags($value), ENT_QUOTES, 'UTF-8');
}
function setVar($var, $varName, $arrayName = '',$i = '') {
## unset old delivery address and add new
if (is_array($var)) {
foreach ($var as $key => $value) {
# $var[$key] = str_replace(array("\'", "'"), "'", stripslashes(strip_tags($value)));
$var[$key] = htmlspecialchars(stripslashes(strip_tags($value)), ENT_QUOTES);
}
} else {
# $var = str_replace(array("\'", "'"), "'", stripslashes(strip_tags($var)));
$var = htmlspecialchars(stripslashes(strip_tags($var)), ENT_QUOTES);
}
if (empty($arrayName)) {
unset($this->cartArray[$varName]);
$this->cartArray[$varName] = $var;
return (!$this->sqlValue()) ? $this->error() : $this->cartArray;
} else {
if (isset($this->cartArray[$arrayName][$i][$varName])) {
unset($this->cartArray[$arrayName][$i][$varName]);
}
$this->cartArray[$arrayName][$i][$varName] = $var;
return (!$this->sqlValue()) ? $this->error() : $this->cartArray;
}
}
function unsetVar($varName) {
unset($this->cartArray[$varName]);
return (!$this->sqlValue()) ? $this->error() : $this->cartArray;
}
function remove($productKey) {
global $config, $db, $glob;
// SO: FIX FOR CHECKOUT FLOW
/* AL: Removed for 1 step CO
$this->setVar(1,"currentStep");
$this->setVar(2,"stepLimit");
*/
// EO: FIX FOR CHECKOUT FLOW
$productId = $this->getProductId($productKey);
$quantity = $this->cartArray['conts'][$productKey]['quantity'];
/* stock on add to basket for later version maybe
$this->stock($productId, $quantity,"+");
*/
unset($this->cartArray['conts'][$productKey]);
return (!$this->sqlValue()) ? $this->error() : $this->cartArray;
}
function update($productKey, $quantity) {
$quantity = ceil($quantity);
$productId = $this->getProductId($productKey);
$quantityOld = $this->cartArray['conts'][$productKey]['quantity'];
/*
if ($quantity<$quantityOld) {
## put them back
$difference = $quantityOld - $quantity;
$sign = "+";
} else if ($quantity>$quantityOld) {
## take some more
$difference = $quantity - $quantityOld;
$sign = "-";
}
$this->stock($productId, $difference, $sign);
*/
if ($quantity > 0) {
$this->cartArray['conts'][$productKey]['quantity'] = $quantity;
} else {
unset($this->cartArray['conts'][$productKey]);
}
return (!$this->sqlValue()) ? $this->error() : $this->cartArray;
}
function sqlValue() {
global $db, $glob;
$cartData['basket'] = "'".serialize($this->cartArray)."'";
## sync database to array
$update = $db->update($glob['dbprefix']."CubeCart_sessions", $cartData, 'sessId='.$db->mySQLSafe($GLOBALS[CC_SESSION_NAME]));
return ($update) ? true : false;
}
function noItems() {
$total = 0;
if (is_array($this->cartArray['conts'])) {
foreach ($this->cartArray['conts'] as $key => $value) {
$total = $this->cartArray['conts'][$key]['quantity'] + $total;
}
return $total;
}
return $total;
}
function buildOptions($options) {
if (is_array($options)) {
foreach ($options as $key => $value) {
if (!empty($value)) {
$option[] = strip_tags(stripslashes($value));
}
}
if (!empty($option)) {
return implode('|', $option);
}
}
return false;
/*
$optionStr = '';
if (is_array($options)) {
$amount = count($options);
$i=1;
foreach ($options as $value) {
$optionStr .= $value;
if ($i<$amount) {
$optionStr .= "|";
}
$i++;
}
return $optionStr;
}
return false;
*/
}
function getOptions($productKey) {
$options = explode(":", $productKey);
return $options[1];
}
function getProductId($productKey) {
$options = explode(":", $productKey);
return $options[0];
}
/* Maybe for a later version gets v complex
function returnStock() {
global $db, $glob;
if (is_array($this->cartArray['conts'])) {
foreach ($this->cartArray['conts'] as $key => $value) {
$prodId = $this->getProductId($key);
## put the products back
$useStock = $db->select("SELECT useStockLevel FROM ".$glob['dbprefix']."CubeCart_inventory WHERE productId = ".$prodId);
if($useStock[0]['useStockLevel']==1 && $config['stock_change_time']==0){
$query = "UPDATE ".$glob['dbprefix']."CubeCart_inventory SET stock_level = stock_level + ".$this->cartArray['conts'][$key]['quantity']." WHERE productId = ".$prodId;
$db->misc($query);
}
}
}
}
*/
function emptyCart($keepStock = false) {
global $config;
## lets see if we need to return stock
/* For a later release maybe
if ($keepStock == false && $config['stock_change_time'] == 1) {
$this->returnStock();
}
*/
unset($this->cartArray);
return (!$this->sqlValue()) ? $this->error() : $this->cartArray;
}
function addCoupon($code) {
global $glob,$config,$db;
## Look up code
$coupon = $db->select("SELECT * FROM ".$glob['dbprefix']."CubeCart_Coupons WHERE code = ".$db->mySQLSafe($code)." AND status = 1");
## Validate
if ($coupon) {
if ($coupon[0]['allowed_uses'] > 0 && $coupon[0]['count'] == $coupon[0]['allowed_uses']) {
## used too many times
$this->setVar(1, "codeResult");
} else if (!empty($coupon[0]['expires']) && (strtotime($coupon[0]['expires']) < time())) {
## coupon expired
$this->setVar(2, "codeResult");
} else {
## success
$this->setVar(0,"codeResult");
$this->setVar($coupon[0]['code'],"code");
$this->setVar($coupon[0]['discount_percent'],"discount_percent");
$this->setVar($coupon[0]['discount_price'],"discount_price");
## Will have a cart id if it is a gift certificate therefore if subtotal < gift cert it needs to retan value
if(!empty($coupon[0]['cart_order_id'])) {
$this->setVar(true,"code_is_purchased");
}
## add count = count + 1
$record['count'] = "count + 1";
$where = "id = ".$coupon[0]['id'];
$update = $db->update($glob['dbprefix']."CubeCart_Coupons", $record, $where);
}
} else {
## coupon not found
$this->setVar(3, "codeResult");
}
return $this->cartArray;
}
function removeCoupon($code) {
global $glob, $config, $db;
if($this->cartArray["code_is_purchased"] == true && $this->cartArray["code_remainder"]>0) {
$record['discount_price'] = $db->mySQLSafe($this->cartArray["discount_price"]);
} else {
## subtract count = count - 1
$record['count'] = "count - 1";
}
$where = "code = ".$db->mySQLSafe(base64_decode($code));
$update = $db->update($glob['dbprefix']."CubeCart_Coupons", $record, $where);
$this->unsetVar("codeResult");
$this->unsetVar("code");
$this->unsetVar("discount_percent");
$this->unsetVar("discount_price");
$this->unsetVar("code_is_purchased");
return $this->cartArray;
}
function addByCode($code) {
global $glob,$config,$db;
$result = $db->select("SELECT productId FROM ".$glob['dbprefix']."CubeCart_inventory WHERE productCode = ".$db->mySQLSafe($code));
if ($result) {
## check for product options (if so go to view product page)
$noOpts = $db->numrows("SELECT product FROM ".$glob['dbprefix']."CubeCart_options_bot WHERE product = ".$db->mySQLSafe($result[0]['productId']));
if ($noOpts>0) {
httpredir("index.php?_a=viewProd&productId=".$result[0]['productId']."¬ice=1");
} else {
$this->add($result[0]['productId'],1,"");
httpredir(currentPage());
}
}
}
/* maybe for a later version
function stock($productId, $quantity, $sign) {
global $config,$glob,$db;
if ($quantity>0) {
## check product is set to use stock control
$stock = $db->select("SELECT useStockLevel, stock_level FROM ".$glob['dbprefix']."CubeCart_inventory","productId = ".$db->mySQLSafe($productId));
## change stock if product is set to use stock control
if($config['stock_change_time']==1 && $stock[0]['useStockLevel']==1) {
$query = "UPDATE ".$glob['dbprefix']."CubeCart_inventory SET stock_level = stock_level ".$sign." ".$quantity." WHERE productId = ".$db->mySQLSafe($productId);
$update = $db->misc($query);
}
}
}
*/
function error() {
return "Cart Error
\nThere was an error updating the basket.
\n";
}
}
?>