Вход Регистрация
Файл: core/functions/cart_functions.php
Строк: 581
<?php
#####################################
# ShopCMS: Скрипт интернет-магазина
# Copyright (c) by ADGroup
# http://shopcms.ru
#####################################


// compare two configuration
function CompareConfiguration($variants1$variants2)
{
        if ( 
count($variants1) != count($variants2) )
                return 
false;

        foreach(
$variants1 as $variantID)
        {
                
$count1 0;
                
$count2 0;

                for(
$i=0$i<count($variants1); $i++)
                        if ( (int)
$variants1[$i] == (int)$variantID )
                                
$count1 ++;

                for(
$i=0$i<count($variants1); $i++)
                        if ( (int)
$variants2[$i] == (int)$variantID )
                                
$count2 ++;

                if ( 
$count1 != $count2 )
                        return 
false;
        }
        return 
true;
}

// search configuration in session variable
function SearchConfigurationInSessionVariable($variants$productID)
{
        foreach( 
$_SESSION["configurations"] as $key => $value )
        {
                if ( (int)
$_SESSION["gids"][$key] != (int)$productID )
                        continue;
                if ( 
CompareConfiguration($variants$value) )
                        return 
$key;
        }
        return -
1;
}

// search configuration in database
function SearchConfigurationInDataBase($variants$productID)
{
        
$q=db_query"select itemID from ".SHOPPING_CARTS_TABLE.
                
" where customerID=".(int)regGetIdByLogin($_SESSION["log"]));
        while( 
$r db_fetch_row($q) )
        {
                
$q1=db_query"select COUNT(*) from ".SHOPPING_CART_ITEMS_TABLE.
                        
" where productID=".(int)$productID." AND itemID=".(int)$r["itemID"]);
                
$r1=db_fetch_row($q1);
                if ( 
$r1[0] != )
                {
                        
$variants_from_db=GetConfigurationByItemId$r["itemID"] );
                        if ( 
CompareConfiguration($variants$variants_from_db) )
                                return 
$r["itemID"];
                }
        }
        return -
1;
}

function 
GetConfigurationByItemId($itemID)
{
        
$q=db_query("select variantID from ".
                
SHOPPING_CART_ITEMS_CONTENT_TABLE." where itemID=".(int)$itemID);
        
$variants=array();
        while( 
$r=db_fetch_row$q ) ) $variants[]=$r["variantID"];
        return 
$variants;
}

function 
InsertNewItem($variants$productID)
{
        
db_query"insert into ".SHOPPING_CART_ITEMS_TABLE.
                
"(productID) values('".(int)$productID."')" );
        
$itemID=db_insert_id();
        foreach( 
$variants as $vars )
        {
                
db_query("insert into ".
                        
SHOPPING_CART_ITEMS_CONTENT_TABLE."(itemID, variantID) ".
                        
"values( '".(int)$itemID."', '".(int)$vars."')" );
        }
        return 
$itemID;
}

function 
InsertItemIntoCart($itemID)
{
        
db_query("insert ".SHOPPING_CARTS_TABLE."(customerID, itemID, Quantity)".
                
"values( '".(int)regGetIdByLogin($_SESSION["log"])."', '".(int)$itemID."', 1 )" );
}

function 
GetStrOptions($variants)
{
        
$first_flag=true;
        
$res "";
        foreach( 
$variants as $vars )
        {
                
$q=db_query("select option_value from ".
                        
PRODUCTS_OPTIONS_VALUES_VARIANTS_TABLE.
                                
" where variantID=".(int)$vars);
                if ( 
$r=db_fetch_row($q) )
                {
                        if ( 
$first_flag )
                        {
                                
$res.=$r["option_value"];
                                
$first_flag false;
                        }
                        else
                                
$res.=", ".$r["option_value"];
                }
        }
        return 
$res;
}

function 
CodeItemInClient($variants$productID)
{
        
$array=array();
        
$array[]=$productID;
        foreach(
$variants as $var)
                
$array[]=$var;
        return 
implode("_"$array);
}

