예제 #1
0
파일: Iblock.php 프로젝트: cjp2600/bim-core
 /**
  * Генерация кода обновления инфоблока
  *
  * @param $params array
  * @return mixed
  */
 public function generateUpdateCode($params)
 {
     $this->checkParams($params);
     $code = false;
     foreach ($this->ownerItemDbData as $iblockData) {
         $updateFields = $iblockData;
         Helper::unsetFields(array('ID'), $updateFields);
         $updateFields['FIELDS'] = \CIBlock::GetFields($iblockData['ID']);
         $this->setUserGroupId($iblockData['ID'], $iblockData);
         $code = $code . $this->getMethodContent('Bim\\Db\\Iblock\\IblockIntegrate', 'Update', array($updateFields['CODE'], $updateFields)) . PHP_EOL . PHP_EOL;
     }
     return $code;
 }
예제 #2
0
 public function getFields()
 {
     if (!isset($this->fields)) {
         $this->fields = array();
         $res = \CIBlock::GetFields($this->id);
         foreach ($res as $k => $element) {
             $this->fields[$k] = new Field($k, $element);
         }
         foreach (self::$standardFields as $field) {
             if (!array_key_exists($field, $this->fields)) {
                 $this->fields[$field] = array('CODE' => $field);
             }
         }
     }
     return $this->fields;
 }
예제 #3
0
 public function mergeIblockFields($iblockId, $fields)
 {
     $default = \CIBlock::GetFields($iblockId);
     $fields = $this->arraySoftMerge($default, $fields);
     \CIBlock::SetFields($iblockId, $fields);
 }
예제 #4
0
" target="_blank"><?php 
                echo GetMessage("IB_E_GOTO_BP");
                ?>
