示例#1
0
文件: cml2.php 项目: ASDAFF/open_bx
	function ImportPropertyDirectory($arProperty, $arEnumXmlNodes)
	{
		if (!CModule::IncludeModule('highloadblock'))
			return true;

		$rsProperty = CIBlockProperty::GetList(array(), array("ID"=>$arProperty["ID"]));
		$arProperty = $rsProperty->Fetch();
		if (!$arProperty)
			return true;

		if (strlen($arProperty["USER_TYPE_SETTINGS"]["TABLE_NAME"]) <= 0)
		{
			$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' => 'b_'.strtolower($arProperty["CODE"]),
			);
			$result = Freetrix\Highloadblock\HighloadBlockTable::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"] = $data["TABLE_NAME"];
			$obProperty = new CIBlockProperty;
			$obProperty->Update($arProperty["ID"], $arProperty);
		}

		$hlblock = Freetrix\Highloadblock\HighloadBlockTable::getList(array(
			"filter" => array(
				"TABLE_NAME" => $arProperty["USER_TYPE_SETTINGS"]["TABLE_NAME"],
			)))->fetch();

		$entity = Freetrix\Highloadblock\HighloadBlockTable::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"]];
					$value = $arE[$this->mess["IBLOCK_XML2_VALUE"]];
					if(!array_key_exists($xml_id, $arEnumMap))
					{
						$entity_data_class::add(array(
							"UF_XML_ID" => $xml_id,
							"UF_NAME" => $value,
						));
					}
					elseif ($arEnumMap[$xml_id]["UF_NAME"] !== $value)
					{
						$entity_data_class::update($arEnumMap[$xml_id]["ID"], array(
							"UF_NAME" => $value,
						));
					}
				}
			}
		}

		return true;
	}
示例#2
0
			die();
		}
		$highBlockName = strtoupper(substr($highBlockName, 0, 1)).substr($highBlockName, 1);
		if(!preg_match('/^[A-Z][A-Za-z0-9]*$/', $highBlockName))
		{
			require($_SERVER["DOCUMENT_ROOT"]."/freetrix/modules/main/include/prolog_admin_after.php");
			CAdminMessage::ShowOldStyleError(GetMessage("BT_ADM_IEP_HBLOCK_NAME_IS_INVALID"));
			require($_SERVER["DOCUMENT_ROOT"]."/freetrix/modules/main/include/epilog_admin.php");
			die();
		}
		$data = array(
			'NAME' => $highBlockName,
			'TABLE_NAME' => 'b_'.strtolower($_POST["HLB_NEW_TITLE"])
		);

		$result = Freetrix\Highloadblock\HighloadBlockTable::add($data);

		$highBlockID = $result->getId();
		$_POST["PROPERTY_USER_TYPE_SETTINGS"]["TABLE_NAME"] = $data['TABLE_NAME'];
		$arFieldsName = $_POST['PROPERTY_DIRECTORY_VALUES'][0];
		$arFieldsName['UF_DEF'] = '';
		$arFieldsName['UF_FILE'] = '';
		$obUserField = new CUserTypeEntity();
		$intSortStep = 100;
		foreach($arFieldsName as $fieldName => $fieldValue)
		{
			if ('UF_DELETE' == $fieldName)
				continue;

			$fieldMandatory = 'N';
			switch($fieldName)