• Модуль: lists
  • Путь к файлу: ~/bitrix/modules/lists/classes/general/listfields.php
  • Класс: CListFieldList
  • Вызов: CListFieldList::_read_form_settings
protected function _read_form_settings($form_id)
{
	if(!$form_id)
		return null;

	global $DB;

	//read list meta from module table
	$rsFields = $DB->Query("
		SELECT * FROM b_lists_field
		WHERE IBLOCK_ID = ".$this->iblock_id."
		ORDER BY SORT ASC
	", false, "File: ".__FILE__."
Line: ".__LINE__); $dbFields = array(); while($arField = $rsFields->Fetch()) $dbFields[$arField["FIELD_ID"]] = $arField; $fields = array(); $customTabs = CUserOptions::GetOption("form", $form_id); //read list meta from interface settings if($customTabs && $customTabs["tabs"]) { $sort = 10; $arTabs = explode("--;--", $customTabs["tabs"]); foreach($arTabs as $customFields) { if($customFields) { $arCustomFields = explode("--,--", $customFields); array_shift($arCustomFields); foreach($arCustomFields as $customField) { list($FIELD_ID, $customName) = explode("--#--", $customField); if($FIELD_ID != "SECTIONS") { $customName = ltrim($customName, "* -xa0"); if(CListFieldTypeList::IsField($FIELD_ID)) $obField = $fields[$FIELD_ID] = new CListElementField($this->iblock_id, $FIELD_ID, $customName, $sort); else $obField = $fields[$FIELD_ID] = new CListPropertyField($this->iblock_id, $FIELD_ID, $customName, $sort); //check if property was deleted from admin interface if(!is_array($obField->GetArray())) { unset($fields[$FIELD_ID]); } else { $sort += 10; unset($dbFields[$FIELD_ID]); } } } } } //There were some fields "deleted" from interface foreach($dbFields as $FIELD_ID => $arField) { $DB->Query(" DELETE FROM b_lists_field WHERE IBLOCK_ID = ".$this->iblock_id." AND FIELD_ID = '".$DB->ForSQL($FIELD_ID)."' ", false, "File: ".__FILE__."
Line: ".__LINE__); } } else//or from module metadata { foreach($dbFields as $FIELD_ID => $arField) { if(CListFieldTypeList::IsField($FIELD_ID)) $obField = $fields[$FIELD_ID] = new CListElementField($this->iblock_id, $FIELD_ID, $arField["NAME"], $arField["SORT"]); else $obField = $fields[$FIELD_ID] = new CListPropertyField($this->iblock_id, $FIELD_ID, $arField["NAME"], $arField["SORT"]); //check if property was deleted from admin interface if(!is_array($obField->GetArray())) { unset($fields[$FIELD_ID]); $DB->Query(" DELETE FROM b_lists_field WHERE IBLOCK_ID = ".$this->iblock_id." AND FIELD_ID = '".$DB->ForSQL($FIELD_ID)."' ", false, "File: ".__FILE__."
Line: ".__LINE__); } } } return $fields; }