function ImportPropertyDirectory($arProperty, $arEnumXmlNodes)
{
if (!Loader::includeModule('highloadblock'))
return true;
$rsProperty = CIBlockProperty::GetList(array(), array("ID"=>$arProperty["ID"]));
$arProperty = $rsProperty->Fetch();
if (!$arProperty)
return true;
$tableName = 'b_'.strtolower($arProperty["CODE"]);
if ($arProperty["USER_TYPE_SETTINGS"]["TABLE_NAME"] == '')
{
$hlblock = BitrixHighloadblockHighloadBlockTable::getList(array(
"filter" => array(
"=TABLE_NAME" => $tableName,
)))->fetch();
if (!$hlblock)
{
$highBlockName = trim($arProperty["CODE"]);
$highBlockName = preg_replace("/([^A-Za-z0-9]+)/", "", $highBlockName);
if ($highBlockName == "")
return GetMessage("IBLOCK_XML2_HBLOCK_NAME_IS_INVALID");
$highBlockName = strtoupper(substr($highBlockName, 0, 1)).substr($highBlockName, 1);
$data = array(
'NAME' => $highBlockName,
'TABLE_NAME' => $tableName,
);
$result = BitrixHighloadblockHighloadBlockTable::add($data);
$highBlockID = $result->getId();
$arFieldsName = array(
'UF_NAME' => array("Y", "string"),
'UF_XML_ID' => array("Y", "string"),
'UF_LINK' => array("N", "string"),
'UF_DESCRIPTION' => array("N", "string"),
'UF_FULL_DESCRIPTION' => array("N", "string"),
'UF_SORT' => array("N", "integer"),
'UF_FILE' => array("N", "file"),
'UF_DEF' => array("N", "boolean"),
);
$obUserField = new CUserTypeEntity();
$sort = 100;
foreach($arFieldsName as $fieldName => $fieldValue)
{
$arUserField = array(
"ENTITY_ID" => "HLBLOCK_".$highBlockID,
"FIELD_NAME" => $fieldName,
"USER_TYPE_ID" => $fieldValue[1],
"XML_ID" => "",
"SORT" => $sort,
"MULTIPLE" => "N",
"MANDATORY" => $fieldValue[0],
"SHOW_FILTER" => "N",
"SHOW_IN_LIST" => "Y",
"EDIT_IN_LIST" => "Y",
"IS_SEARCHABLE" => "N",
"SETTINGS" => array(),
);
$obUserField->Add($arUserField);
$sort += 100;
}
}
$arProperty["USER_TYPE_SETTINGS"]["TABLE_NAME"] = $tableName;
$obProperty = new CIBlockProperty;
$obProperty->Update($arProperty["ID"], $arProperty);
}
$hlblock = BitrixHighloadblockHighloadBlockTable::getList(array(
"filter" => array(
"=TABLE_NAME" => $arProperty["USER_TYPE_SETTINGS"]["TABLE_NAME"],
)))->fetch();
if (empty($hlblock))
{
return GetMessage(
"IBLOCK_XML2_HBLOCK_ABSENT",
array(
"#ID#" => $arProperty["ID"],
"#NAME#" => $arProperty["NAME"]
)
);
}
$entity = BitrixHighloadblockHighloadBlockTable::compileEntity($hlblock);
$entity_data_class = $entity->getDataClass();
$arEnumMap = array();
$rsData = $entity_data_class::getList(array(
"select" => array("ID", "UF_NAME", "UF_XML_ID", "UF_SORT"),
));
while($arData = $rsData->fetch())
{
$arEnumMap[$arData["UF_XML_ID"]] = $arData;
}
$i = 0;
foreach($arEnumXmlNodes as $arE)
{
if(
$arE["NAME"] == $this->mess["IBLOCK_XML2_TYPE_LIST"]
)
{
$arE = $this->_xml_file->GetAllChildrenArray($arE);
if(
isset($arE[$this->mess["IBLOCK_XML2_VALUE_ID"]])
&& isset($arE[$this->mess["IBLOCK_XML2_VALUE"]])
)
{
$xml_id = $arE[$this->mess["IBLOCK_XML2_VALUE_ID"]];
$arFields = array(
"UF_XML_ID" => $xml_id,
"UF_NAME" => $arE[$this->mess["IBLOCK_XML2_VALUE"]],
);
if (isset($arE[$this->mess["IBLOCK_XML2_PICTURE"]]))
{
$arFields["UF_FILE"] = $this->MakeFileArray($arE[$this->mess["IBLOCK_XML2_PICTURE"]]);
}
if(!array_key_exists($xml_id, $arEnumMap))
{
$entity_data_class::add($arFields);
}
elseif ($arEnumMap[$xml_id]["UF_NAME"] !== $arFields['UF_NAME'])
{
$entity_data_class::update($arEnumMap[$xml_id]["ID"], $arFields);
}
}
}
}
return true;
}