Beispiel #1
0
 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) {
Beispiel #3
0
 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;
 }