- Модуль: 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; }