• Модуль: 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;
}