/** * updates the quantity of a product_id in the cart * @author pablo * @param array $d * @return boolean result of the update */ function update(&$d) { global $VM_LANG, $vmLogger, $func, $page; include_class("product"); $product_id = (int) $d["prod_id"]; $quantity = isset($d["quantity"]) ? (int) $d["quantity"] : 1; $_SESSION['last_page'] = "shop.cart"; // Check for negative quantity if ($quantity < 0) { $vmLogger->warning($VM_LANG->_('PHPSHOP_CART_ERROR_NO_NEGATIVE', false)); return False; } if (!is_numeric($quantity)) { $vmLogger->warning($VM_LANG->_('PHPSHOP_CART_ERROR_NO_VALID_QUANTITY', false)); return False; } if (!$product_id) { return false; } $deleted_prod = 0; $updated_prod = 0; if ($quantity == 0 && strtolower($func) == "cartupdate") { $deleted_prod = $this->delete($d); } else { for ($i = 0; $i < $_SESSION['cart']["idx"]; $i++) { // modified for the advanced attribute modification if ($_SESSION['cart'][$i]["product_id"] == $product_id && $_SESSION['cart'][$i]["description"] == $d["description"]) { if (strtolower($func) == 'cartadd') { $quantity += $_SESSION['cart'][$i]["quantity"]; } // Get min and max order levels list($min, $max) = ps_product::product_order_levels($product_id); if ($min != 0 && $quantity < $min) { eval("\$msg = \"" . $VM_LANG->_('VM_CART_MIN_ORDER', false) . "\";"); $vmLogger->warning($msg); return false; } if ($max != 0 && $quantity > $max) { eval("\$msg = \"" . $VM_LANG->_('VM_CART_MAX_ORDER', false) . "\";"); $vmLogger->warning($msg); return false; } $quantity_options = ps_product::get_quantity_options($product_id); if (!empty($quantity_options) && !empty($quantity_options['quantity_step'])) { if ($quantity % $quantity_options['quantity_step'] > 0) { continue; } } // Remove deleted or unpublished products from the cart if (!ps_product::product_exists($product_id)) { $this->delete(array('product_id', $product_id)); continue; } // Check to see if checking stock quantity if (CHECK_STOCK) { $product_in_stock = ps_product::get_field($product_id, 'product_in_stock'); if (empty($product_in_stock)) { $product_in_stock = 0; } if ($quantity > $product_in_stock) { global $notify; $_SESSION['notify'] = array(); $_SESSION['notify']['idx'] = 0; $k = 0; $notify = $_SESSION['notify']; $_SESSION['notify'][$k]["prod_id"] = $product_id; $_SESSION['notify'][$k]["quantity"] = $quantity; $_SESSION['notify']['idx']++; $page = 'shop.waiting_list'; return true; } } $_SESSION['cart'][$i]["quantity"] = $quantity; $updated_prod++; } } } if (!empty($_SESSION['coupon_discount'])) { // Update the Coupon Discount !! require_once CLASSPATH . 'ps_coupon.php'; ps_coupon::process_coupon_code($d); } ps_cart::saveCart(); return array($updated_prod, $deleted_prod); }