protected function _read_form_settings($form_id) { if(!$form_id) return; 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__."<br>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)) $fields[$FIELD_ID] = new CListElementField($this->iblock_id, $FIELD_ID, $customName, $sort); else $fields[$FIELD_ID] = new CListPropertyField($this->iblock_id, $FIELD_ID, $customName, $sort); //check if property was deleted from admin interface if(!is_array($fields[$FIELD_ID]->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__."<br>Line: ".__LINE__); } } else//or from module metadata { foreach($dbFields as $FIELD_ID => $arField) { if(CListFieldTypeList::IsField($FIELD_ID)) $fields[$FIELD_ID] = new CListElementField($this->iblock_id, $FIELD_ID, $arField["NAME"], $arField["SORT"]); else $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($fields[$FIELD_ID]->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__."<br>Line: ".__LINE__); } } } return $fields; }
public function Update($arFields) { if (isset($arFields["TYPE"])) { $newType = $arFields["TYPE"]; } else { $newType = $this->GetTypeID(); } if (is_array($this->_property) && !CListFieldTypeList::IsField($newType)) { foreach ($this->GetArray() as $id => $val) { if (array_key_exists($id, $arFields) && $id != "IBLOCK_ID") { $this->_property[$id] = $arFields[$id]; } } if (strpos($newType, ":") !== false) { list($this->_property["PROPERTY_TYPE"], $this->_property["USER_TYPE"]) = explode(":", $newType); } else { $this->_property["PROPERTY_TYPE"] = $newType; $this->_property["USER_TYPE"] = ""; } $this->_property["CHECK_PERMISSIONS"] = "N"; $this->_property["ACTIVE"] = "Y"; $obProperty = new CIBlockProperty(); if ($obProperty->Update($this->_property["ID"], $this->_property)) { if ($this->_property["PROPERTY_TYPE"] == "L" && is_array($arFields["LIST"])) { CList::UpdatePropertyList($this->_property["ID"], $arFields["LIST"]); } return new CListPropertyField($this->_property["IBLOCK_ID"], "PROPERTY_" . $this->_property["ID"], $arFields["NAME"], $arFields["SORT"]); } } return null; }
function is_field($type_id) { return CListFieldTypeList::IsField($type_id); }