function ImportElement($arXMLElement, &$counter, $bWF, $arParent)
{
$arElement = array(
"ACTIVE" => "Y",
"PROPERTY_VALUES" => array(),
);
if(isset($arXMLElement[$this->mess["IBLOCK_XML2_VERSION"]]))
$arElement["TMP_ID"] = $arXMLElement[$this->mess["IBLOCK_XML2_VERSION"]];
else
$arElement["TMP_ID"] = $this->GetElementCRC($arXMLElement);
if(isset($arXMLElement[$this->mess["IBLOCK_XML2_ID_1C_SITE"]]))
$arElement["XML_ID"] = $arXMLElement[$this->mess["IBLOCK_XML2_ID_1C_SITE"]];
elseif(isset($arXMLElement[$this->mess["IBLOCK_XML2_ID"]]))
$arElement["XML_ID"] = $arXMLElement[$this->mess["IBLOCK_XML2_ID"]];
$obElement = new CIBlockElement;
$obElement->CancelWFSetMove();
$rsElement = $obElement->GetList(
Array("ID"=>"asc"),
Array("=XML_ID" => $arElement["XML_ID"], "IBLOCK_ID" => $this->next_step["IBLOCK_ID"]),
false, false,
Array("ID", "TMP_ID", "ACTIVE", "CODE", "PREVIEW_PICTURE", "DETAIL_PICTURE")
);
$bMatch = false;
if($arDBElement = $rsElement->Fetch())
$bMatch = ($arElement["TMP_ID"] == $arDBElement["TMP_ID"]);
if($bMatch && $this->use_crc)
{
//Check Active flag in XML is not set to false
if($this->CheckIfElementIsActive($arXMLElement))
{
//In case element is not active in database we have to activate it and its offers
if($arDBElement["ACTIVE"] != "Y")
{
$obElement->Update($arDBElement["ID"], array("ACTIVE"=>"Y"), $bWF);
$this->ChangeOffersStatus($arDBElement["ID"], "Y", $bWF);
$counter["UPD"]++;
}
}
$arElement["ID"] = $arDBElement["ID"];
}
elseif(isset($arXMLElement[$this->mess["IBLOCK_XML2_NAME"]]))
{
if($arDBElement)
{
if ($arDBElement["PREVIEW_PICTURE"] > 0)
$this->arElementFilesId["PREVIEW_PICTURE"] = array($arDBElement["PREVIEW_PICTURE"]);
if ($arDBElement["DETAIL_PICTURE"] > 0)
$this->arElementFilesId["DETAIL_PICTURE"] = array($arDBElement["DETAIL_PICTURE"]);
$rsProperties = $obElement->GetProperty($this->next_step["IBLOCK_ID"], $arDBElement["ID"], "sort", "asc");
while($arProperty = $rsProperties->Fetch())
{
if(!array_key_exists($arProperty["ID"], $arElement["PROPERTY_VALUES"]))
$arElement["PROPERTY_VALUES"][$arProperty["ID"]] = array(
"bOld" => true,
);
$arElement["PROPERTY_VALUES"][$arProperty["ID"]][$arProperty['PROPERTY_VALUE_ID']] = array(
"VALUE"=>$arProperty['VALUE'],
"DESCRIPTION"=>$arProperty["DESCRIPTION"]
);
if($arProperty["PROPERTY_TYPE"] == "F" && $arProperty["VALUE"] > 0)
$this->arElementFilesId[$arProperty["ID"]][] = $arProperty["VALUE"];
}
}
if ($this->bCatalog && $this->next_step["bOffer"])
{
if (isset($this->PROPERTY_MAP["CML2_LINK"]))
{
$p = strpos($arXMLElement[$this->mess["IBLOCK_XML2_ID"]], "#");
if ($p !== false)
{
$link_xml_id = substr($arXMLElement[$this->mess["IBLOCK_XML2_ID"]], 0, $p);
}
else
{
$link_xml_id = $arXMLElement[$this->mess["IBLOCK_XML2_ID"]];
}
$arElement["PROPERTY_VALUES"][$this->PROPERTY_MAP["CML2_LINK"]] = [
"n0" => [
"VALUE" => $this->GetElementByXML_ID(
$this->arProperties[$this->PROPERTY_MAP["CML2_LINK"]]["LINK_IBLOCK_ID"],
$link_xml_id
),
"DESCRIPTION" => false,
],
];
}
}
if(isset($arXMLElement[$this->mess["IBLOCK_XML2_NAME"]]))
$arElement["NAME"] = $arXMLElement[$this->mess["IBLOCK_XML2_NAME"]];
if(isset($arXMLElement[$this->mess["IBLOCK_XML2_DELETE_MARK"]]))
{
$value = $arXMLElement[$this->mess["IBLOCK_XML2_DELETE_MARK"]];
$arElement["ACTIVE"] = ($value=="true") || intval($value)? "N": "Y";
}
if(array_key_exists($this->mess["IBLOCK_XML2_BX_TAGS"], $arXMLElement))
$arElement["TAGS"] = $arXMLElement[$this->mess["IBLOCK_XML2_BX_TAGS"]];
if(array_key_exists($this->mess["IBLOCK_XML2_DESCRIPTION"], $arXMLElement))
{
if($arXMLElement[$this->mess["IBLOCK_XML2_DESCRIPTION"]] <> '')
$arElement["DETAIL_TEXT"] = $arXMLElement[$this->mess["IBLOCK_XML2_DESCRIPTION"]];
else
$arElement["DETAIL_TEXT"] = "";
if(preg_match('/<[a-zA-Z0-9]+.*?>/', $arElement["DETAIL_TEXT"]))
$arElement["DETAIL_TEXT_TYPE"] = "html";
else
$arElement["DETAIL_TEXT_TYPE"] = "text";
}
if(array_key_exists($this->mess["IBLOCK_XML2_FULL_TITLE"], $arXMLElement))
{
if($arXMLElement[$this->mess["IBLOCK_XML2_FULL_TITLE"]] <> '')
$arElement["PREVIEW_TEXT"] = $arXMLElement[$this->mess["IBLOCK_XML2_FULL_TITLE"]];
else
$arElement["PREVIEW_TEXT"] = "";
if(preg_match('/<[a-zA-Z0-9]+.*?>/', $arElement["PREVIEW_TEXT"]))
$arElement["PREVIEW_TEXT_TYPE"] = "html";
else
$arElement["PREVIEW_TEXT_TYPE"] = "text";
}
if(array_key_exists($this->mess["IBLOCK_XML2_INHERITED_TEMPLATES"], $arXMLElement))
{
$arElement["IPROPERTY_TEMPLATES"] = array();
foreach($arXMLElement[$this->mess["IBLOCK_XML2_INHERITED_TEMPLATES"]] as $TEMPLATE)
{
$id = $TEMPLATE[$this->mess["IBLOCK_XML2_ID"]];
$template = $TEMPLATE[$this->mess["IBLOCK_XML2_VALUE"]];
if($id <> '' && $template <> '')
$arElement["IPROPERTY_TEMPLATES"][$id] = $template;
}
}
if (isset($this->PROPERTY_MAP["CML2_BAR_CODE"]))
{
if (array_key_exists($this->mess["IBLOCK_XML2_BAR_CODE2"], $arXMLElement))
{
$arElement["PROPERTY_VALUES"][$this->PROPERTY_MAP["CML2_BAR_CODE"]] = [
"n0" => [
"VALUE" => $arXMLElement[$this->mess["IBLOCK_XML2_BAR_CODE2"]],
"DESCRIPTION" => false,
],
];
}
elseif (array_key_exists($this->mess["IBLOCK_XML2_BAR_CODE"], $arXMLElement))
{
$arElement["PROPERTY_VALUES"][$this->PROPERTY_MAP["CML2_BAR_CODE"]] = [
"n0" => [
"VALUE" => $arXMLElement[$this->mess["IBLOCK_XML2_BAR_CODE"]],
"DESCRIPTION" => false,
],
];
}
}
if (isset($this->PROPERTY_MAP["CML2_ARTICLE"]))
{
if (array_key_exists($this->mess["IBLOCK_XML2_ARTICLE"], $arXMLElement))
{
$arElement["PROPERTY_VALUES"][$this->PROPERTY_MAP["CML2_ARTICLE"]] = [
"n0" => [
"VALUE" => $arXMLElement[$this->mess["IBLOCK_XML2_ARTICLE"]],
"DESCRIPTION" => false,
],
];
}
}
if (
array_key_exists($this->mess["IBLOCK_XML2_MANUFACTURER"], $arXMLElement)
&& isset($this->PROPERTY_MAP["CML2_MANUFACTURER"])
&& $this->PROPERTY_MAP["CML2_MANUFACTURER"] > 0
)
{
$arElement["PROPERTY_VALUES"][$this->PROPERTY_MAP["CML2_MANUFACTURER"]] = array(
"n0" => array(
"VALUE" => $this->CheckManufacturer($arXMLElement[$this->mess["IBLOCK_XML2_MANUFACTURER"]]),
"DESCRIPTION" => false,
),
);
}
if(array_key_exists($this->mess["IBLOCK_XML2_PICTURE"], $arXMLElement))
{
$rsFiles = $this->_xml_file->GetList(
array("ID" => "asc"),
array("PARENT_ID" => $arParent["ID"], "NAME" => $this->mess["IBLOCK_XML2_PICTURE"])
);
$arFile = $rsFiles->Fetch();
if($arFile)
{
$description = "";
if($arFile["ATTRIBUTES"] <> '')
{
$arAttributes = unserialize($arFile["ATTRIBUTES"], ['allowed_classes' => false]);
if(is_array($arAttributes) && array_key_exists($this->mess["IBLOCK_XML2_DESCRIPTION"], $arAttributes))
{
$description = $arAttributes[$this->mess["IBLOCK_XML2_DESCRIPTION"]];
}
}
if($arFile["VALUE"] <> '')
{
$arElement["DETAIL_PICTURE"] = $this->ResizePicture($arFile["VALUE"], $this->detail, "DETAIL_PICTURE", $this->PROPERTY_MAP["CML2_PICTURES"] ?? '');
if(is_array($arElement["DETAIL_PICTURE"]))
{
$arElement["DETAIL_PICTURE"]["description"] = $description;
$this->arFileDescriptionsMap[$arFile["VALUE"]][] = &$arElement["DETAIL_PICTURE"]["description"];
}
if(is_array($this->preview))
{
$arElement["PREVIEW_PICTURE"] = $this->ResizePicture($arFile["VALUE"], $this->preview, "PREVIEW_PICTURE");
if(is_array($arElement["PREVIEW_PICTURE"]))
{
$arElement["PREVIEW_PICTURE"]["description"] = $description;
$this->arFileDescriptionsMap[$arFile["VALUE"]][] = &$arElement["PREVIEW_PICTURE"]["description"];
}
}
}
else
{
$arElement["DETAIL_PICTURE"] = $this->MakeFileArray($this->_xml_file->GetAllChildrenArray($arFile["ID"]));
if(is_array($arElement["DETAIL_PICTURE"]))
{
$arElement["DETAIL_PICTURE"]["description"] = $description;
}
}
$prop_id = (int)($this->PROPERTY_MAP["CML2_PICTURES"] ?? 0);
if($prop_id > 0)
{
$i = 1;
while($arFile = $rsFiles->Fetch())
{
$description = "";
if($arFile["ATTRIBUTES"] <> '')
{
$arAttributes = unserialize($arFile["ATTRIBUTES"], ['allowed_classes' => false]);
if(is_array($arAttributes) && array_key_exists($this->mess["IBLOCK_XML2_DESCRIPTION"], $arAttributes))
{
$description = $arAttributes[$this->mess["IBLOCK_XML2_DESCRIPTION"]];
}
}
if($arFile["VALUE"] <> '')
$arPropFile = $this->ResizePicture($arFile["VALUE"], $this->detail, $this->PROPERTY_MAP["CML2_PICTURES"], "DETAIL_PICTURE");
else
$arPropFile = $this->MakeFileArray($this->_xml_file->GetAllChildrenArray($arFile["ID"]));
if(is_array($arPropFile))
{
$arPropFile = array(
"VALUE" => $arPropFile,
"DESCRIPTION" => $description,
);
}
$arElement["PROPERTY_VALUES"][$prop_id]["n".$i] = $arPropFile;
if ($arFile["VALUE"] <> '')
$this->arFileDescriptionsMap[$arFile["VALUE"]][] = &$arElement["PROPERTY_VALUES"][$prop_id]["n".$i]["DESCRIPTION"];
$i++;
}
if(
isset($arElement["PROPERTY_VALUES"][$prop_id])
&& is_array($arElement["PROPERTY_VALUES"][$prop_id]))
{
foreach($arElement["PROPERTY_VALUES"][$prop_id] as $PROPERTY_VALUE_ID => $PROPERTY_VALUE)
{
if(!$PROPERTY_VALUE_ID)
unset($arElement["PROPERTY_VALUES"][$prop_id][$PROPERTY_VALUE_ID]);
elseif(strncmp($PROPERTY_VALUE_ID, "n", 1) !== 0)
$arElement["PROPERTY_VALUES"][$prop_id][$PROPERTY_VALUE_ID] = array(
"tmp_name" => "",
"del" => "Y",
);
}
unset($arElement["PROPERTY_VALUES"][$prop_id]["bOld"]);
}
}
}
}
$cleanCml2FilesProperty = false;
if(
array_key_exists($this->mess["IBLOCK_XML2_FILE"], $arXMLElement)
&& isset($this->PROPERTY_MAP["CML2_FILES"])
)
{
$prop_id = $this->PROPERTY_MAP["CML2_FILES"];
$rsFiles = $this->_xml_file->GetList(
array("ID" => "asc"),
array("PARENT_ID" => $arParent["ID"], "NAME" => $this->mess["IBLOCK_XML2_FILE"])
);
$i = 1;
while($arFile = $rsFiles->Fetch())
{
if($arFile["VALUE"] <> '')
$file = $this->MakeFileArray($arFile["VALUE"], array($prop_id));
else
$file = $this->MakeFileArray($this->_xml_file->GetAllChildrenArray($arFile["ID"]));
$arElement["PROPERTY_VALUES"][$prop_id]["n".$i] = array(
"VALUE" => $file,
"DESCRIPTION" => $file["description"],
);
if($arFile["ATTRIBUTES"] <> '')
{
$desc = unserialize($arFile["ATTRIBUTES"], ['allowed_classes' => false]);
if(is_array($desc) && array_key_exists($this->mess["IBLOCK_XML2_DESCRIPTION"], $desc))
{
$arElement["PROPERTY_VALUES"][$prop_id]["n".$i]["DESCRIPTION"] = $desc[$this->mess["IBLOCK_XML2_DESCRIPTION"]];
}
}
$i++;
}
$cleanCml2FilesProperty = true;
}
if(array_key_exists($this->mess["IBLOCK_XML2_GROUPS"], $arXMLElement))
{
$arElement["IBLOCK_SECTION"] = array();
if (
!empty($arXMLElement[$this->mess["IBLOCK_XML2_GROUPS"]])
&& is_array($arXMLElement[$this->mess["IBLOCK_XML2_GROUPS"]])
)
{
foreach ($arXMLElement[$this->mess["IBLOCK_XML2_GROUPS"]] as $value)
{
if (array_key_exists($value, $this->SECTION_MAP))
$arElement["IBLOCK_SECTION"][] = $this->SECTION_MAP[$value];
}
}
if($arElement["IBLOCK_SECTION"])
$arElement["IBLOCK_SECTION_ID"] = $arElement["IBLOCK_SECTION"][0];
}
if(array_key_exists($this->mess["IBLOCK_XML2_PRICES"], $arXMLElement))
{//Collect price information for future use
$arElement["PRICES"] = array();
if (is_array($arXMLElement[$this->mess["IBLOCK_XML2_PRICES"]]))
{
foreach($arXMLElement[$this->mess["IBLOCK_XML2_PRICES"]] as $price)
{
if(isset($price[$this->mess["IBLOCK_XML2_PRICE_TYPE_ID"]]) && array_key_exists($price[$this->mess["IBLOCK_XML2_PRICE_TYPE_ID"]], $this->PRICES_MAP))
{
$price["PRICE"] = $this->PRICES_MAP[$price[$this->mess["IBLOCK_XML2_PRICE_TYPE_ID"]]];
$arElement["PRICES"][] = $price;
}
}
}
$arElement["DISCOUNTS"] = array();
if(isset($arXMLElement[$this->mess["IBLOCK_XML2_DISCOUNTS"]]))
{
foreach($arXMLElement[$this->mess["IBLOCK_XML2_DISCOUNTS"]] as $discount)
{
if(
isset($discount[$this->mess["IBLOCK_XML2_DISCOUNT_CONDITION"]])
&& $discount[$this->mess["IBLOCK_XML2_DISCOUNT_CONDITION"]]===$this->mess["IBLOCK_XML2_DISCOUNT_COND_VOLUME"]
)
{
$discount_value = $this->ToInt($discount[$this->mess["IBLOCK_XML2_DISCOUNT_COND_VALUE"]]);
$discount_percent = $this->ToFloat($discount[$this->mess["IBLOCK_XML2_DISCOUNT_COND_PERCENT"]]);
if($discount_value > 0 && $discount_percent > 0)
$arElement["DISCOUNTS"][$discount_value] = $discount_percent;
}
}
}
}
if($this->bCatalog && array_key_exists($this->mess["IBLOCK_XML2_AMOUNT"], $arXMLElement))
{
$arElement["QUANTITY_RESERVED"] = 0;
if($arDBElement)
{
$iterator = CatalogModelProduct::getList([
'select' => ['ID', 'QUANTITY_RESERVED'],
'filter' => ['=ID' => $arDBElement['ID']]
]);
$arElementTmp = $iterator->fetch();
if (isset($arElementTmp["QUANTITY_RESERVED"]))
$arElement["QUANTITY_RESERVED"] = (float)$arElementTmp["QUANTITY_RESERVED"];
unset($arElementTmp);
unset($iterator);
}
$arElement["QUANTITY"] = $this->ToFloat($arXMLElement[$this->mess["IBLOCK_XML2_AMOUNT"]]) - $arElement["QUANTITY_RESERVED"];
}
if (
isset($arXMLElement[$this->mess["IBLOCK_XML2_ITEM_ATTRIBUTES"]])
&& isset($this->PROPERTY_MAP["CML2_ATTRIBUTES"])
)
{
$arElement["PROPERTY_VALUES"][$this->PROPERTY_MAP["CML2_ATTRIBUTES"]] = array();
$i = 0;
foreach($arXMLElement[$this->mess["IBLOCK_XML2_ITEM_ATTRIBUTES"]] as $value)
{
$arElement["PROPERTY_VALUES"][$this->PROPERTY_MAP["CML2_ATTRIBUTES"]]["n".$i] = array(
"VALUE" => $value[$this->mess["IBLOCK_XML2_VALUE"]],
"DESCRIPTION" => $value[$this->mess["IBLOCK_XML2_NAME"]],
);
$i++;
}
}
$i = 0;
$weightKey = false;
if (isset($arXMLElement[$this->mess["IBLOCK_XML2_TRAITS_VALUES"]]))
{
if (isset($this->PROPERTY_MAP["CML2_TRAITS"]))
{
$arElement["PROPERTY_VALUES"][$this->PROPERTY_MAP["CML2_TRAITS"]] = [];
}
foreach($arXMLElement[$this->mess["IBLOCK_XML2_TRAITS_VALUES"]] as $value)
{
if(
!array_key_exists("PREVIEW_TEXT", $arElement)
&& $value[$this->mess["IBLOCK_XML2_NAME"]] == $this->mess["IBLOCK_XML2_FULL_TITLE2"]
)
{
$arElement["PREVIEW_TEXT"] = $value[$this->mess["IBLOCK_XML2_VALUE"]];
if(strpos($arElement["PREVIEW_TEXT"], "<") !== false)
$arElement["PREVIEW_TEXT_TYPE"] = "html";
else
$arElement["PREVIEW_TEXT_TYPE"] = "text";
}
elseif(
$value[$this->mess["IBLOCK_XML2_NAME"]] == $this->mess["IBLOCK_XML2_HTML_DESCRIPTION"]
)
{
if($value[$this->mess["IBLOCK_XML2_VALUE"]] <> '')
{
$arElement["DETAIL_TEXT"] = $value[$this->mess["IBLOCK_XML2_VALUE"]];
$arElement["DETAIL_TEXT_TYPE"] = "html";
}
}
elseif(
$value[$this->mess["IBLOCK_XML2_NAME"]] == $this->mess["IBLOCK_XML2_FILE"]
)
{
if($value[$this->mess["IBLOCK_XML2_VALUE"]] <> '')
{
$prop_id = $this->PROPERTY_MAP["CML2_FILES"] ?? 0;
$j = 1;
while (isset($arElement["PROPERTY_VALUES"][$prop_id]["n".$j]))
$j++;
$file = $this->MakeFileArray($value[$this->mess["IBLOCK_XML2_VALUE"]], array($prop_id));
if (is_array($file))
{
$arElement["PROPERTY_VALUES"][$prop_id]["n".$j] = array(
"VALUE" => $file,
"DESCRIPTION" => "",
);
unset($arElement["PROPERTY_VALUES"][$prop_id]["bOld"]);
$this->arFileDescriptionsMap[$value[$this->mess["IBLOCK_XML2_VALUE"]]][] = &$arElement["PROPERTY_VALUES"][$prop_id]["n".$j]["DESCRIPTION"];
$cleanCml2FilesProperty = true;
}
}
}
elseif(
$value[$this->mess["IBLOCK_XML2_NAME"]] == $this->mess["IBLOCK_XML2_FILE_DESCRIPTION"]
)
{
if($value[$this->mess["IBLOCK_XML2_VALUE"]] <> '')
{
[$fileName, $description] = explode("#", $value[$this->mess["IBLOCK_XML2_VALUE"]]);
if (isset($this->arFileDescriptionsMap[$fileName]))
{
foreach($this->arFileDescriptionsMap[$fileName] as $k => $tmp)
$this->arFileDescriptionsMap[$fileName][$k] = $description;
}
}
}
else
{
if($value[$this->mess["IBLOCK_XML2_NAME"]] == $this->mess["IBLOCK_XML2_WEIGHT"])
{
$arElement["BASE_WEIGHT"] = $this->ToFloat($value[$this->mess["IBLOCK_XML2_VALUE"]])*1000;
$weightKey = "n".$i;
}
if (isset($this->PROPERTY_MAP["CML2_TRAITS"]))
{
$arElement["PROPERTY_VALUES"][$this->PROPERTY_MAP["CML2_TRAITS"]]["n" . $i] = [
"VALUE" => $value[$this->mess["IBLOCK_XML2_VALUE"]],
"DESCRIPTION" => $value[$this->mess["IBLOCK_XML2_NAME"]],
];
}
$i++;
}
}
}
if (isset($arXMLElement[$this->mess["IBLOCK_XML2_WEIGHT"]]))
{
if (isset($this->PROPERTY_MAP["CML2_TRAITS"]))
{
if ($weightKey === false)
{
if (!isset($arElement["PROPERTY_VALUES"][$this->PROPERTY_MAP["CML2_TRAITS"]]))
{
$arElement["PROPERTY_VALUES"][$this->PROPERTY_MAP["CML2_TRAITS"]] = [];
$weightKey = "n0";
}
else // $weightKey === false && isset($arElement["PROPERTY_VALUES"][$this->PROPERTY_MAP["CML2_TRAITS"]])
{
$weightKey = "n" . $i;
}
}
$arElement["PROPERTY_VALUES"][$this->PROPERTY_MAP["CML2_TRAITS"]][$weightKey] = [
"VALUE" => $arXMLElement[$this->mess["IBLOCK_XML2_WEIGHT"]],
"DESCRIPTION" => $this->mess["IBLOCK_XML2_WEIGHT"],
];
}
$arElement["BASE_WEIGHT"] = $this->ToFloat($arXMLElement[$this->mess["IBLOCK_XML2_WEIGHT"]])*1000;
}
if ($this->bCatalog)
{
$arElement = array_merge(
$arElement,
$this->getProductFieldsFromXml($arXMLElement)
);
}
if ($cleanCml2FilesProperty)
{
$prop_id = $this->PROPERTY_MAP["CML2_FILES"] ?? 0;
if (
isset($arElement["PROPERTY_VALUES"][$prop_id])
&& is_array($arElement["PROPERTY_VALUES"][$prop_id])
)
{
foreach($arElement["PROPERTY_VALUES"][$prop_id] as $PROPERTY_VALUE_ID => $PROPERTY_VALUE)
{
if(!$PROPERTY_VALUE_ID)
unset($arElement["PROPERTY_VALUES"][$prop_id][$PROPERTY_VALUE_ID]);
elseif(strncmp($PROPERTY_VALUE_ID, "n", 1) !== 0)
$arElement["PROPERTY_VALUES"][$prop_id][$PROPERTY_VALUE_ID] = array(
"tmp_name" => "",
"del" => "Y",
);
}
unset($arElement["PROPERTY_VALUES"][$prop_id]["bOld"]);
}
}
if (isset($arXMLElement[$this->mess["IBLOCK_XML2_TAXES_VALUES"]]))
{
if (isset($this->PROPERTY_MAP["CML2_TAXES"]))
{
$arElement["PROPERTY_VALUES"][$this->PROPERTY_MAP["CML2_TAXES"]] = [];
$i = 0;
foreach ($arXMLElement[$this->mess["IBLOCK_XML2_TAXES_VALUES"]] as $value)
{
$arElement["PROPERTY_VALUES"][$this->PROPERTY_MAP["CML2_TAXES"]]["n" . $i] = [
"VALUE" => $value[$this->mess["IBLOCK_XML2_TAX_VALUE"]],
"DESCRIPTION" => $value[$this->mess["IBLOCK_XML2_NAME"]],
];
$i++;
}
}
}
$rsBaseUnit = $this->_xml_file->GetList(
array("ID" => "asc"),
array(
"> array($arParent["LEFT_MARGIN"], $arParent["RIGHT_MARGIN"]),
"NAME" => $this->mess["IBLOCK_XML2_BASE_UNIT"],
),
array("ID", "ATTRIBUTES")
);
while ($arBaseUnit = $rsBaseUnit->Fetch())
{
if($arBaseUnit["ATTRIBUTES"] <> '')
{
$info = unserialize($arBaseUnit["ATTRIBUTES"], ['allowed_classes' => false]);
if(
is_array($info)
&& array_key_exists($this->mess["IBLOCK_XML2_CODE"], $info)
)
{
$arXMLElement[$this->mess["IBLOCK_XML2_BASE_UNIT"]] = $info[$this->mess["IBLOCK_XML2_CODE"]];
}
}
}
if(isset($arXMLElement[$this->mess["IBLOCK_XML2_BASE_UNIT"]]))
{
$unitData = $this->convertBaseUnitFromXmlToPropertyValue($arXMLElement[$this->mess["IBLOCK_XML2_BASE_UNIT"]]);
if (isset($this->PROPERTY_MAP["CML2_BASE_UNIT"]))
{
$arElement["PROPERTY_VALUES"][$this->PROPERTY_MAP["CML2_BASE_UNIT"]] = [
"n0" => $unitData,
];
}
if ($unitData["DESCRIPTION"])
{
$arElement['MEASURE'] = $unitData["DESCRIPTION"];
}
}
if(isset($arXMLElement[$this->mess["IBLOCK_XML2_PROPERTIES_VALUES"]]))
{
foreach($arXMLElement[$this->mess["IBLOCK_XML2_PROPERTIES_VALUES"]] as $value)
{
if(!array_key_exists($this->mess["IBLOCK_XML2_ID"], $value))
continue;
$prop_id = $value[$this->mess["IBLOCK_XML2_ID"]];
unset($value[$this->mess["IBLOCK_XML2_ID"]]);
//Handle properties which is actually element fields
if(!array_key_exists($prop_id, $this->PROPERTY_MAP))
{
if($prop_id == "CML2_CODE")
$arElement["CODE"] = $value[$this->mess["IBLOCK_XML2_VALUE"]] ?? "";
elseif($prop_id == "CML2_ACTIVE")
{
$value = array_pop($value);
$arElement["ACTIVE"] = ($value=="true") || intval($value)? "Y": "N";
}
elseif($prop_id == "CML2_SORT")
$arElement["SORT"] = array_pop($value);
elseif($prop_id == "CML2_ACTIVE_FROM")
$arElement["ACTIVE_FROM"] = CDatabase::FormatDate(array_pop($value), "YYYY-MM-DD HH:MI:SS", CLang::GetDateFormat("FULL"));
elseif($prop_id == "CML2_ACTIVE_TO")
$arElement["ACTIVE_TO"] = CDatabase::FormatDate(array_pop($value), "YYYY-MM-DD HH:MI:SS", CLang::GetDateFormat("FULL"));
elseif($prop_id == "CML2_PREVIEW_TEXT")
{
if(array_key_exists($this->mess["IBLOCK_XML2_VALUE"], $value))
{
if(isset($value[$this->mess["IBLOCK_XML2_VALUE"]]))
$arElement["PREVIEW_TEXT"] = $value[$this->mess["IBLOCK_XML2_VALUE"]];
else
$arElement["PREVIEW_TEXT"] = "";
if(isset($value[$this->mess["IBLOCK_XML2_TYPE"]]))
$arElement["PREVIEW_TEXT_TYPE"] = $value[$this->mess["IBLOCK_XML2_TYPE"]];
else
$arElement["PREVIEW_TEXT_TYPE"] = "html";
}
}
elseif($prop_id == "CML2_DETAIL_TEXT")
{
if(array_key_exists($this->mess["IBLOCK_XML2_VALUE"], $value))
{
if(isset($value[$this->mess["IBLOCK_XML2_VALUE"]]))
$arElement["DETAIL_TEXT"] = $value[$this->mess["IBLOCK_XML2_VALUE"]];
else
$arElement["DETAIL_TEXT"] = "";
if(isset($value[$this->mess["IBLOCK_XML2_TYPE"]]))
$arElement["DETAIL_TEXT_TYPE"] = $value[$this->mess["IBLOCK_XML2_TYPE"]];
else
$arElement["DETAIL_TEXT_TYPE"] = "html";
}
}
elseif($prop_id == "CML2_PREVIEW_PICTURE")
{
if(!is_array($this->preview) || !$arElement["PREVIEW_PICTURE"])
{
$arElement["PREVIEW_PICTURE"] = $this->MakeFileArray($value[$this->mess["IBLOCK_XML2_VALUE"]], array("PREVIEW_PICTURE"));
$arElement["PREVIEW_PICTURE"]["COPY_FILE"] = "Y";
}
}
continue;
}
$prop_id = $this->PROPERTY_MAP[$prop_id];
$prop_type = $this->arProperties[$prop_id]["PROPERTY_TYPE"];
if(!array_key_exists($prop_id, $arElement["PROPERTY_VALUES"]))
$arElement["PROPERTY_VALUES"][$prop_id] = array();
//check for bitrix extended format
if(array_key_exists($this->mess["IBLOCK_XML2_PROPERTY_VALUE"], $value))
{
$i = 1;
$strPV = $this->mess["IBLOCK_XML2_PROPERTY_VALUE"];
$lPV = mb_strlen($strPV);
foreach($value as $k=>$prop_value)
{
if ($prop_value === null)
{
continue;
}
if(mb_substr($k, 0, $lPV) === $strPV)
{
if(array_key_exists($this->mess["IBLOCK_XML2_SERIALIZED"], $prop_value))
$prop_value[$this->mess["IBLOCK_XML2_VALUE"]] = $this->Unserialize($prop_value[$this->mess["IBLOCK_XML2_VALUE"]]);
if($prop_type=="F")
{
$prop_value[$this->mess["IBLOCK_XML2_VALUE"]] = $this->MakeFileArray($prop_value[$this->mess["IBLOCK_XML2_VALUE"]], array($prop_id));
}
elseif($prop_type=="G")
$prop_value[$this->mess["IBLOCK_XML2_VALUE"]] = $this->GetSectionByXML_ID($this->arProperties[$prop_id]["LINK_IBLOCK_ID"], $prop_value[$this->mess["IBLOCK_XML2_VALUE"]]);
elseif($prop_type=="E")
$prop_value[$this->mess["IBLOCK_XML2_VALUE"]] = $this->GetElementByXML_ID($this->arProperties[$prop_id]["LINK_IBLOCK_ID"], $prop_value[$this->mess["IBLOCK_XML2_VALUE"]]);
elseif($prop_type=="L")
$prop_value[$this->mess["IBLOCK_XML2_VALUE"]] = $this->GetEnumByXML_ID($this->arProperties[$prop_id]["ID"], $prop_value[$this->mess["IBLOCK_XML2_VALUE"]]);
if(array_key_exists("bOld", $arElement["PROPERTY_VALUES"][$prop_id]))
{
if($prop_type=="F")
{
foreach($arElement["PROPERTY_VALUES"][$prop_id] as $PROPERTY_VALUE_ID => $PROPERTY_VALUE)
$arElement["PROPERTY_VALUES"][$prop_id][$PROPERTY_VALUE_ID] = array(
"tmp_name" => "",
"del" => "Y",
);
unset($arElement["PROPERTY_VALUES"][$prop_id]["bOld"]);
}
else
$arElement["PROPERTY_VALUES"][$prop_id] = array();
}
$arElement["PROPERTY_VALUES"][$prop_id]["n".$i] = array(
"VALUE" => $prop_value[$this->mess["IBLOCK_XML2_VALUE"]],
"DESCRIPTION" => $prop_value[$this->mess["IBLOCK_XML2_DESCRIPTION"]] ?? null,
);
$i++;
}
}
}
else
{
if($prop_type == "L" && !array_key_exists($this->mess["IBLOCK_XML2_VALUE_ID"], $value))
$l_key = $this->mess["IBLOCK_XML2_VALUE"];
else
$l_key = $this->mess["IBLOCK_XML2_VALUE_ID"];
$i = 0;
foreach($value as $k=>$prop_value)
{
if(array_key_exists("bOld", $arElement["PROPERTY_VALUES"][$prop_id]))
{
if($prop_type=="F")
{
foreach($arElement["PROPERTY_VALUES"][$prop_id] as $PROPERTY_VALUE_ID => $PROPERTY_VALUE)
$arElement["PROPERTY_VALUES"][$prop_id][$PROPERTY_VALUE_ID] = array(
"tmp_name" => "",
"del" => "Y",
);
unset($arElement["PROPERTY_VALUES"][$prop_id]["bOld"]);
}
else
{
$arElement["PROPERTY_VALUES"][$prop_id] = array();
}
}
if($prop_type == "L" && $k == $l_key)
{
$prop_value = $this->GetEnumByXML_ID($this->arProperties[$prop_id]["ID"], $prop_value);
}
elseif($prop_type == "N" && isset($this->next_step["sdp"]))
{
if ($prop_value <> '')
$prop_value = $this->ToFloat($prop_value);
}
$arElement["PROPERTY_VALUES"][$prop_id]["n".$i] = array(
"VALUE" => $prop_value,
"DESCRIPTION" => false,
);
$i++;
}
}
}
}
//If there is no BaseUnit specified check prices for it
if (isset($this->PROPERTY_MAP["CML2_BASE_UNIT"]))
{
if (
(
!array_key_exists($this->PROPERTY_MAP["CML2_BASE_UNIT"], $arElement["PROPERTY_VALUES"])
|| (
is_array($arElement["PROPERTY_VALUES"][$this->PROPERTY_MAP["CML2_BASE_UNIT"]])
&& array_key_exists("bOld",
$arElement["PROPERTY_VALUES"][$this->PROPERTY_MAP["CML2_BASE_UNIT"]])
)
)
&& isset($arXMLElement[$this->mess["IBLOCK_XML2_PRICES"]])
)
{
foreach ($arXMLElement[$this->mess["IBLOCK_XML2_PRICES"]] as $price)
{
if (
isset($price[$this->mess["IBLOCK_XML2_PRICE_TYPE_ID"]])
&& array_key_exists($price[$this->mess["IBLOCK_XML2_PRICE_TYPE_ID"]], $this->PRICES_MAP)
&& array_key_exists($this->mess["IBLOCK_XML2_MEASURE"], $price)
)
{
$arElement["PROPERTY_VALUES"][$this->PROPERTY_MAP["CML2_BASE_UNIT"]] = [
"n0" => $this->convertBaseUnitFromXmlToPropertyValue($price[$this->mess["IBLOCK_XML2_MEASURE"]]),
];
break;
}
}
}
}
if($arDBElement)
{
foreach($arElement["PROPERTY_VALUES"] as $prop_id=>$prop)
{
if(is_array($arElement["PROPERTY_VALUES"][$prop_id]) && array_key_exists("bOld", $arElement["PROPERTY_VALUES"][$prop_id]))
{
if($this->arProperties[$prop_id]["PROPERTY_TYPE"]=="F")
unset($arElement["PROPERTY_VALUES"][$prop_id]);
else
unset($arElement["PROPERTY_VALUES"][$prop_id]["bOld"]);
}
}
if (!isset($arElement['MODIFIED_BY']) || (int)$arElement['MODIFIED_BY'] <= 0)
{
if ($this->currentUserId > 0)
{
$arElement['MODIFIED_BY'] = $this->currentUserId;
}
}
if(!array_key_exists("CODE", $arElement) && is_array($this->translit_on_update))
{
$CODE = CUtil::translit($arElement["NAME"], LANGUAGE_ID, $this->translit_on_update);
$CODE = $this->CheckElementCode($this->next_step["IBLOCK_ID"], $arDBElement["ID"], $CODE);
if($CODE !== false)
$arElement["CODE"] = $CODE;
}
//Check if detail picture hasn't been changed
if (
isset($arElement["DETAIL_PICTURE"])
&& !isset($arElement["PREVIEW_PICTURE"])
&& is_array($arElement["DETAIL_PICTURE"])
&& isset($arElement["DETAIL_PICTURE"]["external_id"])
&& $this->arElementFilesId
&& $this->arElementFilesId["DETAIL_PICTURE"]
&& isset($this->arElementFiles[$this->arElementFilesId["DETAIL_PICTURE"][0]])
&& $this->arElementFiles[$this->arElementFilesId["DETAIL_PICTURE"][0]]["EXTERNAL_ID"] === $arElement["DETAIL_PICTURE"]["external_id"]
&& $this->arElementFiles[$this->arElementFilesId["DETAIL_PICTURE"][0]]["DESCRIPTION"] === $arElement["DETAIL_PICTURE"]["description"]
)
{
unset($arElement["DETAIL_PICTURE"]);
}
$updateResult = $obElement->Update($arDBElement["ID"], $arElement, $bWF, true, $this->iblock_resize);
//In case element was not active in database we have to activate its offers
if($arDBElement["ACTIVE"] != "Y")
{
$this->ChangeOffersStatus($arDBElement["ID"], "Y", $bWF);
}
$arElement["ID"] = $arDBElement["ID"];
if($updateResult)
{
$counter["UPD"]++;
}
else
{
$this->LAST_ERROR = $obElement->LAST_ERROR;
$counter["ERR"]++;
}
}
else
{
if(!array_key_exists("CODE", $arElement) && is_array($this->translit_on_add))
{
$CODE = CUtil::translit($arElement["NAME"], LANGUAGE_ID, $this->translit_on_add);
$CODE = $this->CheckElementCode($this->next_step["IBLOCK_ID"], 0, $CODE);
if($CODE !== false)
$arElement["CODE"] = $CODE;
}
$arElement["IBLOCK_ID"] = $this->next_step["IBLOCK_ID"];
$this->fillDefaultPropertyValues($arElement, $this->arProperties);
$arElement["ID"] = $obElement->Add($arElement, $bWF, true, $this->iblock_resize);
if($arElement["ID"])
{
$counter["ADD"]++;
}
else
{
$this->LAST_ERROR = $obElement->LAST_ERROR;
$counter["ERR"]++;
}
}
}
elseif(array_key_exists($this->mess["IBLOCK_XML2_PRICES"], $arXMLElement))
{
//Collect price information for future use
$arElement["PRICES"] = array();
if (is_array($arXMLElement[$this->mess["IBLOCK_XML2_PRICES"]]))
{
foreach($arXMLElement[$this->mess["IBLOCK_XML2_PRICES"]] as $price)
{
if(isset($price[$this->mess["IBLOCK_XML2_PRICE_TYPE_ID"]]) && array_key_exists($price[$this->mess["IBLOCK_XML2_PRICE_TYPE_ID"]], $this->PRICES_MAP))
{
$price["PRICE"] = $this->PRICES_MAP[$price[$this->mess["IBLOCK_XML2_PRICE_TYPE_ID"]]];
$arElement["PRICES"][] = $price;
}
}
}
$arElement["DISCOUNTS"] = array();
if(isset($arXMLElement[$this->mess["IBLOCK_XML2_DISCOUNTS"]]))
{
foreach($arXMLElement[$this->mess["IBLOCK_XML2_DISCOUNTS"]] as $discount)
{
if(
isset($discount[$this->mess["IBLOCK_XML2_DISCOUNT_CONDITION"]])
&& $discount[$this->mess["IBLOCK_XML2_DISCOUNT_CONDITION"]]===$this->mess["IBLOCK_XML2_DISCOUNT_COND_VOLUME"]
)
{
$discount_value = $this->ToInt($discount[$this->mess["IBLOCK_XML2_DISCOUNT_COND_VALUE"]]);
$discount_percent = $this->ToFloat($discount[$this->mess["IBLOCK_XML2_DISCOUNT_COND_PERCENT"]]);
if($discount_value > 0 && $discount_percent > 0)
$arElement["DISCOUNTS"][$discount_value] = $discount_percent;
}
}
}
if ($arDBElement)
{
$arElement["ID"] = $arDBElement["ID"];
$counter["UPD"]++;
}
}
if(isset($arXMLElement[$this->mess["IBLOCK_XML2_STORE_AMOUNT_LIST"]]))
{
$arElement["STORE_AMOUNT"] = array();
foreach($arXMLElement[$this->mess["IBLOCK_XML2_STORE_AMOUNT_LIST"]] as $storeAmount)
{
if(isset($storeAmount[$this->mess["IBLOCK_XML2_STORE_ID"]]))
{
$storeXMLID = $storeAmount[$this->mess["IBLOCK_XML2_STORE_ID"]];
$amount = $this->ToFloat($storeAmount[$this->mess["IBLOCK_XML2_AMOUNT"]]);
$arElement["STORE_AMOUNT"][$storeXMLID] = $amount;
}
}
}
elseif(
array_key_exists($this->mess["IBLOCK_XML2_STORES"], $arXMLElement)
|| array_key_exists($this->mess["IBLOCK_XML2_STORE"], $arXMLElement)
)
{
$arElement["STORE_AMOUNT"] = array();
$rsStores = $this->_xml_file->GetList(
array("ID" => "asc"),
array(
"> array($arParent["LEFT_MARGIN"], $arParent["RIGHT_MARGIN"]),
"NAME" => $this->mess["IBLOCK_XML2_STORE"],
),
array("ID", "ATTRIBUTES")
);
while ($arStore = $rsStores->Fetch())
{
if($arStore["ATTRIBUTES"] <> '')
{
$info = unserialize($arStore["ATTRIBUTES"], ['allowed_classes' => false]);
if(
is_array($info)
&& array_key_exists($this->mess["IBLOCK_XML2_STORE_ID"], $info)
&& array_key_exists($this->mess["IBLOCK_XML2_STORE_AMOUNT"], $info)
)
{
$arElement["STORE_AMOUNT"][$info[$this->mess["IBLOCK_XML2_STORE_ID"]]] = $this->ToFloat($info[$this->mess["IBLOCK_XML2_STORE_AMOUNT"]]);
}
}
}
}
if($bMatch && $this->use_crc)
{
//nothing to do
}
elseif($arElement["ID"] && $this->bCatalog && $this->isCatalogIblock)
{
$arProduct = array(
"ID" => $arElement["ID"],
);
if(isset($arElement["QUANTITY"]))
$arProduct["QUANTITY"] = (float)$arElement["QUANTITY"];
elseif(isset($arElement["STORE_AMOUNT"]) && !empty($arElement["STORE_AMOUNT"]))
$arProduct["QUANTITY"] = $this->countTotalQuantity($arElement["STORE_AMOUNT"]);
$CML_LINK = '';
$CML_LINK_ELEMENT = 0;
if (isset($this->PROPERTY_MAP["CML2_LINK"]))
{
$CML_LINK = $this->PROPERTY_MAP["CML2_LINK"];
if (isset($arElement["PROPERTY_VALUES"][$CML_LINK]))
{
$CML_LINK_ELEMENT = $arElement["PROPERTY_VALUES"][$CML_LINK];
}
}
if (is_array($CML_LINK_ELEMENT) && isset($CML_LINK_ELEMENT["n0"]))
{
$CML_LINK_ELEMENT = $CML_LINK_ELEMENT["n0"];
}
if (is_array($CML_LINK_ELEMENT) && isset($CML_LINK_ELEMENT["VALUE"]))
{
$CML_LINK_ELEMENT = $CML_LINK_ELEMENT["VALUE"];
}
if(isset($arElement["BASE_WEIGHT"]))
{
$arProduct["WEIGHT"] = (float)$arElement["BASE_WEIGHT"];
}
elseif ($CML_LINK_ELEMENT > 0)
{
$rsWeight = CIBlockElement::GetProperty($this->arProperties[$CML_LINK]["LINK_IBLOCK_ID"], $CML_LINK_ELEMENT, array(), array("CODE" => "CML2_TRAITS"));
while($arWeight = $rsWeight->Fetch())
{
if($arWeight["DESCRIPTION"] == $this->mess["IBLOCK_XML2_WEIGHT"])
$arProduct["WEIGHT"] = $this->ToFloat($arWeight["VALUE"])*1000;
}
}
if ($CML_LINK_ELEMENT > 0)
{
$rsUnit = CIBlockElement::GetProperty($this->arProperties[$CML_LINK]["LINK_IBLOCK_ID"], $CML_LINK_ELEMENT, array(), array("CODE" => "CML2_BASE_UNIT"));
while($arUnit = $rsUnit->Fetch())
{
if($arUnit["DESCRIPTION"] > 0)
$arProduct["MEASURE"] = $arUnit["DESCRIPTION"];
}
}
if(isset($arElement["PRICES"]))
{
//Here start VAT handling
//Check if all the taxes exists in BSM catalog
$arTaxMap = array();
if ($CML_LINK !== '' && isset($this->arProperties[$CML_LINK]) && $CML_LINK_ELEMENT > 0)
{
$rsTaxProperty = CIBlockElement::GetProperty(
$this->arProperties[$CML_LINK]["LINK_IBLOCK_ID"],
$CML_LINK_ELEMENT,
"sort",
"asc",
[
"CODE" => "CML2_TAXES",
]
);
while ($arTaxProperty = $rsTaxProperty->Fetch())
{
if (
$arTaxProperty["DESCRIPTION"] <> ''
&& !array_key_exists($arTaxProperty["DESCRIPTION"], $arTaxMap)
)
{
if ($arTaxProperty["VALUE"] === '' || !is_numeric($arTaxProperty["VALUE"]))
{
$taxValue = null;
}
else
{
$taxValue = $this->ToFloat($arTaxProperty["VALUE"]);
}
$arTaxMap[$arTaxProperty["DESCRIPTION"]] = [
"RATE" => $this->ToFloat($arTaxProperty["VALUE"]),
"ID" => $this->CheckTax($arTaxProperty["DESCRIPTION"], $taxValue),
];
}
}
unset($rsTaxProperty);
}
//First find out if all the prices have TAX_IN_SUM true
$TAX_IN_SUM = "Y";
foreach($arElement["PRICES"] as $price)
{
if($price["PRICE"]["TAX_IN_SUM"] !== "true")
{
$TAX_IN_SUM = "N";
break;
}
}
//If there was found not included tax we'll make sure
//that all prices has the same flag
if($TAX_IN_SUM === "N")
{
foreach($arElement["PRICES"] as $price)
{
if($price["PRICE"]["TAX_IN_SUM"] !== "false")
{
$TAX_IN_SUM = "Y";
break;
}
}
//Check if there is a mix of tax in sum
//and correct it by recalculating all the prices
if($TAX_IN_SUM === "Y")
{
foreach($arElement["PRICES"] as $key=>$price)
{
if($price["PRICE"]["TAX_IN_SUM"] !== "true")
{
$TAX_NAME = $price["PRICE"]["TAX_NAME"];
if(array_key_exists($TAX_NAME, $arTaxMap))
{
$PRICE_WO_TAX = $this->ToFloat($price[$this->mess["IBLOCK_XML2_PRICE_FOR_ONE"]]);
$PRICE = $PRICE_WO_TAX + ($PRICE_WO_TAX / 100.0 * $arTaxMap[$TAX_NAME]["RATE"]);
$arElement["PRICES"][$key][$this->mess["IBLOCK_XML2_PRICE_FOR_ONE"]] = $PRICE;
}
}
}
}
}
foreach($arElement["PRICES"] as $price)
{
$TAX_NAME = $price["PRICE"]["TAX_NAME"];
if(array_key_exists($TAX_NAME, $arTaxMap))
{
$arProduct["VAT_ID"] = $arTaxMap[$TAX_NAME]["ID"];
break;
}
}
$arProduct["VAT_INCLUDED"] = $TAX_IN_SUM;
}
$arProduct = array_merge(
$arProduct,
$this->getPreparedProductFieldsFromArray($arElement)
);
$productCache = CatalogModelProduct::getCacheItem($arProduct['ID'], true);
if (!empty($productCache))
{
$productResult = CatalogModelProduct::update(
$arProduct['ID'],
array(
'fields' => $arProduct,
'external_fields' => array(
'IBLOCK_ID' => $this->next_step["IBLOCK_ID"]
)
)
);
}
else
{
$productResult = CatalogModelProduct::add(
array(
'fields' => $arProduct,
'external_fields' => array(
'IBLOCK_ID' => $this->next_step["IBLOCK_ID"]
)
)
);
}
if ($productResult->isSuccess())
{
//TODO: replace this code after upload measure ratio from 1C
$iterator = BitrixCatalogMeasureRatioTable::getList(array(
'select' => array('ID'),
'filter' => array('=PRODUCT_ID' => $arElement['ID'])
));
$ratioRow = $iterator->fetch();
if (empty($ratioRow))
{
$ratioResult = BitrixCatalogMeasureRatioTable::add(array(
'PRODUCT_ID' => $arElement['ID'],
'RATIO' => 1,
'IS_DEFAULT' => 'Y'
));
unset($ratioResult);
}
unset($ratioRow, $iterator);
}
if(isset($arElement["PRICES"]))
$this->SetProductPrice($arElement["ID"], $arElement["PRICES"], $arElement["DISCOUNTS"]);
if(isset($arElement["STORE_AMOUNT"]))
$this->ImportStoresAmount($arElement["STORE_AMOUNT"], $arElement["ID"], $counter);
}
return $arElement["ID"];
}