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; }
$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"]); }