- Модуль: iblock
- Путь к файлу: ~/bitrix/modules/iblock/classes/general/cml2.php
- Класс: CIBlockCMLImport
- Вызов: CIBlockCMLImport::ImportSectionsProperties
function ImportSectionsProperties($XML_PARENT, $IBLOCK_ID)
{
/** @var CMain $APPLICATION */
global $APPLICATION;
$obTypeManager = new CUserTypeEntity;
$sort = 100;
$rs = $this->_xml_file->GetList(
array("ID" => "asc"),
array("PARENT_ID" => $XML_PARENT),
array("ID")
);
while($ar = $rs->Fetch())
{
$XML_ENUM_PARENT = array();
$arField = array(
);
$rsP = $this->_xml_file->GetList(
array("ID" => "asc"),
array("PARENT_ID" => $ar["ID"])
);
while($arP = $rsP->Fetch())
{
if(isset($arP["VALUE_CLOB"]))
$arP["VALUE"] = $arP["VALUE_CLOB"];
if($arP["NAME"] == $this->mess["IBLOCK_XML2_ID"])
$arField["XML_ID"] = $arP["VALUE"];
elseif($arP["NAME"] == $this->mess["IBLOCK_XML2_NAME"])
$arField["FIELD_NAME"] = $arP["VALUE"];
elseif($arP["NAME"] == $this->mess["IBLOCK_XML2_SORT"])
$arField["SORT"] = $arP["VALUE"];
elseif($arP["NAME"] == $this->mess["IBLOCK_XML2_MULTIPLE"])
$arField["MULTIPLE"] = ($arP["VALUE"]=="true") || intval($arP["VALUE"])? "Y": "N";
elseif($arP["NAME"] == $this->mess["IBLOCK_XML2_BX_PROPERTY_TYPE"])
$arField["USER_TYPE_ID"] = $arP["VALUE"];
elseif($arP["NAME"] == $this->mess["IBLOCK_XML2_BX_IS_REQUIRED"])
$arField["MANDATORY"] = ($arP["VALUE"]=="true") || intval($arP["VALUE"])? "Y": "N";
elseif($arP["NAME"] == $this->mess["IBLOCK_XML2_BX_FILTER"])
$arField["SHOW_FILTER"] = ($arP["VALUE"]=="true") || intval($arP["VALUE"])? "Y": "N";
elseif($arP["NAME"] == $this->mess["IBLOCK_XML2_BX_SHOW_IN_LIST"])
$arField["SHOW_IN_LIST"] = ($arP["VALUE"]=="true") || intval($arP["VALUE"])? "Y": "N";
elseif($arP["NAME"] == $this->mess["IBLOCK_XML2_BX_EDIT_IN_LIST"])
$arField["EDIT_IN_LIST"] = ($arP["VALUE"]=="true") || intval($arP["VALUE"])? "Y": "N";
elseif($arP["NAME"] == $this->mess["IBLOCK_XML2_BX_SEARCH"])
$arField["IS_SEARCHABLE"] = ($arP["VALUE"]=="true") || intval($arP["VALUE"])? "Y": "N";
elseif($arP["NAME"] == $this->mess["IBLOCK_XML2_BX_SETTINGS"])
$arField["SETTINGS"] = unserialize($arP["VALUE"], ['allowed_classes' => false]);
elseif($arP["NAME"]==$this->mess["IBLOCK_XML2_CHOICE_VALUES"])
$XML_ENUM_PARENT = $arP["ID"];
}
$rsUserFields = $obTypeManager->GetList(array(), array("ENTITY_ID"=> "IBLOCK_".$IBLOCK_ID."_SECTION", "XML_ID"=>$arField["XML_ID"]));
$arDBField = $rsUserFields->Fetch();
if(!$arDBField)
{
$rsUserFields = $obTypeManager->GetList(array(), array("ENTITY_ID"=> "IBLOCK_".$IBLOCK_ID."_SECTION", "FIELD_NAME"=>$arField["FIELD_NAME"]));
$arDBField = $rsUserFields->Fetch();
}
if($arDBField)
{
$bChanged = false;
foreach($arField as $key=>$value)
{
if($arDBField[$key] !== $value)
{
$bChanged = true;
break;
}
}
if(!$bChanged)
$arField["ID"] = $arDBField["ID"];
elseif($obTypeManager->Update($arDBField["ID"], $arField))
$arField["ID"] = $arDBField["ID"];
else
{
if($e = $APPLICATION->GetException())
return GetMessage("IBLOCK_XML2_UF_ERROR", array(
"#XML_ID#" => $arField["XML_ID"],
"#ERROR_TEXT#" => $e->GetString(),
));
else
return false;
}
}
else
{
$arField["ENTITY_ID"] = "IBLOCK_".$IBLOCK_ID."_SECTION";
if(!array_key_exists("SORT", $arField))
$arField["SORT"] = $sort;
$arField["ID"] = $obTypeManager->Add($arField);
if(!$arField["ID"])
{
if($e = $APPLICATION->GetException())
return GetMessage("IBLOCK_XML2_UF_ERROR", array(
"#XML_ID#" => $arField["XML_ID"],
"#ERROR_TEXT#" => $e->GetString(),
));
else
return false;
}
}
if ($XML_ENUM_PARENT)
{
$arEnumXmlNodes = array();
$rsE = $this->_xml_file->GetList(
array("ID" => "asc"),
array("PARENT_ID" => $XML_ENUM_PARENT)
);
while($arE = $rsE->Fetch())
{
if(isset($arE["VALUE_CLOB"]))
$arE["VALUE"] = $arE["VALUE_CLOB"];
$arEnumXmlNodes[] = $arE;
}
if (!empty($arEnumXmlNodes))
{
$this->ImportSectionPropertyEnum($arField["ID"], $arEnumXmlNodes);
}
}
$sort += 100;
}
return true;
}