• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_external_sale_import.php
  • Класс: \CCrmExternalSaleImport
  • Вызов: CCrmExternalSaleImport::ParseOrderData
private function ParseOrderData($orderData, &$modificationLabel, &$arErrors)
{
	if (empty($orderData))
	{
		$arErrors[] = array("PD1", GetMessage("CRM_EXT_SALE_IMPORT_EMPTY_ANSW"));
		return null;
	}

	if (mb_substr(ltrim($orderData), 0, mb_strlen(']+?encoding=[\"']([^>\"']+)[\"'][^>]*\?".">/i", $orderData, $matches))
		$charset = trim($matches[1]);
	if (!empty($charset) && (mb_strtoupper($charset) != mb_strtoupper(SITE_CHARSET)))
		$orderData = CharsetConverter::ConvertCharset($orderData, $charset, SITE_CHARSET);

	$objXML = new CDataXML();
	if ($objXML->LoadString($orderData))
	{
		$arOrderData = $objXML->GetArray();
	}
	else
	{
		$arErrors[] = array("XL1", GetMessage("CRM_EXT_SALE_IMPORT_ERROR_XML"));
		return null;
	}

	$arSettings = array();
	foreach ($arOrderData["CommerceInformation"]["@"] as $key => $value)
	{
		$arSettings[$key] = array();

		$ar1 = explode(";", $value);
		foreach ($ar1 as $v1)
		{
			$ar2 = explode("=", $v1);
			if (count($ar2) == 2)
				$arSettings[$key][trim($ar2[0])] = $ar2[1];
		}

		if (count($arSettings[$key]) <= 0)
			$arSettings[$key] = $value;
	}
	if (!isset($arSettings["SumFormat"]["CRD"]))
		$arSettings["SumFormat"]["CRD"] = '.';
	if (!isset($arSettings["QuantityFormat"]["CRD"]))
		$arSettings["QuantityFormat"]["CRD"] = '.';
	if (!isset($arSettings["DateFormat"]["DF"]))
		$arSettings["DateFormat"]["DF"] = 'yyyy-MM-dd';
	$arSettings["DateFormat"]["DF"] = mb_strtoupper($arSettings["DateFormat"]["DF"]);
	if (!isset($arSettings["TimeFormat"]["DF"]))
		$arSettings["TimeFormat"]["DF"] = 'HH:MM:SS';
	$arSettings["TimeFormat"]["DF"] = str_replace("MM", "MI", $arSettings["TimeFormat"]["DF"]);

	$arOrders = array();

	if (is_array($arOrderData["CommerceInformation"]["#"]) && is_array($arOrderData["CommerceInformation"]["#"]["Document"]))
	{
		foreach ($arOrderData["CommerceInformation"]["#"]["Document"] as $arDocument)
		{
			if ($arDocument["#"]["BusinessTransaction"][0]["#"] == "ItemOrder")
			{
				$v = $this->ParseOrderDataOrder($arDocument, $arSettings);
				if (is_array($v))
				{
					$arOrders[] = $v;
					if (isset($v["DATE_UPDATE"]))
					{
						$modificationLabelTmp = MakeTimeStamp($v["DATE_UPDATE"]);
						if ($modificationLabelTmp > $modificationLabel)
							$modificationLabel = $modificationLabelTmp;
					}
				}
			}
		}
	}

	return $arOrders;
}