示例#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
			$obUserField->Add($arUserField);
			$intSortStep += 100;
		}
	}
	$arImageResult = array();
	if(isset($_FILES['PROPERTY_DIRECTORY_VALUES']) && is_array($_FILES['PROPERTY_DIRECTORY_VALUES']))
		CFile::ConvertFilesToPost($_FILES['PROPERTY_DIRECTORY_VALUES'], $arImageResult);
	if($_POST["PROPERTY_USER_TYPE_SETTINGS"]["TABLE_NAME"] == '-1' && isset($result) && $result->isSuccess())
	{
		$hlblock = Freetrix\Highloadblock\HighloadBlockTable::getById($highBlockID)->fetch();
	}
	else
	{
		$hlblock = Freetrix\Highloadblock\HighloadBlockTable::getList(array("filter" => array("TABLE_NAME" => $_POST["PROPERTY_USER_TYPE_SETTINGS"]["TABLE_NAME"])))->fetch();
	}
	$entity = Freetrix\Highloadblock\HighloadBlockTable::compileEntity($hlblock);
	$entityDataClass = $entity->getDataClass();
	$fieldsList = $entityDataClass::getMap();

	foreach($_POST['PROPERTY_DIRECTORY_VALUES'] as $dirKey => $arDirValue)
	{
		if(isset($arDirValue["UF_DELETE"]))
		{
			if($arDirValue["UF_DELETE"] === 'Y')
				if(isset($arDirValue["ID"]) && intval($arDirValue["ID"]) > 0)
				{
					$entityDataClass::delete($arDirValue["ID"]);
					continue;
				}
			unset($arDirValue["UF_DELETE"]);
		}