/** * Delete a product from the cart * * @param integer $id_product Product ID * @param integer $id_product_attribute Attribute ID if needed * @param integer $id_customization Customization id * @return boolean result */ public function deleteProduct($id_product, $id_product_attribute = NULL, $id_customization = NULL) { self::$_nbProducts = NULL; if ((int) $id_customization) { $productTotalQuantity = (int) Db::getInstance()->getValue('SELECT `quantity` FROM `' . _DB_PREFIX_ . 'cart_product` WHERE `id_product` = ' . (int) $id_product . ' AND `id_product_attribute` = ' . (int) $id_product_attribute); $customizationQuantity = (int) Db::getInstance()->getValue('SELECT `quantity` FROM `' . _DB_PREFIX_ . 'customization` WHERE `id_cart` = ' . (int) $this->id . ' AND `id_product` = ' . (int) $id_product . ' AND `id_product_attribute` = ' . (int) $id_product_attribute); if (!$this->_deleteCustomization((int) $id_customization, (int) $id_product, (int) $id_product_attribute)) { return false; } // refresh cache of self::_products $this->_products = $this->getProducts(true); return $customizationQuantity == $productTotalQuantity and $this->deleteProduct((int) $id_product, $id_product_attribute, NULL); } /* Get customization quantity */ if (($result = Db::getInstance()->getRow('SELECT SUM(`quantity`) AS \'quantity\' FROM `' . _DB_PREFIX_ . 'customization` WHERE `id_cart` = ' . (int) $this->id . ' AND `id_product` = ' . (int) $id_product . ' AND `id_product_attribute` = ' . (int) $id_product_attribute)) === false) { return false; } /* If the product still possesses customization it does not have to be deleted */ if (Db::getInstance()->NumRows() and (int) $result['quantity']) { return Db::getInstance()->Execute('UPDATE `' . _DB_PREFIX_ . 'cart_product` SET `quantity` = ' . (int) $result['quantity'] . ' WHERE `id_cart` = ' . (int) $this->id . ' AND `id_product` = ' . (int) $id_product . ($id_product_attribute != NULL ? ' AND `id_product_attribute` = ' . (int) $id_product_attribute : '')); } /* Product deletion */ if (Db::getInstance()->Execute('DELETE FROM `' . _DB_PREFIX_ . 'cart_product` WHERE `id_product` = ' . (int) $id_product . ($id_product_attribute != NULL ? ' AND `id_product_attribute` = ' . (int) $id_product_attribute : '') . ' AND `id_cart` = ' . (int) $this->id)) { // refresh cache of self::_products $this->_products = $this->getProducts(true); /* Update cart */ return $this->update(true); } return false; }