• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/classes/general/cml2.php
  • Класс: CIBlockCMLImport
  • Вызов: CIBlockCMLImport::ImportPrices
function ImportPrices($XML_PRICES_PARENT, $IBLOCK_ID, $IBLOCK_LID)
{
	$price_sort = 0;
	$this->next_step["XML_PRICES_PARENT"] = $XML_PRICES_PARENT;

	$arLang = array();
	foreach($IBLOCK_LID as $site_id)
	{
		$rsSite = CSite::GetList("sort", "asc", array("ID" => $site_id));
		while ($site = $rsSite->Fetch())
			$arLang[$site["LANGUAGE_ID"]] = $site["LANGUAGE_ID"];
	}

	$arPrices = CCatalogGroup::GetListArray();

	if (!CatalogConfigFeature::isMultiPriceTypesEnabled())
	{
		$prices_limit = 1 - count($arPrices);
	}
	else
	{
		$prices_limit = null;
	}

	$arXMLPrices = $this->_xml_file->GetAllChildrenArray($XML_PRICES_PARENT);
	$uniqPriceById = array();
	foreach($arXMLPrices as $arXMLPrice)
	{
		$PRICE_ID = $arXMLPrice[$this->mess["IBLOCK_XML2_ID"]];
		$PRICE_NAME = $arXMLPrice[$this->mess["IBLOCK_XML2_NAME"]];
		if (array_key_exists($PRICE_ID, $uniqPriceById))
			return GetMessage("IBLOCK_XML2_PRICE_DUP_ERROR");
		else
			$uniqPriceById[$PRICE_ID] = true;

		$found_id = 0;
		//Check for price by XML_ID
		if (isset($PRICE_ID) && $PRICE_ID != "")
		{
			foreach($arPrices as $i => $arPrice)
			{
				if ($PRICE_ID === $arPrice["XML_ID"])
				{
					$found_id = $arPrice["ID"];
					$arPrices[$i]["found"] = true;
					break;
				}
			}
		}
		//When lookup by it's name
		if (!$found_id)
		{
			foreach($arPrices as $arPrice)
			{
				if ($PRICE_NAME === $arPrice["NAME"] && !isset($arPrice["found"]))
				{
					$found_id = $arPrice["ID"];
					break;
				}
			}
		}
		//Add new price type
		if(!$found_id)
		{
			$price_sort += 100;
			$arPrice = array(
				"NAME" => $PRICE_NAME,
				"XML_ID" => $PRICE_ID,
				"SORT" => $price_sort,
				"USER_LANG" => array(),
				"USER_GROUP" => array(2),
				"USER_GROUP_BUY" => array(2),
			);
			foreach($arLang as $lang)
			{
				$arPrice["USER_LANG"][$lang] = $arXMLPrice[$this->mess["IBLOCK_XML2_NAME"]];
			}

			if(!isset($prices_limit) || $prices_limit > 0)
			{
				CCatalogGroup::Add($arPrice);
			}
			elseif (isset($prices_limit))
			{
				if ($this->bitrix24mode)
				{
					return GetMessage("IBLOCK_XML2_PRICE_SB_ADD_ERROR_B24");
				}
				else
				{
					return GetMessage("IBLOCK_XML2_PRICE_SB_ADD_ERROR");
				}
			}
		}
		//We can update XML_ID of the price
		elseif ($arPrices[$found_id]["XML_ID"] == '' && $PRICE_ID <> '')
		{
			CCatalogGroup::Update($found_id, array(
				"XML_ID" => $PRICE_ID,
			));
		}
		//We should update NAME of the price
		elseif ($arPrices[$found_id]["NAME"] !== $PRICE_NAME && !$this->disable_change_price_name)
		{
			CCatalogGroup::Update($found_id, array(
				"NAME" => $PRICE_NAME,
			));
		}

		if (isset($prices_limit))
			$prices_limit--;
	}
	return true;
}