function 
DeCodeItemInClient($str)
{
        
// $variants, $productID
        
$array=explode("_"$str );
        
$productID=$array[0];
        
$variants=array();
        for(
$i=1$i<count($array); $i++)
                
$variants[]=$array[$i];
        
$res=array();
        
$res["productID"]=$productID;
        
$res["variants"]=$variants;
        return 
$res;
}

function 
GetProductInStockCount($productID)
{
        
$q=db_query("select in_stock from ".PRODUCTS_TABLE." where productID=".(int)$productID);
        
$is=db_fetch_row($q);
        return 
$is[0];
}

function 
GetPriceProductWithOption($variants$productID)
{
        
$q=db_query("select Price from ".PRODUCTS_TABLE." where productID=".(int)$productID);
        
$r=db_fetch_row($q);
        
$base_price = (float)$r[0];
        
$full_price = (float)$base_price;
        foreach(
$variants as $vars)
        {
                
$q1=db_query("select price_surplus from ".PRODUCTS_OPTIONS_SET_TABLE.
                        
" where productID=".(int)$productID." AND variantID=".(int)$vars);
                
$r1=db_fetch_row($q1);
                
$full_price += $r1["price_surplus"];
        }
        return 
$full_price;
}


function 
GetProductIdByItemId($itemID)
{
        
$q=db_query("select productID from ".SHOPPING_CART_ITEMS_TABLE." where itemID=".(int)$itemID);
        
$r=db_fetch_row($q);
        return 
$r["productID"];
}


// *****************************************************************************
// Purpose        move cart content ( SHOPPING_CARTS_TABLE ) into ordered carts ( ORDERED_CARTS_TABLE )
// Inputs                $orderID - order ID
//                                $shippingMethodID                - shipping method ID
//                                $paymentMethodID                - payment method ID
//                                $shippingAddressID                - shipping address ID
//                                $billingAddressID                - billing address ID
//                                $shippingModuleFiles        - content core/modules/shipping directories
//                                $paymentModulesFiles        - content core/modules/payment directories
// Remarks        this funcgtion is called by ordOrderProcessing to order comete
// Returns        nothing
function cartMoveContentFromShoppingCartsToOrderedCarts$orderID,
                
$shippingMethodID$paymentMethodID,
                
$shippingAddressID$billingAddressID,
                
$shippingModuleFiles$paymentModulesFiles, &$smarty_mail )
{
        
$q db_query"select statusID from ".ORDERS_TABLE." where orderID=".(int)$orderID);
        
$order db_fetch_row$q );
        
$statusID $order["statusID"];

        
// select all items from SHOPPING_CARTS_TABLE
        
$q_items db_query("select itemID, Quantity FROM ".
                        
SHOPPING_CARTS_TABLE." WHERE customerID=".(int)regGetIdByLogin($_SESSION["log"]));
        while(
$item db_fetch_row($q_items))
        {
                
$productID GetProductIdByItemId$item["itemID"] );
                if ( 
$productID == null || trim($productID) == "" )
                        continue;

                
// get product by ID
                
$q_product db_query("select name, product_code from ".PRODUCTS_TABLE.
                        
" where productID=".(int)$productID);
                
$product db_fetch_row$q_product );

                
// get full product name ( complex product name - $productComplexName ) -
                // name with configurator options
                
$variants GetConfigurationByItemId$item["itemID"] );
                
$options GetStrOptions$variants );
                if ( 
$options != "" )
                        
$productComplexName $product["name"]."(".$options.")";
                else
                        
$productComplexName $product["name"];

                if ( 
strlen($product["product_code"]) > )
                        
$productComplexName "[".$product["product_code"]."] ".$productComplexName;

                
//
                
$price GetPriceProductWithOption$variants$productID );
                
$tax taxCalculateTax$productID$shippingAddressID$billingAddressID );
                
db_query("INSERT INTO ".ORDERED_CARTS_TABLE.
                         
"(        itemID, orderID, name, ".
                         
"        Price, Quantity, tax ) ".
                         
"  VALUES ".
                         
"         (".(int)$item["itemID"].",".(int)$orderID.", '".xEscSQL($productComplexName)."', ".xEscSQL($price).
                         
", ".(int)$item["Quantity"].", ".xEscSQL($tax)." )");
                if ( 
$statusID != ostGetCanceledStatusId() && CONF_CHECKSTOCK )
                {
                        
db_query"update ".PRODUCTS_TABLE." set in_stock = in_stock - ".(int)$item["Quantity"].
                                                
" where productID=".(int)$productID );
                        
