function updateElement(&$arFields)
{
$OPTIONS = Options::getInstance();
$arFields["NAME"] = trim($arFields["NAME"]);
if (isset($arFields["CODE"])) {
$arFields["CODE"] = trim($arFields["CODE"]);
}
$modelPropID = getPropertyIdByName('MODEL');
$productPArticleID = getPropertyIdByName('CML2_ARTICLE');
$propertyColorID = getPropertyIdByName('COLOR');
$propertySizeID = getPropertyIdByName('SIZE');
$manufPropID = getPropertyIdByName('BRAND');
$propertySkuID = getPropertyIdByName('CML2_LINK', 'offers_catalog');
$is_import = ((isset($_REQUEST["Import"]) && $_REQUEST["Import"] == "Y")
|| (isset($_REQUEST["mode"]) && $_REQUEST["mode"] == "import"));
if (CModule::IncludeModule("iblock") && $is_import) {
if ($arFields["IBLOCK_ID"] == $OPTIONS->getProperty("iblock_products")) {
$res = CIBlockElement::GetList( //get data for this product from the system
array("show_counter" => "desc"),
array("IBLOCK_ID" => $OPTIONS->getProperty("iblock_products"), "ID" => $arFields['ID']),
false,
array("nTopCount" => 1),
array("ID", "IBLOCK_ID", "CODE")
);
if ($ar_res = $res->Fetch()) {
/* разделы элемента не сбиваем, а добавляем, если есть обновления */
if (!empty($arFields["IBLOCK_SECTION"])) {
$arSections = array();
$db_groups = CIBlockElement::GetElementGroups($ar_res["ID"], true, array("ID"));
while ($ar_group = $db_groups->Fetch()) {
$arSections[] = $ar_group["ID"];
}
if (!array_intersect($arFields["IBLOCK_SECTION"], $arSections)) {
$arFields["IBLOCK_SECTION"] = array_merge($arSections, $arFields["IBLOCK_SECTION"]);
} else {
$arFields["IBLOCK_SECTION"] = $arSections;
}
}
if ($ar_res["CODE"] != $arFields["CODE"]) {
$arFields["CODE"] = $ar_res["CODE"];
}
if (isset($arFields['PROPERTY_VALUES'])) {
// Производетель
if ($arFields['IBLOCK_ID'] == $OPTIONS->getProperty("iblock_products")) {
$manuf = current($arFields['PROPERTY_VALUES'][$manufPropID]);
unset($arFields['PROPERTY_VALUES'][$manufPropID]);
$arFields['PROPERTY_VALUES'][$manufPropID]["n0"]["VALUE"] = self::reference(
"Brands", trim($manuf["VALUE"])
);
}
//get my native offer
$curArticleId = current($arFields['PROPERTY_VALUES'][$productPArticleID]);
$rsOffers = CIBlockElement::GetList(
array("ID" => "ASC"),
array(
'IBLOCK_ID' => $OPTIONS->getProperty("iblock_offers"),
'PROPERTY_CML2_ARTICLE' => $curArticleId["VALUE"]
)
);
if (($arOffer = $rsOffers->GetNext())) {
$newSize = current($arFields['PROPERTY_VALUES'][$propertySizeID]);
$newColor = current($arFields['PROPERTY_VALUES'][$propertyColorID]);
$msg = "[updateElement] properties update: article - " . $curArticleId["VALUE"] . ", newColor: "
. $newColor["VALUE"]
. ", newSize: " . $newSize["VALUE"];
DebugInfo::log($msg);
CIBlockElement::SetPropertyValueCode(
$arOffer['ID'], 'CML2_COLOR', self::reference("Colors", trim($newColor["VALUE"]))
);
CIBlockElement::SetPropertyValueCode(
$arOffer['ID'], 'CML2_SIZE', self::reference("Sizes", trim($newSize["VALUE"]))
);
$arFields['PROPERTY_VALUES'][$propertyColorID] = self::reference(
"Colors", trim($newColor["VALUE"])
);
}
}
//end update
$model = "";
if (isset($modelPropID) && !empty($modelPropID)) {
$modelWasChanged = isset($arFields['PROPERTY_VALUES'][$modelPropID]);
if (!$modelWasChanged) {
DebugInfo::log("-model not changed");
return true;
}
$model = current($arFields['PROPERTY_VALUES'][$modelPropID]);
DebugInfo::log("new model: " . $model["VALUE"]);
$db_props = CIBlockElement::GetProperty(
$OPTIONS->getProperty("iblock_products"), $arFields["ID"], array("sort" => "asc"),
Array("CODE" => "MODEL")
);
if (($ar_props = $db_props->Fetch())) {
$arFields['PROPERTY_VALUES'][$modelPropID] = $ar_props["VALUE"];
$arFields['NAME'] = $ar_props["VALUE"];
}
}
}
} else {
$model = current($arFields['PROPERTY_VALUES'][$modelPropID]);
$oldParent = current($arFields['PROPERTY_VALUES'][$propertySkuID]);
if (!empty($model["VALUE"])) {
$parent_product = CIBlockElement::GetList(
array("show_counter" => "desc"),
array('IBLOCK_ID' => $OPTIONS->getProperty("iblock_products"), 'PROPERTY_MODEL' => $model["VALUE"]),
false,
array("nTopCount" => 1),
Array('ID', 'IBLOCK_ID')
);
if (($prod = $parent_product->Fetch())) {
if ($oldParent != $prod["ID"]) {
$arFields['PROPERTY_VALUES'][$propertySkuID] = $prod["ID"];
DebugInfo::log("model set to " . $prod["ID"]);
}
} else {
$OfferItem = CIBlockElement::GetList(
array("ID" => "ASC"),
array('IBLOCK_ID' => $OPTIONS->getProperty("iblock_offers"), 'XML_ID' => $arFields['XML_ID']),
false,
false,
Array('NAME', 'PROPERTY_CML2_LINK')
);
if ($res = $OfferItem->Fetch()) { //save offers in their groups
$arFields['PROPERTY_VALUES'][$propertySkuID]
= $res['PROPERTY_CML2_LINK_VALUE'];
$str2log = "offer[" . $arFields["ID"]
. "] was changed CML2_LINK from " . json_encode(
$arFields['PROPERTY_VALUES'][$propertySkuID]
) . " to pid: " . $res['PROPERTY_CML2_LINK_VALUE'] . " \""
. $arFields["NAME"] . "\" ~> \"" . $res["NAME"] . "\"";
DebugInfo::log($str2log);
}
}
}
}
} else {
DebugInfo::log("not import...");
}
}