Exemplo n.º 1
0
	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;
	}
Exemplo n.º 2
0
 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;
 }
Exemplo n.º 3
0
 function is_field($type_id)
 {
     return CListFieldTypeList::IsField($type_id);
 }