Ejemplo n.º 1
0
    /**
     * 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;
    }