Hi Jim,
Here is my modified class/shopping_cart.php file.
I have used winmerge to compare the two files and checked it with webuilder. No syntax errors found. I also use MVs but you wrote that so it blends fine with Get 1 Free.
Please have a look and let me know what you see. I've tried everything.
<?php
/*
$Id: shopping_cart.php 1739 2007-12-20 00:52:16Z hpdl $
osCommerce, Open Source E-Commerce Solutions
http://www.oscommerce.com
Copyright (c) 2003 osCommerce
Released under the GNU General Public License
*/
class shoppingCart {
var $contents, $total, $weight, $cartID, $content_type;
function shoppingCart() {
$this->reset();
}
function restore_contents() {
global $customer_id;
if (!tep_session_is_registered('customer_id')) return false;
// insert current cart contents in database
if (is_array($this->contents)) {
reset($this->contents);
while (list($products_id, ) = each($this->contents)) {
$qty = $this->contents[$products_id]['qty'];
$product_query = tep_db_query("select products_id from " . TABLE_CUSTOMERS_BASKET . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id) . "'");
if (!tep_db_num_rows($product_query)) {
tep_db_query("insert into " . TABLE_CUSTOMERS_BASKET . " (customers_id, products_id, customers_basket_quantity, customers_basket_date_added) values ('" . (int)$customer_id . "', '" . tep_db_input($products_id) . "', '" . tep_db_input($qty) . "', '" . date('Ymd') . "')");
if (isset($this->contents[$products_id]['attributes'])) {
reset($this->contents[$products_id]['attributes']);
while (list($option, $value) = each($this->contents[$products_id]['attributes'])) {
tep_db_query("insert into " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " (customers_id, products_id, products_options_id, products_options_value_id) values ('" . (int)$customer_id . "', '" . tep_db_input($products_id) . "', '" . (int)$option . "', '" . (int)$value . "')");
}
}
} else {
tep_db_query("update " . TABLE_CUSTOMERS_BASKET . " set customers_basket_quantity = '" . tep_db_input($qty) . "' where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id) . "'");
}
}
}
// reset per-session cart contents, but not the database contents
$this->reset(false);
$products_query = tep_db_query("select products_id, customers_basket_quantity from " . TABLE_CUSTOMERS_BASKET . " where customers_id = '" . (int)$customer_id . "'");
while ($products = tep_db_fetch_array($products_query)) {
$this->contents[$products['products_id']] = array('qty' => $products['customers_basket_quantity']);
// attributes
$attributes_query = tep_db_query("select products_options_id, products_options_value_id from " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products['products_id']) . "'");
while ($attributes = tep_db_fetch_array($attributes_query)) {
$this->contents[$products['products_id']]['attributes'][$attributes['products_options_id']] = $attributes['products_options_value_id'];
}
}
$this->cleanup();
}
function reset($reset_database = false) {
global $customer_id;
$this->contents = array();
$this->total = 0;
$this->weight = 0;
$this->content_type = false;
if (tep_session_is_registered('customer_id') && ($reset_database == true)) {
tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET . " where customers_id = '" . (int)$customer_id . "'");
tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " where customers_id = '" . (int)$customer_id . "'");
}
unset($this->cartID);
if (tep_session_is_registered('cartID')) tep_session_unregister('cartID');
}
function add_cart($products_id, $qty = '1', $attributes = '', $notify = true) {
global $new_products_id_in_cart, $customer_id;
$products_id_string = tep_get_uprid($products_id, $attributes);
$products_id = tep_get_prid($products_id_string);
if (defined('MAX_QTY_IN_CART') && (MAX_QTY_IN_CART > 0) && ((int)$qty > MAX_QTY_IN_CART)) {
$qty = MAX_QTY_IN_CART;
}
$attributes_pass_check = true;
if (is_array($attributes)) {
reset($attributes);
while (list($option, $value) = each($attributes)) {
if (!is_numeric($option) || !is_numeric($value)) {
$attributes_pass_check = false;
break;
}
}
}
if (is_numeric($products_id) && is_numeric($qty) && ($attributes_pass_check == true)) {
$check_product_query = tep_db_query("select products_status from " . TABLE_PRODUCTS . " where products_id = '" . (int)$products_id . "'");
$check_product = tep_db_fetch_array($check_product_query);
if (($check_product !== false) && ($check_product['products_status'] == '1')) {
if ($notify == true) {
$new_products_id_in_cart = $products_id;
tep_session_register('new_products_id_in_cart');
}
if ($this->in_cart($products_id_string)) {
$this->update_quantity($products_id_string, $qty, $attributes);
} else {
$this->contents[$products_id_string] = array('qty' => (int)$qty);
// insert into database
if (tep_session_is_registered('customer_id')) tep_db_query("insert into " . TABLE_CUSTOMERS_BASKET . " (customers_id, products_id, customers_basket_quantity, customers_basket_date_added) values ('" . (int)$customer_id . "', '" . tep_db_input($products_id_string) . "', '" . (int)$qty . "', '" . date('Ymd') . "')");
if (is_array($attributes)) {
reset($attributes);
while (list($option, $value) = each($attributes)) {
$this->contents[$products_id_string]['attributes'][$option] = $value;
// insert into database
if (tep_session_is_registered('customer_id')) tep_db_query("insert into " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " (customers_id, products_id, products_options_id, products_options_value_id) values ('" . (int)$customer_id . "', '" . tep_db_input($products_id_string) . "', '" . (int)$option . "', '" . (int)$value . "')");
}
}
}
$this->cleanup();
// assign a temporary unique ID to the order contents to prevent hack attempts during the checkout procedure
$this->cartID = $this->generate_cart_id();
}
}
}
function update_quantity($products_id, $quantity = '', $attributes = '') {
global $customer_id;
$products_id_string = tep_get_uprid($products_id, $attributes);
$products_id = tep_get_prid($products_id_string);
if (defined('MAX_QTY_IN_CART') && (MAX_QTY_IN_CART > 0) && ((int)$quantity > MAX_QTY_IN_CART)) {
$quantity = MAX_QTY_IN_CART;
}
$attributes_pass_check = true;
if (is_array($attributes)) {
reset($attributes);
while (list($option, $value) = each($attributes)) {
if (!is_numeric($option) || !is_numeric($value)) {
$attributes_pass_check = false;
break;
}
}
}
if (is_numeric($products_id) && isset($this->contents[$products_id_string]) && is_numeric($quantity) && ($attributes_pass_check == true)) {
$this->contents[$products_id_string] = array('qty' => (int)$quantity);
// update database
if (tep_session_is_registered('customer_id')) tep_db_query("update " . TABLE_CUSTOMERS_BASKET . " set customers_basket_quantity = '" . (int)$quantity . "' where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id_string) . "'");
if (is_array($attributes)) {
reset($attributes);
while (list($option, $value) = each($attributes)) {
$this->contents[$products_id_string]['attributes'][$option] = $value;
// update database
if (tep_session_is_registered('customer_id')) tep_db_query("update " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " set products_options_value_id = '" . (int)$value . "' where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id_string) . "' and products_options_id = '" . (int)$option . "'");
}
}
}
}
function cleanup() {
global $customer_id;
reset($this->contents);
while (list($key,) = each($this->contents)) {
if ($this->contents[$key]['qty'] < 1) {
unset($this->contents[$key]);
// remove from database
if (tep_session_is_registered('customer_id')) {
tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($key) . "'");
tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($key) . "'");
}
}
}
}
function count_contents() { // get total number of items in cart
$total_items = 0;
if (is_array($this->contents)) {
reset($this->contents);
while (list($products_id, ) = each($this->contents)) {
$total_items += $this->get_quantity($products_id);
// Get 1 free
// If this product qualifies for free product(s) add in the number of free products
if (is_array ($free_product = $this->get1free ($products_id))) {
$total_items += $free_product['quantity'];
}
// end Get 1 free
}
}
return $total_items;
}
function get_quantity($products_id) {
if (isset($this->contents[$products_id])) {
return $this->contents[$products_id]['qty'];
} else {
return 0;
}
}
function in_cart($products_id) {
if (isset($this->contents[$products_id])) {
return true;
} else {
return false;
}
}
function remove($products_id) {
global $customer_id;
unset($this->contents[$products_id]);
// remove from database
if (tep_session_is_registered('customer_id')) {
tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id) . "'");
tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id) . "'");
}
// Get 1 free
// If this product qualifies for free product(s) remove the free products
if (is_array ($free_product = $this->get1free ($products_id))) {
$pid = (int)$free_product['id'];
unset($this->contents[$pid]);
// remove from database
if (tep_session_is_registered('customer_id')) {
tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($pid) . "'");
tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($pid) . "'");
}
}
// end Get 1 free
// assign a temporary unique ID to the order contents to prevent hack attempts during the checkout procedure
$this->cartID = $this->generate_cart_id();
return $debug;
}
function remove_all() {
$this->reset();
}
function get_product_id_list() {
$product_id_list = '';
if (is_array($this->contents)) {
reset($this->contents);
while (list($products_id, ) = each($this->contents)) {
$product_id_list .= ', ' . $products_id;
}
}
return substr($product_id_list, 2);
}
function calculate() {
global $currencies;
$this->total = 0;
$this->weight = 0;
if (!is_array($this->contents)) return 0;
reset($this->contents);
while (list($products_id, ) = each($this->contents)) {
$qty = $this->contents[$products_id]['qty'];
// products price
$product_query = tep_db_query("select products_id, products_price, products_tax_class_id, products_weight from " . TABLE_PRODUCTS . " where products_id = '" . (int)$products_id . "'");
if ($product = tep_db_fetch_array($product_query)) {
$prid = $product['products_id'];
$products_tax = tep_get_tax_rate($product['products_tax_class_id']);
$products_price = $product['products_price'];
$products_weight = $product['products_weight'];
$specials_query = tep_db_query("select specials_new_products_price from " . TABLE_SPECIALS . " where products_id = '" . (int)$prid . "' and status = '1'");
if (tep_db_num_rows ($specials_query)) {
$specials = tep_db_fetch_array($specials_query);
$products_price = $specials['specials_new_products_price'];
}
$this->total += $currencies->calculate_price($products_price, $products_tax, $qty);
$this->weight += ($qty * $products_weight);
// Get 1 free
// If this product qualifies for free product(s) add in the total weight of free products
if (is_array ($free_product = $this->get1free ($products_id))) {
$this->weight += $free_product['quantity'] * $free_product['weight'];
}
// end Get 1 free
}
// attributes price
if (isset($this->contents[$products_id]['attributes'])) {
reset($this->contents[$products_id]['attributes']);
while (list($option, $value) = each($this->contents[$products_id]['attributes'])) {
$attribute_price_query = tep_db_query("select options_values_price, price_prefix from " . TABLE_PRODUCTS_ATTRIBUTES . " where products_id = '" . (int)$prid . "' and options_id = '" . (int)$option . "' and options_values_id = '" . (int)$value . "'");
$attribute_price = tep_db_fetch_array($attribute_price_query);
if ($attribute_price['price_prefix'] == '+') {
$this->total += $currencies->calculate_price($attribute_price['options_values_price'], $products_tax, $qty);
} else {
$this->total -= $currencies->calculate_price($attribute_price['options_values_price'], $products_tax, $qty);
}
}
}
}
}
//////
//MVS Start
// New method to provide cost, weight, quantity, and product IDs by vendor
//////
//Output array structure (example):
//shoppingcart Object
//(
// [vendor_shipping] => array
// (
// [0] => array //Number is the vendor_id
// (
// [weight] => 22.59
// [cost] => 12.95
// [qty] => 2
// [products_id] => array
// (
// [0] => 12
// [1] => 47
// )
// )
// [12] => array
// (
// [weight] => 32.74
// [cost] => 109.59
// [qty] => 5
// [products_id] => array
// (
// [0] => 2
// [1] => 3
// [2] => 37
// [3] => 49
// )
// )
// )
//)
function vendor_shipping() {
if (!is_array($this->contents)) return 0; //Cart is empty
$this->vendor_shipping = array(); //Initialize the output array
reset($this->contents); // and reset the input array
foreach ($this->contents as $products_id => $value) { //$value is never used
$quantity = $this->contents[$products_id]['qty'];
//mod IndvShip, added products_ship_price
$products_query = tep_db_query("select products_id,
products_price,
products_ship_price,
products_tax_class_id,
products_weight,
vendors_id
from " . TABLE_PRODUCTS . "
where products_id = '" . (int)$products_id . "'"
);
if ($products = tep_db_fetch_array($products_query)) {
$products_price = $products['products_price'];
//mod IndvShip
$products_ship_price = $products['products_ship_price'];
$products_weight = $products['products_weight'];
$vendors_id = ($products['vendors_id'] <= 0) ? 1 : $products['vendors_id'];
$products_tax = tep_get_tax_rate($products['products_tax_class_id']);
//Find special prices (if any)
$specials_query = tep_db_query("select specials_new_products_price
from " . TABLE_SPECIALS . "
where products_id = '" . (int)$products_id . "'
and status = '1'"
);
if (tep_db_num_rows ($specials_query)) {
$specials = tep_db_fetch_array($specials_query);
$products_price = $specials['specials_new_products_price'];
}
//Add values to the output array
$this->vendor_shipping[$vendors_id]['weight'] += ($quantity * $products_weight);
$this->vendor_shipping[$vendors_id]['cost'] += tep_add_tax($products_price, $products_tax) * $quantity;
$this->vendor_shipping[$vendors_id]['qty'] += $quantity;
//mod IndvShip
$this->vendor_shipping[$vendors_id]['ship_cost'] += ($quantity * $products_ship_price);
$this->vendor_shipping[$vendors_id]['products_id'][] = $products_id; //There can be more than one product
}
// Add/subtract attributes prices (if any)
if (isset($this->contents[$products_id]['attributes'])) {
reset($this->contents[$products_id]['attributes']);
foreach ($this->contents[$products_id]['attributes'] as $option => $value) {
$attribute_price_query = tep_db_query("select options_values_price, price_prefix from " . TABLE_PRODUCTS_ATTRIBUTES . " where products_id = '" . (int)$products_id . "' and options_id = '" . (int)$option . "' and options_values_id = '" . (int)$value . "'");
$attribute_price = tep_db_fetch_array($attribute_price_query);
if ($attribute_price['price_prefix'] == '+') {
$this->vendor_shipping[$vendors_id]['cost'] += $quantity * tep_add_tax($attribute_price['options_values_price'], $products_tax);
} else {
$this->vendor_shipping[$vendors_id]['cost'] -= $quantity * tep_add_tax($attribute_price['options_values_price'], $products_tax);
}
}
}
}
return $this->vendor_shipping;
}
//MVS End
function attributes_price($products_id) {
$attributes_price = 0;
if (isset($this->contents[$products_id]['attributes'])) {
reset($this->contents[$products_id]['attributes']);
while (list($option, $value) = each($this->contents[$products_id]['attributes'])) {
$attribute_price_query = tep_db_query("select options_values_price, price_prefix from " . TABLE_PRODUCTS_ATTRIBUTES . " where products_id = '" . (int)$products_id . "' and options_id = '" . (int)$option . "' and options_values_id = '" . (int)$value . "'");
$attribute_price = tep_db_fetch_array($attribute_price_query);
if ($attribute_price['price_prefix'] == '+') {
$attributes_price += $attribute_price['options_values_price'];
} else {
$attributes_price -= $attribute_price['options_values_price'];
}
}
}
return $attributes_price;
}
//MVS - added function to only retrieve specific vendors products
function get_vendors_products($vendor) {
global $languages_id;
if (!is_array($this->contents)) return false;
$products_array = array();
reset($this->contents);
while (list($products_id, ) = each($this->contents)) {
$products_query = tep_db_query("select p.products_id, pd.products_name, p.products_model, p.products_image, p.products_price, p.products_weight, p.products_length, p.products_width, p.products_height, p.products_ready_to_ship, p.products_tax_class_id, v.vendors_id, v.vendors_name from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_VENDORS . " v where p.products_id = '" . (int)$products_id . "' and pd.products_id = p.products_id and v.vendors_id = '" . $vendor . "' and p.vendors_id = '" . $vendor . "' and pd.language_id = '" . (int)$languages_id . "'");
//upsxml dimensions end
//MVS end
if ($products = tep_db_fetch_array($products_query)) {
$prid = $products['products_id'];
$products_price = $products['products_price'];
$specials_query = tep_db_query("select specials_new_products_price from " . TABLE_SPECIALS . " where products_id = '" . (int)$prid . "' and status = '1'");
if (tep_db_num_rows($specials_query)) {
$specials = tep_db_fetch_array($specials_query);
$products_price = $specials['specials_new_products_price'];
}
$products_array[] = array('id' => $products_id,
'name' => $products['products_name'],
'qproduct' => '',
'model' => $products['products_model'],
'image' => $products['products_image'],
'price' => $products_price,
'quantity' => $this->contents[$products_id]['qty'],
'weight' => $products['products_weight'],
//upsxml dimensions start
'length' => ($products['product_free_shipping'] == '1' ? 0 : $products['products_length']),
'width' => ($products['product_free_shipping'] == '1' ? 0 : $products['products_width']),
'height' => ($products['product_free_shipping'] == '1' ? 0 : $products['products_height']),
'ready_to_ship' => $products['products_ready_to_ship'],
//upsxml dimensions end
'final_price' => ($products_price + $this->attributes_price($products_id)),
'tax_class_id' => $products['products_tax_class_id'],
//MVS start
'vendors_id' => $products['vendors_id'],
'vendors_name' => $products['vendors_name'],
//MVS end
'attributes' => (isset($this->contents[$products_id]['attributes']) ? $this->contents[$products_id]['attributes'] : ''));
// Get 1 free
if (is_array ($free_product = $this->get1free ($products_id))) {
// Add the free product to the shopping cart (Customer cannot alter this)
$products_array[] = array('id' => $free_product['id'],
'name' => $free_product['name'],
'qproduct' => '<br><span class="stockWarning">Free with <b>' . $products['products_name'] . '</b> purchase</span>',
'model' => $free_product['model'],
'image' => $free_product['image'],
'price' => 0,
'quantity' => $free_product['quantity'],
'weight' => $free_product['weight'],
'final_price' => 0,
'tax_class_id' => $products['products_tax_class_id'],
'attributes' => '',
'free' => 1
);
} //if (is_array
// end Get 1 free
}
}
return $products_array;
}
//MVS - upsxml end
function get_products() {
global $languages_id;
if (!is_array($this->contents)) return false;
$products_array = array();
reset($this->contents);
while (list($products_id, ) = each($this->contents)) {
//MVS
//upsxml dimensions - added p.products_length, p.products_width, p.products_height, p.products_ready_to_ship,
$products_query = tep_db_query("select p.products_id, pd.products_name, p.products_model, p.products_image, p.products_price, p.products_weight, p.products_length, p.products_width, p.products_height, p.products_ready_to_ship, p.products_tax_class_id, v.vendors_id, v.vendors_name from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_VENDORS . " v where p.products_id = '" . (int)$products_id . "' and pd.products_id = p.products_id and v.vendors_id = p.vendors_id and pd.language_id = '" . (int)$languages_id . "'");
if ($products = tep_db_fetch_array($products_query)) {
$prid = $products['products_id'];
$products_price = $products['products_price'];
$specials_query = tep_db_query("select specials_new_products_price from " . TABLE_SPECIALS . " where products_id = '" . (int)$prid . "' and status = '1'");
if (tep_db_num_rows($specials_query)) {
$specials = tep_db_fetch_array($specials_query);
$products_price = $specials['specials_new_products_price'];
}
$products_array[] = array('id' => $products_id,
'name' => $products['products_name'],
'model' => $products['products_model'],
'image' => $products['products_image'],
'price' => $products_price,
'quantity' => $this->contents[$products_id]['qty'],
'weight' => $products['products_weight'],
//upsxml dimensions start
'length' => ($products['product_free_shipping'] == '1' ? 0 : $products['products_length']),
'width' => ($products['product_free_shipping'] == '1' ? 0 : $products['products_width']),
'height' => ($products['product_free_shipping'] == '1' ? 0 : $products['products_height']),
//uspxml dimensions end
'ready_to_ship' => $products['products_ready_to_ship'],
'final_price' => ($products_price + $this->attributes_price($products_id)),
'tax_class_id' => $products['products_tax_class_id'],
//MVS start
'vendors_id' => $products['vendors_id'],
'vendors_name' => $products['vendors_name'],
//MVS end
'attributes' => (isset($this->contents[$products_id]['attributes']) ? $this->contents[$products_id]['attributes'] : ''));
}
}
return $products_array;
}
function show_total() {
$this->calculate();
return $this->total;
}
function show_weight() {
$this->calculate();
return $this->weight;
}
function generate_cart_id($length = 5) {
return tep_create_random_value($length, 'digits');
}
function get_content_type() {
$this->content_type = false;
if ( (DOWNLOAD_ENABLED == 'true') && ($this->count_contents() > 0) ) {
reset($this->contents);
while (list($products_id, ) = each($this->contents)) {
if (isset($this->contents[$products_id]['attributes'])) {
reset($this->contents[$products_id]['attributes']);
while (list(, $value) = each($this->contents[$products_id]['attributes'])) {
$virtual_check_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS_ATTRIBUTES . " pa, " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad where pa.products_id = '" . (int)$products_id . "' and pa.options_values_id = '" . (int)$value . "' and pa.products_attributes_id = pad.products_attributes_id");
$virtual_check = tep_db_fetch_array($virtual_check_query);
if ($virtual_check['total'] > 0) {
switch ($this->content_type) {
case 'physical':
$this->content_type = 'mixed';
return $this->content_type;
break;
default:
$this->content_type = 'virtual';
break;
}
} else {
switch ($this->content_type) {
case 'virtual':
$this->content_type = 'mixed';
return $this->content_type;
break;
default:
$this->content_type = 'physical';
break;
}
}
}
} else {
switch ($this->content_type) {
case 'virtual':
$this->content_type = 'mixed';
return $this->content_type;
break;
default:
$this->content_type = 'physical';
break;
}
}
}
} else {
$this->content_type = 'physical';
}
return $this->content_type;
}
function unserialize($broken) {
for(reset($broken);$kv=each($broken);) {
$key=$kv['key'];
if (gettype($this->$key)!="user function")
$this->$key=$kv['value'];
}
}
// start Get 1 Free
function get1free ($products_id) {
global $languages_id;
$get_1_free_query = tep_db_query("select products_free_id, products_free_quantity, products_qualify_quantity, products_multiple, get_1_free_expires_date from " . TABLE_GET_1_FREE . " where products_id = '" . (int)$products_id . "' and status = '1'");
if (tep_db_num_rows($get_1_free_query) > 0) {
$get_1_free = tep_db_fetch_array($get_1_free_query);
//Check that the offer has not expired
//MNK bugfix 13.08.2007
if (($get_1_free['get_1_free_expires_date'] <= date('Y-m-d H:i:s')) && ($get_1_free['get_1_free_expires_date'] != '0000-00-00 00:00:00')) {
//offer has expired, so update the database and return false
tep_db_query("update " . TABLE_GET_1_FREE . " set status = '0', date_status_change = now() where products_id = '" . (int)$products_id . "'");
return false;
} else {
// Offer is valid, so check if the quantity qualifies
$products_quantity = $this->contents[$products_id]['qty'];
if ($products_quantity >= $get_1_free['products_qualify_quantity']) {
// Qualifies, so get the quantity of free products
$free_quantity = 1;
if ($get_1_free['products_multiple'] > 1) {
//BOF fischo bugfix 10.04.2009
//$free_quantity = floor ($products_quantity / $get_1_free['products_qualify_quantity']);
$free_quantity = floor ($products_quantity / $get_1_free['products_qualify_quantity']) * $get_1_free['products_free_quantity'];
//EOF fischo bugfix 10.04.2009
if ($free_quantity > $get_1_free['products_multiple']) {
$free_quantity = $get_1_free['products_multiple'];
}
}
// Get the info on the free product
$products_free_query = tep_db_query("select pd.products_name, p.products_model,p.products_image,p.products_weight from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_id = '" . (int)$get_1_free['products_free_id'] . "' and pd.products_id = p.products_id and pd.language_id = '" . (int)$languages_id . "'");
$products_free = tep_db_fetch_array($products_free_query);
// Return an array of free product values
$output = array ( 'id' => $get_1_free['products_free_id'],
'quantity' => $free_quantity,
'name' => $products_free['products_name'],
'model' => $products_free['products_model'],
'image' => $products_free['products_image'],
'weight' => $products_free['products_weight']);
return $output;
} //if ($products_quantity
} //else
}//if (tep_db_num_rows
// offer was not valid (disabled or expired)
return false;
}//function
// end Get 1 Free
// get_products_for_packaging is a special function for split product support in the class packing
// assumes that you have added the sql for upsxml, which adds the table products_split
function get_products_for_packaging() {
if (!is_array($this->contents)) return false;
$products_array = array();
// get the list of product information
$products = $this->get_products();
// cycle through list
foreach ($products as $product) {
$split_query = tep_db_query("select * from " . TABLE_PRODUCTS_SPLIT . " where products_id = " . (int)$product['id']);
// is this a split product?
if (tep_db_num_rows($split_query) > 0) {
// save the total prices of the split product
$product_price = $product['price'];
$product_final_price = $product['final_price'];
while ($split_info = tep_db_fetch_array($split_query)) {
// for each piece of the product replace only the information that is unique to the piece
// other information from the product will remain unchanged
$product['weight'] = $split_info['products_weight'];
$product['length'] = $split_info['products_length'];
$product['width'] = $split_info['products_width'];
$product['height'] = $split_info['products_height'];
$product['ready_to_ship'] = $split_info['products_ready_to_ship'];
$product['price'] = round(($split_info['value_fraction'] * $product_price), 4);
$product['final_price'] = round(($split_info['value_fraction'] * $product_final_price), 4);
// save the updated product piece
$products_array[] = $product;
} // end while
} else {
// not a split product, save it directly
$products_array[] = $product;
}
} // end foreach
return $products_array;
}
}
?>