Пример #1
0
    public function deleteProduct($id_product, $id_product_attribute = null, $id_customization = null, $id_address_delivery = 0, $id_cart_product = 0)
    {
        if (isset(self::$_nbProducts[$this->id])) {
            unset(self::$_nbProducts[$this->id]);
        }
        if (isset(self::$_totalWeight[$this->id])) {
            unset(self::$_totalWeight[$this->id]);
        }
        /*
        if ((int)$id_customization)
        {
        	$product_total_quantity = (int)Db::getInstance()->getValue(
        		'SELECT `quantity`
        		FROM `'._DB_PREFIX_.'cart_product`
        		WHERE `id_product` = '.(int)$id_product.'
        		AND `id_cart` = '.(int)$this->id.'
        		AND `id_product_attribute` = '.(int)$id_product_attribute);
        
        	$customization_quantity = (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.'
        	'.((int)$id_address_delivery ? 'AND `id_address_delivery` = '.(int)$id_address_delivery : ''));
        
        	if (!$this->_deleteCustomization((int)$id_customization, (int)$id_product, (int)$id_product_attribute, (int)$id_address_delivery))
        		return false;
        
        	// refresh cache of self::_products
        	$this->_products = $this->getProducts(true);
        	return ($customization_quantity == $product_total_quantity && $this->deleteProduct((int)$id_product, (int)$id_product_attribute, null, (int)$id_address_delivery));
        }
        
        // Get customization quantity
        $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);
        
        if ($result === false)
        	return false;
        
        // If the product still possesses customization it does not have to be deleted
        if (Db::getInstance()->NumRows() && (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 : '')
        	);
        */
        if (($id_cart_product = PP::resolveIcp($id_cart_product)) <= 0) {
            return false;
        }
        $sql_icp = PP::sqlIcp($id_cart_product);
        $id_customization = (int) Db::getInstance()->getValue('
			SELECT `id_customization`
			FROM `' . _DB_PREFIX_ . 'customization`
			WHERE `id_cart_product` = ' . (int) $id_cart_product);
        if ((int) $id_customization && !$this->_deleteCustomization((int) $id_customization, (int) $id_product, (int) $id_product_attribute, (int) $id_address_delivery)) {
            return false;
        }
        /* Product deletion */
        $result = Db::getInstance()->execute('
		DELETE FROM `' . _DB_PREFIX_ . 'cart_product`
		WHERE `id_product` = ' . (int) $id_product . '
		' . (!is_null($id_product_attribute) ? ' AND `id_product_attribute` = ' . (int) $id_product_attribute : '') . '
		AND `id_cart` = ' . (int) $this->id . '
		' . ((int) $id_address_delivery ? 'AND `id_address_delivery` = ' . (int) $id_address_delivery : '') . $sql_icp);
        if (PP::multidimensionalEnabled()) {
            Db::getInstance()->execute('
			DELETE FROM `' . _DB_PREFIX_ . 'pp_product_ext`
			WHERE `id_cart_product` = ' . (int) $id_cart_product);
        }
        if ($result) {
            $return = $this->update();
            // refresh cache of self::_products
            $this->_products = $this->getProducts(true);
            CartRule::autoRemoveFromCart();
            CartRule::autoAddToCart();
            return $return;
        }
        return false;
    }