$q db_query("select name, in_stock FROM ".PRODUCTS_TABLE." WHERE productID=".(int)$productID);
                        
$productsta db_fetch_row($q);
                        if ( 
$productsta["in_stock"] == 0){
                            if (
CONF_AUTOOFF_STOCKADMINdb_query"update ".PRODUCTS_TABLE." set enabled=0 where productID=".(int)$productID);
                            if (
CONF_NOTIFY_STOCKADMIN){
                                
$smarty_mail->assign"productstaname"$productsta["name"] );
                                
$smarty_mail->assign"productstid"$productID );
                                
$stockadmin $smarty_mail->fetch"notify_stockadmin.tpl.html" );
                                
$ressta xMailTxtHTMLDATA(CONF_ORDERS_EMAIL,CUSTOMER_ACTIVATE_99,$stockadmin);
                            }
                        }
                }
        }
        
db_query("DELETE FROM ".SHOPPING_CARTS_TABLE." WHERE customerID=".(int)regGetIdByLogin($_SESSION["log"]));
}



// *****************************************************************************
// Purpose        clear cart content
// Inputs
// Remarks
// Returns
function cartClearCartContet()
{
        if ( isset(
$_SESSION["log"]) )
                
db_query("DELETE FROM ".SHOPPING_CARTS_TABLE." WHERE customerID=".(int)regGetIdByLogin($_SESSION["log"]));
        else
        {
                unset(
$_SESSION["gids"]);
                unset(
$_SESSION["counts"]);
                unset(
$_SESSION["configurations"]);
                
session_unregister("gids"); //calling session_unregister() is required since unset() may not work on some systems
                
session_unregister("counts");
                
session_unregister("configurations");
        }
}

// *****************************************************************************
// Purpose        clear cart content
// Inputs
// Remarks
// Returns
function cartGetCartContent()
{
        
$cart_content         = array();
        
$total_price         0;
        
$freight_cost        0;


        if (isset(
$_SESSION["log"])) //get cart content from the database
        
{
                
$q db_query("select itemID, Quantity FROM ".SHOPPING_CARTS_TABLE.
                                
" WHERE customerID=".(int)regGetIdByLogin($_SESSION["log"]));

                while (
$cart_item db_fetch_row($q))
                {
                        
// get variants
                        
$variants=GetConfigurationByItemId$cart_item["itemID"] );

                        
// shopping cart item
                        
$q_shopping_cart_item db_query("select productID from ".
                                        
SHOPPING_CART_ITEMS_TABLE." where ".
                                        
" itemID=".(int)$cart_item["itemID"]);
                        
$shopping_cart_item db_fetch_row$q_shopping_cart_item );
                        
$q_products db_query("select name, Price, productID, min_order_amount, shipping_freight, free_shipping, product_code FROM ".
                                        
PRODUCTS_TABLE." WHERE productID=".(int)$shopping_cart_item["productID"]);
                        if ( 
$product db_fetch_row($q_products) )
                        {
                                
$costUC GetPriceProductWithOption$variants,
                                                        
$shopping_cart_item["productID"] );
                                
$tmp =
                                        array(
                                                
"productID" =>  $product["productID"],
                                                
"id"                =>        $cart_item["itemID"],
                                                
"name"                =>        $product["name"],
                                                
"quantity"        =>        $cart_item["Quantity"],
                                                
"free_shipping"        =>        $product["free_shipping"],
                                                
"costUC"        =>        $costUC,
                                                
"cost"                =>        show_price($cart_item["Quantity"]*
                                                                                
GetPriceProductWithOption($variants,
                                                                                        
$shopping_cart_item["productID"])),
                                                
"product_code"                =>         $product["product_code"] );

                                
$freight_cost += $cart_item["Quantity"]*$product["shipping_freight"];

                                
$strOptions=GetStrOptions(
                                                
GetConfigurationByItemId$tmp["id"] ));

                                if ( 
trim($strOptions) != "" )
                                                