</a>
			<?php 
            }
            ?>
		</td>
	</tr>
	<?php 
        }
        $tabControl->BeginNextTab();
        if ($bVarsFromForm) {
            $arFields = $_REQUEST["FIELDS"];
        } else {
            $arFields = CIBlock::GetFields($ID);
        }
        $arDefFields = CIBlock::GetFieldsDefaults();
        foreach ($arDefFields as $FIELD_ID => $arField) {
            if ($arField["VISIBLE"] == "N") {
                continue;
            }
            if (!preg_match("/^LOG_/", $FIELD_ID)) {
                continue;
            }
            ?>
		<tr>
			<td width="40%"><label for="FIELDS[<?php 
            echo $FIELD_ID;
            ?>
][IS_REQUIRED]"><?php 
예제 #5
0
파일: cml2.php 프로젝트: nycmic/bittest
 function ImportMetaData($xml_root_id, $IBLOCK_TYPE, $IBLOCK_LID, $bUpdateIBlock = true)
 {
     global $APPLICATION;
     $rs = $this->_xml_file->GetList(array("ID" => "asc"), array("ID" => $xml_root_id), array("ID", "NAME", "ATTRIBUTES"));
     $ar = $rs->Fetch();
     if ($ar) {
         foreach (array(LANGUAGE_ID, "en", "ru") as $lang) {
             $mess = IncludeModuleLangFile(__FILE__, $lang, true);
             if ($ar["NAME"] === $mess["IBLOCK_XML2_COMMERCE_INFO"]) {
                 $this->mess = $mess;
                 $this->next_step["lang"] = $lang;
             }
         }
         $xml_root_id = $ar["ID"];
     }
     if ($ar && strlen($ar["ATTRIBUTES"]) > 0) {
         $info = unserialize($ar["ATTRIBUTES"]);
         if (is_array($info) && array_key_exists($this->mess["IBLOCK_XML2_SUM_FORMAT"], $info)) {
             if (preg_match("#" . $this->mess["IBLOCK_XML2_SUM_FORMAT_DELIM"] . "=(.);{0,1}#", $info[$this->mess["IBLOCK_XML2_SUM_FORMAT"]], $match)) {
                 $this->next_step["sdp"] = $match[1];
             }
         }
     }
     $meta_data_xml_id = false;
     $XML_ELEMENTS_PARENT = false;
     $XML_SECTIONS_PARENT = false;
     $XML_PROPERTIES_PARENT = false;
     $XML_SECTIONS_PROPERTIES_PARENT = false;
     $XML_PRICES_PARENT = false;
     $XML_STORES_PARENT = false;
     $XML_BASE_UNITS_PARENT = false;
     $XML_SECTION_PROPERTIES = false;
     $arIBlock = array();
     $this->next_step["bOffer"] = false;
     $rs = $this->_xml_file->GetList(array(), array("PARENT_ID" => $xml_root_id, "NAME" => $this->mess["IBLOCK_XML2_CATALOG"]), array("ID", "ATTRIBUTES"));
     $ar = $rs->Fetch();
     if (!$ar) {
         $rs = $this->_xml_file->GetList(array(), array("PARENT_ID" => $xml_root_id, "NAME" => $this->mess["IBLOCK_XML2_OFFER_LIST"]), array("ID", "ATTRIBUTES"));
         $ar = $rs->Fetch();
         $this->next_step["bOffer"] = true;
     }
     if (!$ar) {
         $rs = $this->_xml_file->GetList(array(), array("PARENT_ID" => $xml_root_id, "NAME" => $this->mess["IBLOCK_XML2_OFFERS_CHANGE"]), array("ID", "ATTRIBUTES"));
         $ar = $rs->Fetch();
         $this->next_step["bOffer"] = true;
         $this->next_step["bUpdateOnly"] = true;
         $bUpdateIBlock = false;
     }
     if ($this->next_step["bOffer"] && !$this->bCatalog) {
         return GetMessage('IBLOCK_XML2_MODULE_CATALOG_IS_ABSENT');
     }
     if ($ar) {
         if (strlen($ar["ATTRIBUTES"]) > 0) {
             $attrs = unserialize($ar["ATTRIBUTES"]);
             if (is_array($attrs)) {
                 if (array_key_exists($this->mess["IBLOCK_XML2_UPDATE_ONLY"], $attrs)) {
                     $this->next_step["bUpdateOnly"] = $attrs[$this->mess["IBLOCK_XML2_UPDATE_ONLY"]] == "true" || intval($attrs[$this->mess["IBLOCK_XML2_UPDATE_ONLY"]]) ? true : false;
                 }
             }
         }
         $rs = $this->_xml_file->GetList(array("ID" => "asc"), array("PARENT_ID" => $ar["ID"]));
         while ($ar = $rs->Fetch()) {
             if (isset($ar["VALUE_CLOB"])) {
                 $ar["VALUE"] = $ar["VALUE_CLOB"];
             }
             if ($ar["NAME"] == $this->mess["IBLOCK_XML2_ID"]) {
                 $arIBlock["XML_ID"] = ($this->use_iblock_type_id ? $IBLOCK_TYPE . "-" : "") . $ar["VALUE"];
             } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_CATALOG_ID"]) {
                 $arIBlock["CATALOG_XML_ID"] = ($this->use_iblock_type_id ? $IBLOCK_TYPE . "-" : "") . $ar["VALUE"];
             } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_NAME"]) {
                 $arIBlock["NAME"] = $ar["VALUE"];
             } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_DESCRIPTION"]) {
                 $arIBlock["DESCRIPTION"] = $ar["VALUE"];
                 $arIBlock["DESCRIPTION_TYPE"] = "html";
             } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_POSITIONS"] || $ar["NAME"] == $this->mess["IBLOCK_XML2_OFFERS"]) {
                 $XML_ELEMENTS_PARENT = $ar["ID"];
             } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_PRICE_TYPES"]) {
                 $XML_PRICES_PARENT = $ar["ID"];
             } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_STORES"]) {
                 $XML_STORES_PARENT = $ar["ID"];
             } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BASE_UNITS"]) {
                 $XML_BASE_UNITS_PARENT = $ar["ID"];
             } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_METADATA_ID"]) {
                 $meta_data_xml_id = $ar["VALUE"];
             } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_UPDATE_ONLY"]) {
                 $this->next_step["bUpdateOnly"] = $ar["VALUE"] == "true" || intval($ar["VALUE"]) ? true : false;
             } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BX_CODE"]) {
                 $arIBlock["CODE"] = $ar["VALUE"];
             } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BX_SORT"]) {
                 $arIBlock["SORT"] = $ar["VALUE"];
             } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BX_LIST_URL"]) {
                 $arIBlock["LIST_PAGE_URL"] = $ar["VALUE"];
             } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BX_DETAIL_URL"]) {
                 $arIBlock["DETAIL_PAGE_URL"] = $ar["VALUE"];
             } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BX_SECTION_URL"]) {
                 $arIBlock["SECTION_PAGE_URL"] = $ar["VALUE"];
             } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BX_CANONICAL_URL"]) {
                 $arIBlock["CANONICAL_PAGE_URL"] = $ar["VALUE"];
             } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BX_INDEX_ELEMENTS"]) {
                 $arIBlock["INDEX_ELEMENT"] = $ar["VALUE"] == "true" || intval($ar["VALUE"]) ? "Y" : "N";
             } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BX_INDEX_SECTIONS"]) {
                 $arIBlock["INDEX_SECTION"] = $ar["VALUE"] == "true" || intval($ar["VALUE"]) ? "Y" : "N";
             } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BX_SECTIONS_NAME"]) {
                 $arIBlock["SECTIONS_NAME"] = $ar["VALUE"];
             } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BX_SECTION_NAME"]) {
                 $arIBlock["SECTION_NAME"] = $ar["VALUE"];
             } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BX_ELEMENTS_NAME"]) {
                 $arIBlock["ELEMENTS_NAME"] = $ar["VALUE"];
             } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BX_ELEMENT_NAME"]) {
                 $arIBlock["ELEMENT_NAME"] = $ar["VALUE"];
             } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BX_PICTURE"]) {
                 if (strlen($ar["VALUE"]) > 0) {
                     $arIBlock["PICTURE"] = $this->MakeFileArray($ar["VALUE"]);
                 } else {
                     $arIBlock["PICTURE"] = $this->MakeFileArray($this->_xml_file->GetAllChildrenArray($ar["ID"]));
                 }
             } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BX_WORKFLOW"]) {
                 $arIBlock["WORKFLOW"] = $ar["VALUE"] == "true" || intval($ar["VALUE"]) ? "Y" : "N";
             } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_INHERITED_TEMPLATES"]) {
                 $arIBlock["IPROPERTY_TEMPLATES"] = array();
                 $arTemplates = $this->_xml_file->GetAllChildrenArray($ar["ID"]);
                 foreach ($arTemplates as $TEMPLATE) {
                     $id = $TEMPLATE[$this->mess["IBLOCK_XML2_ID"]];
                     $template = $TEMPLATE[$this->mess["IBLOCK_XML2_VALUE"]];
                     if (strlen($id) > 0 && strlen($template) > 0) {
                         $arIBlock["IPROPERTY_TEMPLATES"][$id] = $template;
                     }
                 }
             } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_LABELS"]) {
                 $arLabels = $this->_xml_file->GetAllChildrenArray($ar["ID"]);
                 foreach ($arLabels as $arLabel) {
                     $id = $arLabel[$this->mess["IBLOCK_XML2_ID"]];
                     $label = $arLabel[$this->mess["IBLOCK_XML2_VALUE"]];
                     if (strlen($id) > 0 && strlen($label) > 0) {
                         $arIBlock[$id] = $label;
                     }
                 }
             }
         }
         if ($this->next_step["bOffer"] && !$this->use_offers) {
             if (strlen($arIBlock["CATALOG_XML_ID"]) > 0) {
                 $arIBlock["XML_ID"] = $arIBlock["CATALOG_XML_ID"];
                 $this->next_step["bUpdateOnly"] = true;
             }
         }
         $obIBlock = new CIBlock();
         $rsIBlocks = $obIBlock->GetList(array(), array("XML_ID" => $arIBlock["XML_ID"]));
         $ar = $rsIBlocks->Fetch();
         //Also check for non bitrix xml file
         if (!$ar && !array_key_exists("CODE", $arIBlock)) {
             if ($this->next_step["bOffer"] && $this->use_offers) {
                 $rsIBlocks = $obIBlock->GetList(array(), array("XML_ID" => "FUTURE-1C-OFFERS"));
             } else {
                 $rsIBlocks = $obIBlock->GetList(array(), array("XML_ID" => "FUTURE-1C-CATALOG"));
             }
             $ar = $rsIBlocks->Fetch();
         }
         if ($ar) {
             if ($bUpdateIBlock && (!$this->next_step["bOffer"] || $this->use_offers)) {
                 if ($obIBlock->Update($ar["ID"], $arIBlock)) {
                     $arIBlock["ID"] = $ar["ID"];
                 } else {
                     return $obIBlock->LAST_ERROR;
                 }
             } else {
                 $arIBlock["ID"] = $ar["ID"];
             }
         } else {
             $arIBlock["IBLOCK_TYPE_ID"] = $this->CheckIBlockType($IBLOCK_TYPE);
             if (!$arIBlock["IBLOCK_TYPE_ID"]) {
                 return GetMessage("IBLOCK_XML2_TYPE_ADD_ERROR");
             }
             $arIBlock["GROUP_ID"] = array(2 => "R");
             $arIBlock["LID"] = $this->CheckSites($IBLOCK_LID);
             $arIBlock["ACTIVE"] = "Y";
             $arIBlock["WORKFLOW"] = "N";
             if ($this->translit_on_add && !array_key_exists("CODE", $arIBlock)) {
                 $arIBlock["FIELDS"] = array("CODE" => array("DEFAULT_VALUE" => array("TRANSLITERATION" => "Y", "TRANS_LEN" => $this->translit_on_add["max_len"], "TRANS_CASE" => $this->translit_on_add["change_case"], "TRANS_SPACE" => $this->translit_on_add["replace_space"], "TRANS_OTHER" => $this->translit_on_add["replace_other"], "TRANS_EAT" => $this->translit_on_add["delete_repeat_replace"] ? "Y" : "N")), "SECTION_CODE" => array("DEFAULT_VALUE" => array("TRANSLITERATION" => "Y", "TRANS_LEN" => $this->translit_on_add["max_len"], "TRANS_CASE" => $this->translit_on_add["change_case"], "TRANS_SPACE" => $this->translit_on_add["replace_space"], "TRANS_OTHER" => $this->translit_on_add["replace_other"], "TRANS_EAT" => $this->translit_on_add["delete_repeat_replace"] ? "Y" : "N")));
             }
             $arIBlock["ID"] = $obIBlock->Add($arIBlock);
             if (!$arIBlock["ID"]) {
                 return $obIBlock->LAST_ERROR;
             }
         }
         //Make this catalog
         if ($this->bCatalog && $this->next_step["bOffer"]) {
             $obCatalog = new CCatalog();
             $intParentID = $this->GetIBlockByXML_ID($arIBlock["CATALOG_XML_ID"]);
             if (0 < intval($intParentID) && $this->use_offers) {
                 $mxSKUProp = $obCatalog->LinkSKUIBlock($intParentID, $arIBlock["ID"]);
                 if (!$mxSKUProp) {
                     if ($ex = $APPLICATION->GetException()) {
                         $result = $ex->GetString();
                         return $result;
                     }
                 } else {
                     $rs = CCatalog::GetList(array(), array("IBLOCK_ID" => $arIBlock["ID"]));
                     if ($arOffer = $rs->Fetch()) {
                         $boolFlag = $obCatalog->Update($arIBlock["ID"], array('PRODUCT_IBLOCK_ID' => $intParentID, 'SKU_PROPERTY_ID' => $mxSKUProp));
                     } else {
                         $boolFlag = $obCatalog->Add(array("IBLOCK_ID" => $arIBlock["ID"], "YANDEX_EXPORT" => "N", "SUBSCRIPTION" => "N", 'PRODUCT_IBLOCK_ID' => $intParentID, 'SKU_PROPERTY_ID' => $mxSKUProp));
                     }
                     if (!$boolFlag) {
                         if ($ex = $APPLICATION->GetException()) {
                             $result = $ex->GetString();
                             return $result;
                         }
                     }
                 }
             } else {
                 $rs = CCatalog::GetList(array(), array("IBLOCK_ID" => $arIBlock["ID"]));
                 if (!$rs->Fetch()) {
                     $boolFlag = $obCatalog->Add(array("IBLOCK_ID" => $arIBlock["ID"], "YANDEX_EXPORT" => "N", "SUBSCRIPTION" => "N"));
                     if (!$boolFlag) {
                         if ($ex = $APPLICATION->GetException()) {
                             $result = $ex->GetString();
                             return $result;
                         }
                     }
                 }
             }
         }
         //For non bitrix xml file
         //Check for mandatory properties and add them as necessary
         if (!array_key_exists("CODE", $arIBlock)) {
             $arProperties = array("CML2_BAR_CODE" => GetMessage("IBLOCK_XML2_BAR_CODE"), "CML2_ARTICLE" => GetMessage("IBLOCK_XML2_ARTICLE"), "CML2_ATTRIBUTES" => array("NAME" => GetMessage("IBLOCK_XML2_ATTRIBUTES"), "MULTIPLE" => "Y", "WITH_DESCRIPTION" => "Y", "MULTIPLE_CNT" => 1), "CML2_TRAITS" => array("NAME" => GetMessage("IBLOCK_XML2_TRAITS"), "MULTIPLE" => "Y", "WITH_DESCRIPTION" => "Y", "MULTIPLE_CNT" => 1), "CML2_BASE_UNIT" => GetMessage("IBLOCK_XML2_BASE_UNIT_NAME"), "CML2_TAXES" => array("NAME" => GetMessage("IBLOCK_XML2_TAXES"), "MULTIPLE" => "Y", "WITH_DESCRIPTION" => "Y", "MULTIPLE_CNT" => 1), "CML2_PICTURES" => array("NAME" => GetMessage("IBLOCK_XML2_PICTURES"), "MULTIPLE" => "Y", "WITH_DESCRIPTION" => "Y", "MULTIPLE_CNT" => 1, "PROPERTY_TYPE" => "F", "CODE" => "MORE_PHOTO"), "CML2_FILES" => array("NAME" => GetMessage("IBLOCK_XML2_FILES"), "MULTIPLE" => "Y", "WITH_DESCRIPTION" => "Y", "MULTIPLE_CNT" => 1, "PROPERTY_TYPE" => "F", "CODE" => "FILES"), "CML2_MANUFACTURER" => array("NAME" => GetMessage("IBLOCK_XML2_PROP_MANUFACTURER"), "MULTIPLE" => "N", "WITH_DESCRIPTION" => "N", "MULTIPLE_CNT" => 1, "PROPERTY_TYPE" => "L"));
             foreach ($arProperties as $k => $v) {
                 $result = $this->CheckProperty($arIBlock["ID"], $k, $v);
                 if ($result !== true) {
                     return $result;
                 }
             }
             //For offers make special property: link to catalog
             if (isset($arIBlock["CATALOG_XML_ID"]) && $this->use_offers) {
                 $this->CheckProperty($arIBlock["ID"], "CML2_LINK", array("NAME" => GetMessage("IBLOCK_XML2_CATALOG_ELEMENT"), "PROPERTY_TYPE" => "E", "USER_TYPE" => "SKU", "LINK_IBLOCK_ID" => $this->GetIBlockByXML_ID($arIBlock["CATALOG_XML_ID"]), "FILTRABLE" => "Y"));
             }
         }
         $this->next_step["IBLOCK_ID"] = $arIBlock["ID"];
         $this->next_step["XML_ELEMENTS_PARENT"] = $XML_ELEMENTS_PARENT;
     }
     if ($meta_data_xml_id) {
         $rs = $this->_xml_file->GetList(array(), array("PARENT_ID" => $xml_root_id, "NAME" => $this->mess["IBLOCK_XML2_METADATA"]), array("ID"));
         while ($arMetadata = $rs->Fetch()) {
             //Find referenced metadata
             $bMetaFound = false;
             $meta_roots = array();
             $rsMetaRoots = $this->_xml_file->GetList(array("ID" => "asc"), array("PARENT_ID" => $arMetadata["ID"]));
             while ($arMeta = $rsMetaRoots->Fetch()) {
                 if (isset($arMeta["VALUE_CLOB"])) {
                     $arMeta["VALUE"] = $arMeta["VALUE_CLOB"];
                 }
                 if ($arMeta["NAME"] == $this->mess["IBLOCK_XML2_ID"] && $arMeta["VALUE"] == $meta_data_xml_id) {
                     $bMetaFound = true;
                 }
                 $meta_roots[] = $arMeta;
             }
             //Get xml parents of the properties and sections
             if ($bMetaFound) {
                 foreach ($meta_roots as $arMeta) {
                     if ($arMeta["NAME"] == $this->mess["IBLOCK_XML2_GROUPS"]) {
                         $XML_SECTIONS_PARENT = $arMeta["ID"];
                     } elseif ($arMeta["NAME"] == $this->mess["IBLOCK_XML2_PROPERTIES"]) {
                         $XML_PROPERTIES_PARENT = $arMeta["ID"];
                     } elseif ($arMeta["NAME"] == $this->mess["IBLOCK_XML2_GROUPS_PROPERTIES"]) {
                         $XML_SECTIONS_PROPERTIES_PARENT = $arMeta["ID"];
                     } elseif ($arMeta["NAME"] == $this->mess["IBLOCK_XML2_SECTION_PROPERTIES"]) {
                         $XML_SECTION_PROPERTIES = $arMeta["ID"];
                     } elseif ($arMeta["NAME"] == $this->mess["IBLOCK_XML2_PRICE_TYPES"]) {
                         $XML_PRICES_PARENT = $arMeta["ID"];
                     } elseif ($arMeta["NAME"] == $this->mess["IBLOCK_XML2_STORES"]) {
                         $XML_STORES_PARENT = $arMeta["ID"];
                     } elseif ($arMeta["NAME"] == $this->mess["IBLOCK_XML2_BASE_UNITS"]) {
                         $XML_BASE_UNITS_PARENT = $arMeta["ID"];
                     }
                 }
                 break;
             }
         }
     }
     $iblockFields = CIBlock::GetFields($arIBlock["ID"]);
     $iblockFields["XML_IMPORT_START_TIME"] = array("NAME" => "XML_IMPORT_START_TIME", "IS_REQUIRED" => "N", "DEFAULT_VALUE" => date("Y-m-d H:i:s"));
     CIBlock::SetFields($arIBlock["ID"], $iblockFields);
     if ($XML_PROPERTIES_PARENT) {
         $result = $this->ImportProperties($XML_PROPERTIES_PARENT, $arIBlock["ID"]);
         if ($result !== true) {
             return $result;
         }
     }
     if ($XML_SECTION_PROPERTIES) {
         $result = $this->ImportSectionProperties($XML_SECTION_PROPERTIES, $arIBlock["ID"]);
         if ($result !== true) {
             return $result;
         }
     }
     if ($XML_SECTIONS_PROPERTIES_PARENT) {
         $result = $this->ImportSectionsProperties($XML_SECTIONS_PROPERTIES_PARENT, $arIBlock["ID"]);
         if ($result !== true) {
             return $result;
         }
     }
     if ($XML_PRICES_PARENT) {
         if ($this->bCatalog) {
             $result = $this->ImportPrices($XML_PRICES_PARENT, $arIBlock["ID"], $IBLOCK_LID);
             if ($result !== true) {
                 return $result;
             }
         }
     }
     if ($XML_STORES_PARENT) {
         if ($this->bCatalog && CBXFeatures::IsFeatureEnabled('CatMultiStore')) {
             $result = $this->ImportStores($XML_STORES_PARENT);
             if ($result !== true) {
                 return $result;
             }
         }
     }
     if ($XML_BASE_UNITS_PARENT) {
         if ($this->bCatalog) {
             $result = $this->ImportBaseUnits($XML_BASE_UNITS_PARENT);
             if ($result !== true) {
                 return $result;
             }
         }
     }
     $this->next_step["section_sort"] = 100;
     $this->next_step["XML_SECTIONS_PARENT"] = $XML_SECTIONS_PARENT;
     $rs = $this->_xml_file->GetList(array(), array("PARENT_ID" => $xml_root_id, "NAME" => $this->mess["IBLOCK_XML2_PRODUCTS_SETS"]), array("ID", "ATTRIBUTES"));
     $ar = $rs->Fetch();
     if ($ar) {
         $this->next_step["SETS"] = $ar["ID"];
     }
     return true;
 }
