- Модуль: iblock
- Путь к файлу: ~/bitrix/modules/iblock/classes/general/cml2.php
- Класс: CIBlockCMLImport
- Вызов: CIBlockCMLImport::ImportPropertyEnum
function ImportPropertyEnum($arProperty, $arEnumXmlNodes)
{
$arEnumMap = array();
$arProperty["VALUES"] = array();
$rsEnum = CIBlockProperty::GetPropertyEnum($arProperty["ID"]);
while($arEnum = $rsEnum->Fetch())
{
$arProperty["VALUES"][$arEnum["ID"]] = $arEnum;
$arEnumMap[$arEnum["XML_ID"]] = &$arProperty["VALUES"][$arEnum["ID"]];
}
$i = 0;
foreach($arEnumXmlNodes as $arE)
{
if(
$arE["NAME"] == $this->mess["IBLOCK_XML2_CHOICE"]
|| $arE["NAME"] == $this->mess["IBLOCK_XML2_CHOICE_VALUE"]
)
{
$arE = $this->_xml_file->GetAllChildrenArray($arE);
if(isset($arE[$this->mess["IBLOCK_XML2_ID"]]))
{
$xml_id = $arE[$this->mess["IBLOCK_XML2_ID"]];
if(!array_key_exists($xml_id, $arEnumMap))
{
$arProperty["VALUES"]["n".$i] = array();
$arEnumMap[$xml_id] = &$arProperty["VALUES"]["n".$i];
$i++;
}
$arEnumMap[$xml_id]["CML2_EXPORT_FLAG"] = true;
$arEnumMap[$xml_id]["XML_ID"] = $xml_id;
if(isset($arE[$this->mess["IBLOCK_XML2_VALUE"]]))
$arEnumMap[$xml_id]["VALUE"] = $arE[$this->mess["IBLOCK_XML2_VALUE"]];
if(isset($arE[$this->mess["IBLOCK_XML2_BY_DEFAULT"]]))
$arEnumMap[$xml_id]["DEF"] = ($arE[$this->mess["IBLOCK_XML2_BY_DEFAULT"]]=="true") || intval($arE[$this->mess["IBLOCK_XML2_BY_DEFAULT"]])? "Y": "N";
if(isset($arE[$this->mess["IBLOCK_XML2_SORT"]]))
$arEnumMap[$xml_id]["SORT"] = intval($arE[$this->mess["IBLOCK_XML2_SORT"]]);
}
}
elseif(
$arE["NAME"] == $this->mess["IBLOCK_XML2_TYPE_LIST"]
)
{
$arE = $this->_xml_file->GetAllChildrenArray($arE);
if(isset($arE[$this->mess["IBLOCK_XML2_VALUE_ID"]]))
{
$xml_id = $arE[$this->mess["IBLOCK_XML2_VALUE_ID"]];
if(!array_key_exists($xml_id, $arEnumMap))
{
$arProperty["VALUES"]["n".$i] = array();
$arEnumMap[$xml_id] = &$arProperty["VALUES"]["n".$i];
$i++;
}
$arEnumMap[$xml_id]["CML2_EXPORT_FLAG"] = true;
$arEnumMap[$xml_id]["XML_ID"] = $xml_id;
if(isset($arE[$this->mess["IBLOCK_XML2_VALUE"]]))
$arEnumMap[$xml_id]["VALUE"] = $arE[$this->mess["IBLOCK_XML2_VALUE"]];
}
}
}
$bUpdateOnly = array_key_exists("bUpdateOnly", $this->next_step) && $this->next_step["bUpdateOnly"];
$sort = 100;
foreach($arProperty["VALUES"] as $id=>$arEnum)
{
if(!isset($arEnum["CML2_EXPORT_FLAG"]))
{
//Delete value only when full exchange happened
if(!$bUpdateOnly)
$arProperty["VALUES"][$id]["VALUE"] = "";
}
elseif(isset($arEnum["SORT"]))
{
if($arEnum["SORT"] > $sort)
$sort = $arEnum["SORT"] + 100;
}
else
{
$arProperty["VALUES"][$id]["SORT"] = $sort;
$sort += 100;
}
}
$obProperty = new CIBlockProperty;
$obProperty->UpdateEnum($arProperty["ID"], $arProperty["VALUES"], false);
return true;
}