Using ZC 1.5.1 (two localhost installations), PHP 5.3.8 (although I don't think that that's the difference). Using the following for /includes/extra_cart_actions/limit_downloads.php:
Code:
<?php
/**
* Extra shopping Cart actions supported.
*
* @copyright Copyright 2009-2012 Vinos de Frutas Tropicales
* @copyright Copyright 2003-2010 Zen Cart Development Team
* @copyright Portions Copyright 2003 osCommerce
* @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
* @version $Id: limit_downloads.php 2012-11-26 lat9
*
* The main cart actions supported by the current shoppingCart class.
*
* This module checks for a downloadable and/or virtual product already present in the cart and disallows an additional product
* quantities of the exactly-same configuration to be added.
*
* NOTE: See also \includes\languages\english\extra_definitions\YOURTEMPLATE\limit_downloads.php for language constants.
*
*/
switch ($_GET['action']) {
/*---- Update product quantities in the cart ----
*/
case 'update_product':
if (isset($_POST['products_id'])) {
for ($i = 0, $n=sizeof($_POST['products_id']); $i < $n; $i++) {
if (!(in_array($_POST['products_id'][$i], (is_array($_POST['cart_delete']) ? $_POST['cart_delete'] : array()))) && $_POST['cart_quantity'][$i] > 1 ) {
if (isset($_POST['id'][$_POST['products_id'][$i]])) {
foreach($_POST['id'][$_POST['products_id'][$i]] as $option => $value) {
if (ldProductIsDownload ($_POST['products_id'][$i], $option, $value)) {
$_POST['cart_quantity'][$i] = 1;
$messageStack->add_session('header', sprintf(ERROR_MAXIMUM_DOWNLOADS, zen_get_products_name($_POST['products_id'][$i])), 'caution');
break;
}
}
}
}
}
}
break;
/*---- Add a product to cart ----
**
** If a product is being added to the cart (with a quantity greater than 0) and that product includes attributes (the $_POST['id'] array
** is set), then if either that product is already in the cart -OR- if the quantity to be added is greater than 1,
** check each of the attributes being added to see if there is a download/virtual product amongst them. If so,
** don't allow the duplicate download/virtual product to be added to the cart ... or just add 1 if this is the original add.
*/
case 'add_product':
//-bof-v1.1.1c
if (isset($_POST['products_id']) && $_POST['cart_quantity'] > 0 && isset($_POST['id']) && is_array($_POST['id'])) {
$the_ids = $_POST['id'];
foreach($_POST['id'] as $option => $value) {
if (ldProductIsDownload ($_POST['products_id'], $option, $value)) {
if ($_SESSION['cart']->in_cart(zen_get_uprid($_POST['products_id'], $the_ids))) {
$messageStack->add_session('header', sprintf(ERROR_MAXIMUM_DOWNLOADS, zen_get_products_name($_POST['products_id'])), 'caution');
zen_redirect(zen_href_link($goto, zen_get_all_get_params($parameters)));
} elseif ($_POST['cart_quantity'] > 1) {
$_POST['cart_quantity'] = 1;
$messageStack->add_session('header', sprintf(ERROR_MAXIMUM_DOWNLOADS, zen_get_products_name($_POST['products_id'])), 'caution');
}
break;
}
}
}
//-eof-v1.1.1c
break;
}
function ldProductIsDownload ($products_id, $options_id, $options_value_id) {
global $db, $zco_notifier;
if (zen_get_products_virtual($products_id)) return true;
$sql = "SELECT count(*) as count
FROM " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad, " . TABLE_PRODUCTS_ATTRIBUTES . " pa
WHERE pa.products_id = " . (int)$products_id . "
AND pa.options_id = " . (int)$options_id . "
AND pa.options_values_id = " . (int)$options_value_id . "
AND pa.products_attributes_id = pad.products_attributes_id";
$sql_result = $db->Execute($sql);
$zco_notifier->notify('LD_CHECK', array ('products_id' => $products_id, 'options_id' => $options_id, 'options_value_id' => $options_value_id, 'is_download' => $sql_result->fields['count']));
return ($sql_result->fields['count'] > 0) ? true : false;
}
Using index.php?main_page=product_info&products_id=133, I add "quantity = 1" to the cart (English/PDF) and go back to add another "quantity=1" (English/PDF) and receive the message "The quantity for Multiple Downloads was adjusted in your cart. Your cart can hold at most one copy of each customization for a downloadable/virtual product.". I can add "quantity = 1" of the Spanish/PDF version.
I'm perplexed as to why your installation isn't experiencing the same behavior.
Bookmarks