/** * @param \CDBResult $dbResultList * @return array */ protected function makeItemsFromDbResult(\CDBResult $dbResultList) { $arItemsResult = $arProductIds = array(); while ($arItem = $dbResultList->Fetch()) { if ($arItem['TYPE'] != 'S') { $arProductIds[] = $arItem['ID']; $arItem['PROPERTIES'] = $this->getItemProperies($arItem['ID']); } $arItemsResult[$arItem['ID']] = $arItem; } if (!empty($arProductIds)) { $dbCatalogProduct = \CCatalogProduct::GetList(array(), array("ID" => $arProductIds)); while ($arCatalogProduct = $dbCatalogProduct->fetch()) { $arItemsResult[$arCatalogProduct["ID"]]['PRODUCT'] = $arCatalogProduct; } $offersExistsIds = \CCatalogSKU::getExistOffers($arProductIds, $this->getIblockId()); $noOffersIds = array(); if ($offersExistsIds === false) { $noOffersIds = $arProductIds; } else { $this->loadAllSku(array_keys(array_filter($offersExistsIds))); foreach ($offersExistsIds as $id => $bExists) { $arItem =& $arItemsResult[$id]; if ($bExists) { $arItem['SKU_ITEMS'] = $this->getProductSku($arItem); } else { $noOffersIds[] = $id; } } } if (!empty($noOffersIds)) { $priceIds = $this->getVisiblePrices(); foreach ($priceIds as $priceId) { $dbPrice = \CPrice::GetList(array(), array('PRODUCT_ID' => $noOffersIds, 'CATALOG_GROUP_ID' => $priceId), false, false, array('PRODUCT_ID', 'PRICE', 'CURRENCY')); while ($arPrice = $dbPrice->fetch()) { $arItemsResult[$arPrice["PRODUCT_ID"]]['PRICES'][$priceId] = array('PRICE' => $arPrice['PRICE'], 'CURRENCY' => $arPrice['CURRENCY']); } } if ($this->getStoreId()) { $dbStoreProduct = \CCatalogStoreProduct::GetList(array(), array("PRODUCT_ID" => $noOffersIds, "STORE_ID" => $this->getStoreId())); while ($arStoreProduct = $dbStoreProduct->Fetch()) { $arItemsResult[$arStoreProduct["PRODUCT_ID"]]['PRODUCT']['STORE_AMOUNT'] = $arStoreProduct["AMOUNT"]; } } $groupsIterator = CCatalogProductSet::getList(array(), array('OWNER_ID' => $noOffersIds, 'SET_ID' => 0, 'TYPE' => \CCatalogProductSet::TYPE_GROUP), false, false, array('ID', 'OWNER_ID', 'ITEM_ID', 'SET_ID', 'TYPE')); while ($group = $groupsIterator->Fetch()) { if ($group['OWNER_ID'] == $group['ITEM_ID']) { $arItemsResult[$group['OWNER_ID']]['PRODUCT']['IS_GROUP'] = true; } } } } return $arItemsResult; }
$arCatalogProduct[] = $arItems["ID"]; $arItems['DETAIL_PAGE_URL'] = CIBlock::ReplaceDetailUrl($arItems['DETAIL_PAGE_URL'], $arItems, false, "E"); $arItemsResult[$arItems['ID']] = $arItems; } if (!empty($arCatalogProduct)) { foreach ($arPrices as $price) { $dbPrice = CPrice::GetList(array(), array('PRODUCT_ID' => $arCatalogProduct, 'CATALOG_GROUP_ID' => $price['ID']), false, false, array('PRODUCT_ID', 'PRICE')); while ($arPrice = $dbPrice->fetch()) { $arPricesResult[$price['ID']][$arPrice["PRODUCT_ID"]] = $arPrice["PRICE"]; } } $dbCatalogProduct = CCatalogProduct::GetList(array(), array("ID" => $arCatalogProduct)); while ($oneProduct = $dbCatalogProduct->fetch()) { $arCatalogProductResult[$oneProduct["ID"]] = $oneProduct; } $existSku = CCatalogSKU::getExistOffers($arCatalogProduct); foreach ($existSku as $productID => $existOffers) { if (isset($arCatalogProductResult[$productID])) { $arCatalogProductResult[$productID] = array(); } $arCatalogProductResult[$productID]['EXIST_SKU'] = $existOffers; } unset($existOffers, $productID, $existSku); } foreach ($arItemsResult as $productId => $arItems) { $arCatalogProduct = array('EXIST_SKU' => false); if (isset($arCatalogProductResult[$productId])) { $arCatalogProduct = $arCatalogProductResult[$productId]; } //only for store documents skip sets if ($caller == "storeDocs" && isset($arCatalogProduct["TYPE"]) && $arCatalogProduct["TYPE"] == CCatalogProduct::TYPE_SET) {
/** * @param \CDBResult $dbResultList * @return array */ protected function makeItemsFromDbResult(\CDBResult $dbResultList) { $arItemsResult = $arProductIds = array(); while ($arItem = $dbResultList->Fetch()) { if ($arItem['TYPE'] != 'S') { $arProductIds[] = $arItem['ID']; $arItem['PROPERTIES'] = $this->getItemProperies($arItem['ID']); $arItemsResult[$arItem['ID']] = $arItem; } else { $arItemsResult['S' . $arItem['ID']] = $arItem; } } if (!empty($arProductIds)) { $dbCatalogProduct = \CCatalogProduct::GetList(array(), array('@ID' => $arProductIds)); while ($arCatalogProduct = $dbCatalogProduct->fetch()) { $arItemsResult[$arCatalogProduct['ID']]['PRODUCT'] = $arCatalogProduct; } $offersExistsIds = \CCatalogSKU::getExistOffers($arProductIds, $this->getIblockId()); $noOffersIds = array(); if (empty($offersExistsIds)) { $noOffersIds = $arProductIds; } else { $this->loadAllSku(array_keys(array_filter($offersExistsIds))); foreach ($offersExistsIds as $id => $bExists) { $arItem =& $arItemsResult[$id]; if ($bExists) { $arItem['SKU_ITEMS'] = $this->getProductSku($arItem); } else { $noOffersIds[] = $id; } } unset($id, $bExists); } if (!empty($noOffersIds)) { $productRatioList = Catalog\ProductTable::getCurrentRatioWithMeasure($noOffersIds); if (!empty($productRatioList)) { foreach ($productRatioList as $productId => $productRatio) { if (!isset($arItemsResult[$productId]['PRODUCT'])) { continue; } $arItemsResult[$productId]['PRODUCT']['MEASURE_RATIO'] = $productRatio['RATIO']; $arItemsResult[$productId]['PRODUCT']['MEASURE'] = $productRatio['MEASURE']; } unset($productRatio, $productId); } unset($productRatioList); $priceIds = $this->getVisiblePrices(); foreach ($priceIds as $priceId) { $dbPrice = \CPrice::GetListEx(array(), array('PRODUCT_ID' => $noOffersIds, 'CATALOG_GROUP_ID' => $priceId), false, false, array('PRODUCT_ID', 'PRICE', 'CURRENCY', 'QUANTITY_FROM', 'QUANTITY_TO')); while ($arPrice = $dbPrice->fetch()) { $arPrice['QUANTITY_FROM'] = (int) $arPrice['QUANTITY_FROM']; $arPrice['QUANTITY_TO'] = (int) $arPrice['QUANTITY_TO']; if (!isset($arItemsResult[$arPrice["PRODUCT_ID"]]['PRICES'][$priceId]) || $arItemsResult[$arPrice["PRODUCT_ID"]]['PRICES'][$priceId]['QUANTITY_FROM'] > $arPrice['QUANTITY_FROM']) { $arItemsResult[$arPrice["PRODUCT_ID"]]['PRICES'][$priceId] = array('PRICE' => $arPrice['PRICE'], 'CURRENCY' => $arPrice['CURRENCY'], 'QUANTITY_FROM' => $arPrice['QUANTITY_FROM'], 'QUANTITY_TO' => $arPrice['QUANTITY_TO']); } } unset($arPrice, $dbPrice); } if ($this->getStoreId()) { $dbStoreProduct = \CCatalogStoreProduct::GetList(array(), array("PRODUCT_ID" => $noOffersIds, "STORE_ID" => $this->getStoreId())); while ($arStoreProduct = $dbStoreProduct->Fetch()) { $arItemsResult[$arStoreProduct["PRODUCT_ID"]]['PRODUCT']['STORE_AMOUNT'] = $arStoreProduct["AMOUNT"]; } } $groupsIterator = CCatalogProductSet::getList(array(), array('OWNER_ID' => $noOffersIds, 'SET_ID' => 0, 'TYPE' => \CCatalogProductSet::TYPE_GROUP), false, false, array('ID', 'OWNER_ID', 'ITEM_ID', 'SET_ID', 'TYPE')); while ($group = $groupsIterator->Fetch()) { if ($group['OWNER_ID'] == $group['ITEM_ID']) { $arItemsResult[$group['OWNER_ID']]['PRODUCT']['IS_GROUP'] = true; } } } } return $arItemsResult; }
protected function checkFieldsToUpdate($intID, &$arFields) { global $DB; global $USER; $intCurrentUser = 0; if (CCatalog::IsUserExists()) { $intCurrentUser = (int) $USER->GetID(); } if ($intCurrentUser <= 0) { $intCurrentUser = false; } $strTimeFunc = $DB->GetNowFunction(); $arDefItem = self::getEmptyItemFields(); $arProductInSet = array(); $dblDiscountPercent = 0; $boolItems = false; $intID = (int) $intID; if ($intID <= 0) { self::$arErrors[] = array('id' => 'ID', 'text' => GetMessage('BT_CAT_SET_ERR_ID_IS_BAD')); } $arCurrent = array(); if (empty(self::$arErrors)) { $arCurrent = CCatalogProductSet::getSetByID($intID); if (empty($arCurrent)) { self::$arErrors[] = array('id' => 'ID', 'text' => GetMessage('BT_CAT_SET_ERR_ID_IS_BAD')); } } if (empty(self::$arErrors)) { self::clearFieldsForUpdate($arFields, $arCurrent['TYPE']); if (array_key_exists('ACTIVE', $arFields)) { $arFields['ACTIVE'] = 'N' != $arFields['ACTIVE'] ? 'Y' : 'N'; } if (array_key_exists('SORT', $arFields)) { $arFields['SORT'] = (int) $arFields['SORT']; if ($arFields['SORT'] <= 0) { $arFields['SORT'] = 100; } } $arFields['MODIFIED_BY'] = !array_key_exists('MODIFIED_BY', $arFields) ? 0 : (int) $arFields['MODIFIED_BY']; if ($arFields['MODIFIED_BY'] <= 0) { $arFields['MODIFIED_BY'] = $intCurrentUser; } $arFields['~TIMESTAMP_X'] = $strTimeFunc; } if (empty(self::$arErrors)) { $arProductInSet[$arCurrent['ITEM_ID']] = true; if (array_key_exists('ITEMS', $arFields)) { if (empty($arFields['ITEMS']) || !is_array($arFields['ITEMS'])) { self::$arErrors[] = array('id' => 'ITEMS', 'text' => GetMessage('BT_CAT_SET_ERR_ITEMS_IS_ABSENT')); } else { $arValidItems = array(); foreach ($arFields['ITEMS'] as &$arOneItem) { if (empty($arOneItem) || !is_array($arOneItem)) { continue; } if (array_key_exists('ID', $arOneItem)) { unset($arOneItem['ID']); } if (!array_key_exists('ITEM_ID', $arOneItem)) { continue; } $arOneItem['ITEM_ID'] = (int) $arOneItem['ITEM_ID']; if ($arOneItem['ITEM_ID'] <= 0) { continue; } if (isset($arProductInSet[$arOneItem['ITEM_ID']])) { self::$arErrors[] = array('id' => 'ITEM_ID', 'text' => GetMessage('BT_CAT_PRODUCT_SET_ERR_ITEM_ID_DUBLICATE')); continue; } $arProductInSet[$arOneItem['ITEM_ID']] = true; $intRowID = self::searchItem($arOneItem['ITEM_ID'], $arCurrent['ITEMS']); if (false === $intRowID) { $arOneItem = array_merge($arDefItem, $arOneItem); } else { $arOneItem['ID'] = $intRowID; } if (array_key_exists('SORT', $arOneItem)) { $arOneItem['SORT'] = (int) $arOneItem['SORT']; if ($arOneItem['SORT'] <= 0) { $arOneItem['SORT'] = 100; } } if (array_key_exists('QUANTITY', $arOneItem)) { $arOneItem['QUANTITY'] = doubleval($arOneItem['QUANTITY']); if (0 >= $arOneItem['QUANTITY']) { self::$arErrors[] = array('id' => 'QUANTITY', 'text' => self::TYPE_SET == $arFields['TYPE'] ? GetMessage('BT_CAT_PRODUCT_SET_ERR_QUANTITY_IS_BAD') : GetMessage('BT_CAT_PRODUCT_SET_ERR_QUANTITY_GROUP_IS_BAD')); continue; } } if (self::TYPE_SET == $arCurrent['TYPE']) { if (array_key_exists('MEASURE', $arOneItem)) { $arOneItem['MEASURE'] = (int) $arOneItem['MEASURE']; if ($arOneItem['MEASURE'] < 0) { $arOneItem['MEASURE'] = 0; } } if (array_key_exists('DISCOUNT_PERCENT', $arOneItem)) { if (false !== $arOneItem['DISCOUNT_PERCENT']) { $arOneItem['DISCOUNT_PERCENT'] = doubleval($arOneItem['DISCOUNT_PERCENT']); if (0 > $arOneItem['DISCOUNT_PERCENT'] || 100 < $arOneItem['DISCOUNT_PERCENT']) { self::$arErrors[] = array('id' => 'DISCOUNT_PERCENT', 'text' => GetMessage('BT_CAT_PRODUCT_SET_ERR_DISCOUNT_PERCENT_IS_BAD')); continue; } $dblDiscountPercent += $arOneItem['DISCOUNT_PERCENT']; } } else { if (false !== $intRowID) { if (false !== $arCurrent['ITEMS'][$intRowID]['DISCOUNT_PERCENT']) { $dblDiscountPercent += $arCurrent['ITEMS'][$intRowID]['DISCOUNT_PERCENT']; } } } } $arValidItems[] = $arOneItem; } unset($arOneItem); if (empty($arValidItems)) { self::$arErrors[] = array('id' => 'ITEMS', 'text' => GetMessage('BT_CAT_SET_ERR_EMPTY_VALID_ITEMS')); } else { $arFields['ITEMS'] = $arValidItems; $boolItems = true; } unset($arValidItems); if (100 < $dblDiscountPercent) { self::$arErrors[] = array('id' => 'DISCOUNT_PERCENT', 'text' => GetMessage('BT_CAT_PRODUCT_SET_ERR_ALL_DISCOUNT_PERCENT_IS_BAD')); } } } if (empty(self::$arErrors)) { $arProductList = array_keys($arProductInSet); if (!self::$disableCheckProduct) { if ($arFields['TYPE'] == self::TYPE_GROUP) { $checkProductList = $arProductInSet; if ($arFields['ITEM_ID'] > 0) { unset($checkProductList[$arFields['ITEM_ID']]); } $checkProductList = array_keys($checkProductList); } else { $checkProductList = $arProductList; } if (!CCatalogProduct::CheckProducts($checkProductList)) { self::$arErrors[] = array('id' => 'ITEMS', 'text' => GetMessage('BT_CAT_PRODUCT_SET_ERR_ITEMS_IS_NOT_PRODUCT')); } unset($checkProductList); } if (empty(self::$arErrors) && self::TYPE_SET == $arFields['TYPE']) { if (CCatalogProductSet::isProductHaveSet($arProductList, self::TYPE_SET)) { self::$arErrors[] = array('id' => 'ITEMS', 'text' => GetMessage('BT_CAT_PRODUCT_SET_ERR_ITEMS_IS_SET')); } $existSKU = array_filter(CCatalogSKU::getExistOffers($arProductList)); if (!empty($existSKU)) { self::$arErrors[] = array('id' => 'ITEMS', 'text' => GetMessage('BT_CAT_PRODUCT_SET_ERR_ITEMS_IS_SKU')); } unset($existSKU); } } } if (empty(self::$arErrors)) { if ($boolItems) { self::setItemFieldsForUpdate($arFields, $arCurrent); } } return empty(self::$arErrors); }
$productsWithBarCode[] = $product["ID"]; } } } if (!empty($productsWithBarCode)) { $rsProducts = CCatalogStoreBarCode::getList(array(), array("PRODUCT_ID" => $productsWithBarCode)); while ($product = $rsProducts->Fetch()) { if (isset($arRows[$product["PRODUCT_ID"]])) { $arRows[$product["PRODUCT_ID"]]->arRes["CATALOG_BAR_CODE"] = htmlspecialcharsEx($product["BARCODE"]); } } } } if (!empty($arProductIDs)) { $arProductKeys = array_keys($arProductIDs); $existOffers = CCatalogSKU::getExistOffers($arProductKeys, $IBLOCK_ID); foreach ($arProductKeys as &$intProductID) { if (!empty($existOffers[$intProductID])) { $arRows[$intProductID]->arRes['CATALOG_TYPE'] = CCatalogProduct::TYPE_SKU; if (isset($arSelectedFieldsMap['CATALOG_QUANTITY_RESERVED'])) { $arRows[$intProductID]->arRes['CATALOG_QUANTITY_RESERVED'] = ''; } } } unset($intProductID, $existOffers); } if (!empty($arProductGroupIDs)) { $rsSets = CCatalogProductSet::getList(array(), array('OWNER_ID' => array_keys($arProductGroupIDs), 'SET_ID' => 0, 'TYPE' => CCatalogProductSet::TYPE_GROUP), false, false, array('ID', 'OWNER_ID', 'ITEM_ID', 'SET_ID', 'TYPE')); while ($arSet = $rsSets->Fetch()) { $arSet['OWNER_ID'] = (int) $arSet['OWNER_ID']; $arSet['ITEM_ID'] = (int) $arSet['ITEM_ID'];
'SHOW_OLD_PRICE' => 'N', 'ADD_TO_BASKET_ACTION' => 'ADD', 'SHOW_CLOSE_POPUP' => 'N', 'MESS_BTN_BUY' => '', 'MESS_BTN_ADD_TO_BASKET' => '', 'MESS_BTN_SUBSCRIBE' => '', 'MESS_BTN_DETAIL' => '', 'MESS_NOT_AVAILABLE' => '', 'MESS_BTN_COMPARE' => '' ); $arParams = array_merge($arDefaultParams, $arParams); foreach ($arResult['ITEMS'] as $key => $arItem) { //$arResult['ITEMS'][$key]['OFFERS_a']='123123'; $offers = CCatalogSKU::getExistOffers( $arItem['ID'] ); if(!empty($offers[$arItem['ID']])) { $mxResult = CCatalogSKU::GetInfoByProductIBlock($arParams['IBLOCK_ID']); $arResult['ITEMS'][$key]['OFFERS'] = 'Y'; $offer = array(); $rsOffers = CIBlockElement::GetList( array("PRICE"=>"ASC"), array( 'IBLOCK_ID' => $mxResult['IBLOCK_ID'], 'PROPERTY_'.$mxResult['SKU_PROPERTY_ID'] => $arItem["ID"] ), false,