$tmp["name"].="  (".$strOptions.")";


                                if ( 
$product["min_order_amount"] > $cart_item["Quantity"] )
                                        
$tmp["min_order_amount"] = $product["min_order_amount"];


                                
$cart_content[] = $tmp;
                                
$total_price += $cart_item["Quantity"]*
                                                
GetPriceProductWithOption($variants,
                                                        
$shopping_cart_item["productID"]);

                        }
                }
        }
        else 
//unauthorized user - get cart from session vars
        
{
                
$total_price         0//total cart value
                
$cart_content        = array();


                
//shopping cart items count
                
if ( isset($_SESSION["gids"]) )
                        for (
$j=0$j<count($_SESSION["gids"]); $j++)
                        {
                                if (
$_SESSION["gids"][$j])
                                {
                                        
$session_items[]=
                                                
CodeItemInClient($_SESSION["configurations"][$j],
                                                        
$_SESSION["gids"][$j]);


                                        
$q db_query("select name, Price, shipping_freight, free_shipping, product_code FROM ".
                                                
PRODUCTS_TABLE." WHERE productID=".(int)$_SESSION["gids"][$j]);
                                        if (
$r db_fetch_row($q))
                                        {
                                                
$costUC GetPriceProductWithOption(
                                                                
$_SESSION["configurations"][$j],
                                                                
$_SESSION["gids"][$j])/* * $_SESSION["counts"][$j]*/;

                                                
$id $_SESSION["gids"][$j];
                                                if (
count($_SESSION["configurations"][$j]) > 0)
                                                {
                                                        for (
$tmp1=0;$tmp1<count($_SESSION["configurations"][$j]);$tmp1++) $id .= "_".$_SESSION["configurations"][$j][$tmp1];
                                                }

                                                
$tmp = array(
                                                                
"productID"        =>  $_SESSION["gids"][$j],
                                                                
"id"                =>        $id//$_SESSION["gids"][$j],
                                                                
"name"                =>        $r[0],
                                                                
"quantity"        =>        $_SESSION["counts"][$j],
                                                                
"free_shipping"        =>        $r["free_shipping"],
                                                                
"costUC"        =>        $costUC,
                                                                
"cost"                =>        show_price($costUC $_SESSION["counts"][$j]),
                                                
"product_code"                =>         $r["product_code"] );

                                                
$strOptions=GetStrOptions$_SESSION["configurations"][$j] );
                                                if ( 
trim($strOptions) != "" )
                                                        
$tmp["name"].="  (".$strOptions.")";


                                                
$q_product db_query"select min_order_amount, shipping_freight from ".PRODUCTS_TABLE.
                                                                
" where productID=".
                                                                (int)
$_SESSION["gids"][$j] );
                                                
$product db_fetch_row$q_product );
                                                if ( 
$product["min_order_amount"] > $_SESSION["counts"][$j] )
                                                        
$tmp["min_order_amount"] = $product["min_order_amount"];

                                                
$freight_cost += $_SESSION["counts"][$j]*$product["shipping_freight"];

                                                
$cart_content[] = $tmp;

                                                
$total_price += GetPriceProductWithOption(
                                                                        
$_SESSION["configurations"][$j],
                                                                        
$_SESSION["gids"][$j] )*$_SESSION["counts"][$j];
                                        }
                                }
                        }
        }

        return array(
                        
"cart_content"        => $cart_content,
                        
"total_price"        => $total_price,
                        
"freight_cost"        => $freight_cost );

}


function 
cartCheckMinOrderAmount()
{
        
$cart_content cartGetCartContent();
        
$cart_content $cart_content["cart_content"];
        foreach( 
$cart_content as $cart_item )
                if ( isset(
$cart_item["min_order_amount"]) )
                        return 
false;
        return 
true;
}

function 
cartCheckMinTotalOrderAmount(){

                
$res cartGetCartContent();
                
$d oaGetDiscountPercent$res"" );
                
