<?php
/**
* RockPOS - Point of Sale for PrestaShop.
*
* @author    Hamsa Technologies
* @copyright Hamsa Technologies
* @license   http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
*/
if (!defined('_PS_VERSION_')) {
    exit;
}
use PrestaShop\PrestaShop\Adapter\ServiceLocator;
class Cart extends CartCore
{
    public function getProducts($refresh = false, $id_product = false, $id_country = null, $fullInfo = true, bool $keepOrderPrices = false)
    {
        if (Tools::version_compare(_PS_VERSION_, '1.7', '<')) {
            if (!$this->id) {
                return array();
            }
            // Product cache must be strictly compared to NULL, or else an empty cart will add dozens of queries
            if ($this->_products !== null && !$refresh) {
                // Return product row with specified ID if it exists
                if (is_int($id_product)) {
                    foreach ($this->_products as $product) {
                        if ($product['id_product'] == $id_product) {
                            return array($product);
                        }
                    }
                    return array();
                }
                return $this->_products;
            }
            // Build query
            $sql = new DbQuery();
            // Build SELECT
            $sql->select('cp.`id_product_attribute`, cp.`id_product`, cp.`quantity` AS cart_quantity, cp.id_shop, pl.`name`, p.`is_virtual`,
                             pl.`description_short`, pl.`available_now`, pl.`available_later`, product_shop.`id_category_default`, p.`id_supplier`,
                             p.`id_manufacturer`, product_shop.`on_sale`, product_shop.`ecotax`, product_shop.`additional_shipping_cost`,
                             product_shop.`available_for_order`, product_shop.`price`, product_shop.`active`, product_shop.`unity`, product_shop.`unit_price_ratio`,
                             stock.`quantity` AS quantity_available, p.`width`, p.`height`, p.`depth`, stock.`out_of_stock`, p.`weight`,
                             p.`date_add`, p.`date_upd`, IFNULL(stock.quantity, 0) as quantity, pl.`link_rewrite`, cl.`link_rewrite` AS category,
                             CONCAT(LPAD(cp.`id_product`, 10, 0), LPAD(IFNULL(cp.`id_product_attribute`, 0), 10, 0), IFNULL(cp.`id_address_delivery`, 0)) AS unique_id, cp.id_address_delivery,
                             product_shop.advanced_stock_management, ps.product_supplier_reference supplier_reference');
[...]
}