예제 #6
0
파일: iblock.php 프로젝트: ASDAFF/bxApiDocs
 /**
  * <p>Возвращает массив <a href="http://dev.1c-bitrix.ru/api_help/iblock/fields.php#fiblock">полей</a> информационного блока.</p> <p><b>Примечание</b>: если инфоблока с таким ID не существует, то функция вернет false.</p>
  *
  *
  *
  *
  * @param int $ID  Идентификатор информационного блока <br>
  *
  *
  *
  * @param string $FIELD = "" Идентификатор поля. Если этот параметр задан, то функция вернет
  * значение конкретного поля. <br>
  *
  *
  *
  * @return array <p>Массив полей инфоблока.</p>
  *
  *
  * <h4>Example</h4> 
  * <pre>
  * &lt;?<br>echo CIBlock::GetArrayByID($IBLOCK_ID, "NAME");<br>?&gt;
  * </pre>
  *
  *
  *
  * <h4>See Also</h4> 
  * <ul> <li><a href="http://dev.1c-bitrix.ru/api_help/iblock/fields.php#fiblock">Поля инфоблока</a></li>
  * </ul><a name="examples"></a>
  *
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblock/GetArrayByID.php
  * @author Bitrix
  */
 public static function GetArrayByID($ID, $FIELD = "")
 {
     /** @global CDatabase $DB */
     global $DB;
     $ID = intval($ID);
     if (CACHED_b_iblock === false) {
         $res = $DB->Query("\n\t\t\t\tSELECT b_iblock.*," . $DB->DateToCharFunction("TIMESTAMP_X") . " TIMESTAMP_X\n\t\t\t\tfrom  b_iblock\n\t\t\t\tWHERE ID = " . $ID);
         $arResult = $res->Fetch();
         if ($arResult) {
             $arMessages = CIBlock::GetMessages($ID);
             $arResult = array_merge($arResult, $arMessages);
             $arResult["FIELDS"] = CIBlock::GetFields($ID);
         }
     } else {
         global $CACHE_MANAGER;
         $bucket_size = intval(CACHED_b_iblock_bucket_size);
         if ($bucket_size <= 0) {
             $bucket_size = 20;
         }
         $bucket = intval($ID / $bucket_size);
         $cache_id = $bucket_size . "iblock" . $bucket;
         if ($CACHE_MANAGER->Read(CACHED_b_iblock, $cache_id, "b_iblock")) {
             $arIBlocks = $CACHE_MANAGER->Get($cache_id);
         } else {
             $arIBlocks = array();
             $res = $DB->Query("\n\t\t\t\t\tSELECT b_iblock.*," . $DB->DateToCharFunction("TIMESTAMP_X") . " TIMESTAMP_X\n\t\t\t\t\tfrom  b_iblock\n\t\t\t\t\tWHERE ID between " . $bucket * $bucket_size . " AND " . (($bucket + 1) * $bucket_size - 1));
             while ($arIBlock = $res->Fetch()) {
                 $arMessages = CIBlock::GetMessages($arIBlock["ID"]);
                 $arIBlock = array_merge($arIBlock, $arMessages);
                 $arIBlock["FIELDS"] = CIBlock::GetFields($arIBlock["ID"]);
                 $arIBlocks[$arIBlock["ID"]] = $arIBlock;
             }
             $CACHE_MANAGER->Set($cache_id, $arIBlocks);
         }
         if (isset($arIBlocks[$ID])) {
             $arResult = $arIBlocks[$ID];
             if (!array_key_exists("ELEMENT_DELETE", $arResult)) {
                 $arMessages = CIBlock::GetMessages($ID);
                 $arResult = array_merge($arResult, $arMessages);
                 CIBlock::CleanCache($ID);
             }
             if (!array_key_exists("FIELDS", $arResult)) {
                 $arResult["FIELDS"] = CIBlock::GetFields($ID);
                 CIBlock::CleanCache($ID);
             }
         } else {
             $arResult = false;
         }
     }
     if ($FIELD) {
         return $arResult[$FIELD];
     } else {
         return $arResult;
     }
 }