$order["order_amount"] = $res["total_price"] - ($res["total_price"]/100)*$d;
                if(
$order["order_amount"]<CONF_MINIMAL_ORDER_AMOUNT)
                        return 
false;
                else
                        return 
true;
}

function 
cartAddToCart$productID$variants )
{

        
$is GetProductInStockCount$productID );

        
$q db_query"select min_order_amount from ".PRODUCTS_TABLE.
                
" where productID=".(int)$productID );
        
$min_order_amount db_fetch_row$q );
        
$min_order_amount $min_order_amount];

        
$count_to_order 1;

        if (!isset(
$_SESSION["log"])) //save shopping cart in the session variables
        
{

                
//$_SESSION["gids"] contains product IDs
                //$_SESSION["counts"] contains product quantities
                //                        ($_SESSION["counts"][$i] corresponds to $_SESSION["gids"][$i])
                //$_SESSION["configurations"] contains variants
                //$_SESSION[gids][$i] == 0 means $i-element is 'empty'

                
if (!isset($_SESSION["gids"]))
                {
                        
$_SESSION["gids"]                = array();
                        
$_SESSION["counts"]                = array();
                        
$_SESSION["configurations"] = array();
                }

                
//check for current item in the current shopping cart content
                
$item_index=SearchConfigurationInSessionVariable$variants$productID );

                if ( 
$item_index == -)
                                
$count_to_order $min_order_amount;

                if ( 
$item_index!=-//increase current product's quantity
                
{
                        if (
CONF_CHECKSTOCK==|| $_SESSION["counts"][$item_index]+$count_to_order <= $is)
                                
$_SESSION["counts"][$item_index] += $count_to_order;
                        else
                                return 
false;
                }
                else if (
CONF_CHECKSTOCK==|| $is >= $count_to_order//no item - add it to $gids array
                
{
                        
$_SESSION["gids"][] = $productID;
                        
$_SESSION["counts"][] = $count_to_order;
                        
$_SESSION["configurations"][]=$variants;
                }
                else
                        return 
false;
        }
        else 
//authorized customer - get cart from database
        
{
                
$itemID=SearchConfigurationInDataBase($variants$productID );
                if ( 
$itemID !=-// if this configuration exists in database
                
{
                        
$q db_query("select Quantity FROM ".SHOPPING_CARTS_TABLE.
                                
" WHERE customerID=".(int)regGetIdByLogin($_SESSION["log"])." AND itemID=".(int)$itemID);
                        
$row db_fetch_row($q);
                        
$quantity $row[0];
                        if (
CONF_CHECKSTOCK==|| $quantity $count_to_order <= $is)
                                
db_query("UPDATE ".SHOPPING_CARTS_TABLE.
                                        
" SET Quantity=".(int)($row[0]+$count_to_order).
                                        
" WHERE customerID=".(int)regGetIdByLogin($_SESSION["log"]).
                                        
" AND itemID=".(int)$itemID);
                        else
                                return 
false;
                }
                else 
//insert new item
                
{
                        
$count_to_order $min_order_amount;
                        if (
CONF_CHECKSTOCK==|| $is >= $count_to_order)
                        {
                                
$itemID=InsertNewItem($variants$productID );
                                
InsertItemIntoCart($itemID);
                                
db_query("UPDATE ".SHOPPING_CARTS_TABLE.
                                        
" SET Quantity=".(int)$count_to_order.
                                        
" WHERE customerID=".(int)regGetIdByLogin($_SESSION["log"]).
                                        
" AND itemID=".(int)$itemID);
                        }
                        else
                                return 
false;
                }
        }

        return 
true;
}



// *****************************************************************************
// Purpose
// Inputs        $customerID - customer ID
// Remarks
// Returns        returns true if cart is empty for this customer
function cartCartIsEmpty$log )
{
        
$customerID regGetIdByLogin$log );
        if ( (int)
$customerID )
        {
                
$customerID = (int)$customerID;
                
$q_count db_query"select count(*) from ".SHOPPING_CARTS_TABLE." where customerID=".(int)$customerID );
                
$count db_fetch_row$q_count );
                
$count $count[0];
                return ( 
$count == );
        }
        else
                return 
true;
}



?>
Онлайн: 0
Реклама