/** * @param int $productId * @param int $quantity * @param int $userId * @param string $siteId * @param array $columns * @return array * @throws SystemException */ public static function getProductDetails($productId, $quantity, $userId, $siteId, array $columns = array()) { $stored = true; $result = OrderEdit::getProductDetails($productId, $userId, $siteId); if ($result === false) { $stored = false; } if ($result === false) { if (self::$catalogIncluded === null) { self::$catalogIncluded = Main\Loader::includeModule('catalog'); } if (!self::$catalogIncluded) { return array(); } $result = self::getProductDataToFillBasket($productId, $quantity, $userId, $siteId, implode(",", array_keys($columns))); if (!empty($result) && is_array($result)) { if (isset($result['DISCOUNT_PRICE'])) { $result['DISCOUNT_PRICE'] = roundEx($result['DISCOUNT_PRICE'], SALE_VALUE_PRECISION); } if (isset($result['PRICE'])) { $result['PRICE'] = roundEx($result['PRICE'], SALE_VALUE_PRECISION); } if (isset($result['PRICE_BASE'])) { $result['PRICE_BASE'] = roundEx($result['PRICE_BASE'], SALE_VALUE_PRECISION); } } static $proxyProductData = array(); if (!empty($proxyProductData[$productId]) && is_array($proxyProductData[$productId])) { $productInfo = $proxyProductData[$productId]; } else { $productInfo = \CCatalogSku::getProductInfo($productId); $proxyProductData[$productId] = $productInfo; } if ($productInfo != false) { $result["OFFERS_IBLOCK_ID"] = $productInfo["OFFER_IBLOCK_ID"]; $result["IBLOCK_ID"] = $productInfo["IBLOCK_ID"]; $result["PRODUCT_ID"] = $productInfo["ID"]; } else { $result["OFFERS_IBLOCK_ID"] = 0; $result["IBLOCK_ID"] = $result["PRODUCT_PROPS_VALUES"]["IBLOCK_ID"]; $result["PRODUCT_ID"] = $result["PRODUCT_PROPS_VALUES"]["ID"]; } } if (!$stored) { OrderEdit::setProductDetails($productId, $userId, $siteId, $result); } return $result; }