예제 #7
0
 /**
  * @param $id
  * @param bool|false $forCache
  * @return bool|string
  */
 public static function run($id, $forCache = false)
 {
     $data = \CIBlock::GetByID($id)->Fetch();
     if ($data) {
         $code = $data['CODE'];
         $name = $data['NAME'];
         $isactive = $data['ACTIVE'] == 'Y';
         $sort = $data['SORT'];
         $description = (string) $data['DESCRIPTION'];
         $descriptionType = $data['DESCRIPTION_TYPE'];
         $className = $forCache ? \TAO::normalizeMnemocode($code) : \TAO::chunkCap($code);
         unset($data['ID']);
         unset($data['TIMESTAMP_X']);
         unset($data['IBLOCK_TYPE_ID']);
         unset($data['CODE']);
         unset($data['NAME']);
         unset($data['LANG_DIR']);
         unset($data['SERVER_NAME']);
         unset($data['LID']);
         unset($data['ACTIVE']);
         unset($data['SORT']);
         unset($data['DESCRIPTION']);
         unset($data['DESCRIPTION_TYPE']);
         $defs = array('RSS_ACTIVE' => 'Y', 'RSS_TTL' => '24', 'RSS_FILE_ACTIVE' => 'N', 'RSS_YANDEX_ACTIVE' => 'N', 'INDEX_ELEMENT' => 'Y', 'INDEX_SECTION' => 'N', 'WORKFLOW' => 'Y', 'VERSION' => '1', 'BIZPROC' => 'N', 'SECTION_CHOOSER' => 'L', 'RIGHTS_MODE' => 'S', 'SECTION_PROPERTY' => 'N', 'PROPERTY_INDEX' => 'N');
         foreach (array_keys($data) as $k) {
             if (empty($data[$k])) {
                 unset($data[$k]);
             }
             if (isset($defs[$k]) && $defs[$k] == $data[$k]) {
                 unset($data[$k]);
             }
         }
         $sites = '';
         $res = \CIBlock::GetSite($id);
         while ($row = $res->Fetch()) {
             $sites .= $sites != '' ? ',' : '';
             $sites .= "'" . $row['SITE_ID'] . "'";
         }
         unset($data['ELEMENTS_NAME']);
         unset($data['ELEMENT_NAME']);
         $sData = self::generateArrayExport($data, '        ');
         $sDescription = self::generateSimpleStringFunctionText('description', $description, '');
         $sDescriptionType = self::generateSimpleStringFunctionText('descriptionType', $descriptionType, 'text');
         $sIsActive = self::generateSimpleStringFunctionText('isActive', $isactive, true);
         $sSort = self::generateSimpleStringFunctionText('sort', $sort, '500');
         $sSites = "\n\n    public function sites()\n    {\n        return array({$sites});\n    }";
         $properties = array();
         $result = \CIBlockProperty::GetList(array(), array('IBLOCK_ID' => $id, 'CHECK_PERMISSIONS' => 'N'));
         $defs = array('VERSION' => '1', 'FILTRABLE' => 'N', 'SEARCHABLE' => 'N', 'LIST_TYPE' => 'L', 'COL_COUNT' => '30', 'ROW_COUNT' => '1', 'MULTIPLE' => 'N', 'SORT' => '500', 'IS_REQUIRED' => 'N', 'WITH_DESCRIPTION' => 'N', 'MULTIPLE_CNT' => '5');
         while ($row = $result->Fetch()) {
             $code = trim($row['CODE']);
             if ($code == '') {
                 $code = 'PROP_' . $row['ID'];
             }
             $pid = $row['ID'];
             unset($row['ID']);
             unset($row['TIMESTAMP_X']);
             unset($row['IBLOCK_ID']);
             unset($row['ACTIVE']);
             unset($row['CODE']);
             foreach (array_keys($row) as $k) {
                 if (empty($row[$k])) {
                     unset($row[$k]);
                 }
                 if (isset($defs[$k]) && $defs[$k] == $row[$k]) {
                     unset($row[$k]);
                 }
             }
             if ($row['PROPERTY_TYPE'] == 'L') {
                 $items = array();
                 $res = \CIBlockPropertyEnum::GetList(array(), array('PROPERTY_ID' => $pid, 'CHECK_PERMISSIONS' => 'N'));
                 while ($lrow = $res->Fetch()) {
                     $iid = $lrow['ID'];
                     $eid = $lrow['EXTERNAL_ID'];
                     unset($lrow['ID']);
                     unset($lrow['EXTERNAL_ID']);
                     unset($lrow['XML_ID']);
                     unset($lrow['TMP_ID']);
                     unset($lrow['PROPERTY_ID']);
                     unset($lrow['PROPERTY_NAME']);
                     unset($lrow['PROPERTY_CODE']);
                     unset($lrow['PROPERTY_SORT']);
                     if ($lrow['SORT'] == '500') {
                         unset($lrow['SORT']);
                     }
                     if ($lrow['DEF'] == 'N') {
                         unset($lrow['DEF']);
                     }
                     if (count($lrow) == 1 && isset($lrow['VALUE'])) {
                         $lrow = $lrow['VALUE'];
                     }
                     $items[$eid] = $lrow;
                 }
                 $row['ITEMS'] = $items;
             }
             if (isset($row['LINK_IBLOCK_ID']) && !$forCache) {
                 $row['LINK_IBLOCK_CODE'] = \TAO::getInfoblockCode($row['LINK_IBLOCK_ID']);
                 unset($row['LINK_IBLOCK_ID']);
             }
             $properties[$code] = $row;
         }
         $sProperties = self::generateArrayExport($properties, '        ');
         $messages = \CIBlock::GetMessages($id);
         $sMessages = self::generateArrayExport($messages, '        ');
         $fields = self::trimArrayValues(\CIBlock::GetFields($id));
         $defFields = self::defaultFields();
         foreach (array_keys($fields) as $field) {
             if (isset($defFields[$field])) {
                 $md5 = md5(serialize($fields[$field]));
                 $def = md5(serialize($defFields[$field]));
                 if ($md5 == $def) {
                     //unset($fields[$field]);
                 } else {
                     //var_dump($fields[$field], $defFields[$field]);
                 }
             }
         }
         $sFields = self::generateArrayExport($fields, '        ');
         $permissions = \CIBlock::GetGroupPermissions($id);
         $sPermissions = self::generateArrayExport($permissions, '        ');
         ob_start();
         include \TAO::taoDir() . '/views/template-iblock.phtml';
         $content = "<?php\n" . ob_get_clean();
         return $content;
     }
     return false;
 }
