public function checkReference($xmlArray) { global $APPLICATION, $DB; $highBlockName = $this->xml2id($xmlArray[GetMessage("CC_BCIH_XML_REFERENCE")]["#"][GetMessage("CC_BCIH_XML_ID")][0]["#"]); if (!is_string($highBlockName) || $highBlockName === "") { $this->error = GetMessage("CC_BCIH_XML_PARSE_ERROR", array("#CODE#" => 110)); return; } $name = $xmlArray[GetMessage("CC_BCIH_XML_REFERENCE")]["#"][GetMessage("CC_BCIH_XML_NAME")][0]["#"]; if (!is_string($name) || $name === "") { $this->error = GetMessage("CC_BCIH_XML_PARSE_ERROR", array("#CODE#" => 120)); return; } $hlblock = Bitrix\Highloadblock\HighloadBlockTable::getList(array("filter" => array("=NAME" => $highBlockName)))->fetch(); if ($hlblock) { $highBlockID = $hlblock["ID"]; } else { $result = Bitrix\Highloadblock\HighloadBlockTable::add(array('NAME' => $highBlockName, 'TABLE_NAME' => 'b_' . strtolower($highBlockName))); $highBlockID = $result->getId(); $arFieldsName = array('UF_NAME' => array("Y", "string", "Y"), 'UF_XML_ID' => array("Y", "string", "N"), 'UF_VERSION' => array("Y", "string", "N"), 'UF_DESCRIPTION' => array("N", "string", "Y")); $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" => $fieldValue[2], "EDIT_IN_LIST" => $fieldValue[2], "IS_SEARCHABLE" => "N", "SETTINGS" => array()); $res = $obUserField->Add($arUserField); if ($res) { $sort += 100; } else { if ($ex = $APPLICATION->GetException()) { $this->error = GetMessage("CC_BCIH_FIELD_ERROR", array("#MESSAGE#" => $ex->GetString())); } else { $this->error = GetMessage("CC_BCIH_UNKNOWN_ERROR", array("#CODE#" => 130)); } return 0; } } if ($DB->type === "MYSQL") { $len = "(50)"; } else { $len = ""; } $DB->Query("create index IX_HLBLOCK_" . $highBlockID . "_XML_ID on b_" . strtolower($highBlockName) . "(UF_XML_ID{$len})"); } return $highBlockID; }
} $highBlockName = strtoupper(substr($highBlockName, 0, 1)) . substr($highBlockName, 1); if (!preg_match('/^[A-Z][A-Za-z0-9]*$/', $highBlockName)) { require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php"; CAdminMessage::ShowOldStyleError(GetMessage("BT_ADM_IEP_HBLOCK_NAME_IS_INVALID")); require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_admin.php"; die; } $data = array('NAME' => $highBlockName, 'TABLE_NAME' => CIBlockPropertyDirectory::createHighloadTableName($_POST['HLB_NEW_TITLE'])); if ($data['TABLE_NAME'] === false) { require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php"; CAdminMessage::ShowOldStyleError(GetMessage("BT_ADM_IEP_HBLOCK_NAME_IS_ABSENT")); require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_admin.php"; die; } $result = Bitrix\Highloadblock\HighloadBlockTable::add($data); if (!$result->isSuccess()) { require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php"; CAdminMessage::ShowOldStyleError(implode('; ', $result->getErrorMessages())); require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_admin.php"; die; } $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) {
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; } $tableName = 'b_' . strtolower($arProperty["CODE"]); if (strlen($arProperty["USER_TYPE_SETTINGS"]["TABLE_NAME"]) <= 0) { $hlblock = Bitrix\Highloadblock\HighloadBlockTable::getList(array("filter" => array("=TABLE_NAME" => $tableName)))->fetch(); if (!$hlblock) { $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' => $tableName); $result = Bitrix\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"] = $tableName; $obProperty = new CIBlockProperty(); $obProperty->Update($arProperty["ID"], $arProperty); } $hlblock = Bitrix\Highloadblock\HighloadBlockTable::getList(array("filter" => array("=TABLE_NAME" => $arProperty["USER_TYPE_SETTINGS"]["TABLE_NAME"])))->fetch(); $entity = Bitrix\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"]]; $arFields = array("UF_XML_ID" => $xml_id, "UF_NAME" => $arE[$this->mess["IBLOCK_XML2_VALUE"]]); if (isset($arE[$this->mess["IBLOCK_XML2_PICTURE"]])) { $arFields["UF_FILE"] = $this->MakeFileArray($arE[$this->mess["IBLOCK_XML2_PICTURE"]]); } if (!array_key_exists($xml_id, $arEnumMap)) { $entity_data_class::add($arFields); } elseif ($arEnumMap[$xml_id]["UF_NAME"] !== $arFields['UF_NAME']) { $entity_data_class::update($arEnumMap[$xml_id]["ID"], $arFields); } } } } return true; }