예제 #8
0
<?php

if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) {
    die;
}
if (!CModule::IncludeModule('iblock')) {
    return;
}
if (!empty($arCurrentValues['IBLOCK_CODE'])) {
    //select iblock's element's fields and properties
    $filter = ['CODE' => $arCurrentValues['IBLOCK_CODE']];
    if ($iblock = CIBlock::GetList([], $filter)->fetch()) {
        //select fields
        $fields = [];
        $rawFields = CIBlock::GetFields($currentIblockId);
        foreach ($rawFields as $fieldCode => $field) {
            $fields[$fieldCode] = $field['NAME'];
        }
        //element properties
        $elementProperties = [];
        $filter = ['ACTIVE' => 'Y', 'IBLOCK_ID' => $currentIblockId];
        $rsProp = CIBlockProperty::GetList([], $filter);
        while ($item = $rsProp->Fetch()) {
            $elementProperties[$item['CODE']] = '[' . $item['CODE'] . '] ' . $item['NAME'];
        }
    }
}
$arComponentParameters = CComponentUtil::GetComponentProps('notagency:materials.list', $arCurrentValues);
$arComponentParameters['PARAMETERS']['SELECT_ELEMENT_BY'] = array('PARENT' => 'BASE', 'NAME' => 'Выбирать элемент по ID или по коду', 'TYPE' => 'LIST', 'VALUES' => ['CODE' => 'по коду', 'ID' => 'по id'], 'DEFAULT' => 'CODE', 'REFRESH' => 'Y');
if ($arCurrentValues['SELECT_ELEMENT_BY'] == 'ID') {
    $arComponentParameters['PARAMETERS']['REQUEST_ELEMENT_ID'] = array('PARENT' => 'BASE', 'NAME' => 'GET или POST переменная, в которой передается id элемента', 'TYPE' => 'STRING', 'DEFAULT' => 'element_id');
예제 #9
0
    private function __construct($IBLOCK_ID, $params = array())
    {
        if (!isset($params['groups']) || !isset($params['products']))
        {
            throw new \Exception("Groups or Products not exist");
        }

        $rsCatalog = \CCatalog::GetList(array(), array('IBLOCK_ID' => intval($IBLOCK_ID)));
        if (!$arCatalog = $rsCatalog->Fetch())
        {
            throw new \Exception('Cant find catalog with ID = '.$IBLOCK_ID);
        }

        $this->CATALOG_ID = intval($arCatalog['IBLOCK_ID']);
        $this->OFFERS_ID = intval(Option::get('modifier_id'));

        if (!$this->OFFERS_ID)
        {
            // этот эксепшн можно заменить на создание инфоблока модификаторов
            throw new \Exception('Need set modifiers iblock');
        }

        $this->defaultSectionID = Option::getDefaultSectionID();
        $this->arModifiers[$this->defaultSectionID] = array(
            'XML_ID' => $this->defaultSectionID,
            'NAME'   => 'Другие модификаторы',
            'CODE'   => $this->defaultSectionID,
            'ACTIVE' => 'Y'
        );
        foreach ($params['groups'] as $arItem)
        {
            $arInfo = json_decode($arItem['additionalInfo'], true);
            $arGroup = array(
                "XML_ID"         => $arItem['id'],
                "SECTION_XML_ID" => $arItem['parentGroup'],
                "NAME"           => $arItem['name'],
                "CODE"           => $arInfo['CODE'],
                "ACTIVE"         => $arInfo['ACTIVE'] === 'N' ? 'N' : 'Y'
            );
            // группа модификаторов
            if (!$arItem['isIncludedInMenu'])
            {
                $this->arModifiers[$arItem['id']] = $arGroup;
                continue;
            }
            // обычная группа
            $this->arGroups[] = $arGroup;
        }

        foreach ($params['products'] as $arItem)
        {
            $arElement = array(
                'ACTIVE'         => 'Y',
                'XML_ID'         => $arItem['id'],
                'NAME'           => $arItem['name'],
                'CODE'           => $arItem['code'],
                'TYPE'           => strtoupper($arItem['type']),
                'DESCRIPTION'    => $arItem['description'],
                'SECTION_XML_ID' => $arItem['parentGroup'],
                'PRICE'          => doubleval($arItem['price']),
                'WEIGHT'         => $arItem['weight'] * 1000
            );
            if ($arItem['type'] === 'modifier')
            {
                $arElement['SECTION_XML_ID'] = $key = strlen($arItem['groupId']) > 0 ? $arItem['groupId'] : $this->defaultSectionID;
                $this->arModifiers[$key]['ITEMS'][] = $arElement;
                continue;
            }
            $arElement = array_merge($arElement, array(
                'MODIFIERS'       => array(),
                'GROUP_MODIFIERS' => array()
            ));
            if (!empty($arItem['modifiers'])) // обычные модификаторы
            {
                foreach ($arItem['modifiers'] as $arModifier)
                {
                    $arElement['MODIFIERS'][] = array(
                        'XML_ID'   => $arModifier['modifierId'],
                        'REQUIRED' => intval($arModifier['required']) > 0 ? 'Y' : 'N'
                    );
                }
            }
            if (!empty($arItem['groupModifiers'])) // групповые модификаторы
            {
                foreach ($arItem['groupModifiers'] as $arModifier)
                {
                    $arElement['GROUP_MODIFIERS'][] = array(
                        'XML_ID'   => $arModifier['modifierId'],
                        'REQUIRED' => intval($arModifier['required']) > 0 ? 'Y' : 'N'
                    );
                }
            }
            $this->arProducts[] = $arElement;
        }

        $iblockFields = \CIBlock::GetFields($this->CATALOG_ID);
        $iblockFields["XML_IMPORT_START_TIME"] = array(
            "NAME"          => "XML_IMPORT_START_TIME",
            "IS_REQUIRED"   => "N",
            "DEFAULT_VALUE" => date("Y-m-d H:i:s"),
        );
        \CIBlock::SetFields($this->CATALOG_ID, $iblockFields);
    }
예제 #10
0
 public function updateIblockFields($iblockId, $fields = array())
 {
     $default = \CIBlock::GetFields($iblockId);
     $fields = array_replace_recursive($default, $fields);
     \CIBlock::SetFields($iblockId, $fields);
     return true;
 }