Index: trunk/kernel/include/config.php =================================================================== diff -u -r642 -r667 --- trunk/kernel/include/config.php (.../config.php) (revision 642) +++ trunk/kernel/include/config.php (.../config.php) (revision 667) @@ -1,515 +1,1024 @@ -m_IsDirty=false; - $this->adodbConnection = &GetADODBConnection(); - $this->config = array(); - $this->m_IsDefault = array(); - $this->VarType = array(); - } - - function SetDebugLevel($value) - { - } - - - function Load() - { - if(is_object($this->adodbConnection)) - { - LogEntry("Config Load Start\n"); - $sql = "select VariableName, VariableValue from ".GetTablePrefix()."ConfigurationValues"; - $rs = $this->adodbConnection->Execute($sql); - unset($this->config); - #this->config=array(); - $count=0; - while($rs && !$rs->EOF) - { - $this->config[$rs->fields["VariableName"]] = $rs->fields["VariableValue"]; - $this->m_VarType[$rs->fields["VariableName"]] = 0; - // $this->Set($rs->fields["VariableName"],$rs->fields["VariableValue"],0); - if( defined('ADODB_EXTENSION') && constant('ADODB_EXTENSION') > 0 ) - { - adodb_movenext($rs); - } - else - $rs->MoveNext(); - $count++; - } - LogEntry("Config Load End - $count Variables\n"); - } - unset($this->m_DirtyFields); - $this->m_IsDirty=false; - } - - function Get($property) - { - return isset($this->config[$property]) ? $this->config[$property] : ''; - } - - function Set($property, $value,$type=0,$force=FALSE) - { - if(is_array($this->config) && strlen($property)>0) - { - if(array_key_exists($property,$this->config)) - { - $current = $this->config[$property]; - $changed = ($current != $value); - } - else - $changed = true; - } - else - $changed = false; - $this->config[$property]=$value; - $this->m_IsDirty = ($this->m_IsDirty or $changed or $force); - if($changed || $force) - { - $this->m_DirtyFields[$property] = $value; - } - $this->m_VarType[$property] = $type; - } - - function Save() - { - if($this->m_IsDirty==TRUE) - { - foreach($this->m_DirtyFields as $field=>$value) - { - if($this->m_VarType[$field]==0) - { -// $sql = sprintf("UPDATE ".GetTablePrefix()."ConfigurationValues SET VariableValue=%s WHERE VariableName=%s", $this->adodbConnection->qstr($value), $this->adodbConnection->qstr($field)); - $sql = 'UPDATE '.GetTablePrefix().'ConfigurationValues SET VariableValue="'.addslashes($value).'" WHERE VariableName="'.addslashes($field).'"'; - // echo $sql."
\n"; - - $rs = $this->adodbConnection->execute($sql); - } - } - } - $this->m_IsDirty=FALSE; - unset($this->m_DirtyFields); - } - - function TimeFormat() - { - if($this->Get("ampm_time")=="1") - { - $format = "g:i:s A"; - } - else - $format = "H:i:s"; - return $format; - } - - /* vartype should be either 1 or 2, 1 = perstant data, 2 = session data */ - function GetDirtySessionValues($VarType) - { - $result = array(); - - if(is_array($this->m_DirtyFields)) - { - foreach($this->m_DirtyFields as $property=>$values) - { - if($this->m_VarType[$property]==$VarType) - $result[$property] = $values; - } - } - return $result; - } - - function GetConfigValues($postfix = '') - { - // return only varibles, that match specified criteria - if(!$postfix) return $this->config; - $result = Array(); - $postfix_len = $postfix ? strlen($postfix) : 0; - foreach($this->config as $config_var => $var_value) - { - if( substr($config_var, - $postfix_len) == $postfix ) - $result[$config_var] = $var_value; - } - return $result; - } -}/* clsConfig */ - -/* -To create the configuration forms in the admin section, populate the table ConfigurationAdmin and -ConfigurationValues. - - The tables are fairly straight-forward. The fields of concern in the ConfigurationValues table is -ModuleOwner and Section. ModuleOwner should either be the module name or In-Portal for kernel related stuff. -(Items which should appear under 'System Configuration'). - - The Section field determines the NavMenu section the value is associated with. For example, -in-portal:configure_general refers to items listed under System Configuration->General. - - In the ConfigurationAdmin table, ensure the VariableName field is the same as the one in ConfigurationValues -(this is the field that creates the natural join.) The prompt field is the text displayed to the left of the form element -in the table. This should contain LANGUAGE ELEMENT IDENTIFIERS that are plugged into the Language function. - - The element_type field describes the type of form element is associated with this item. Possible values are: - - text : textbox - - checkbox : a simple checkbox - - select : creates a dropdown box. In this case, the ValueList field should be populated with a comma-separated list - in name=value,name=value format (each element is translated to: - - - To add dynamic data to this list, enclose an SQL statement with tags for example: - SELECT FieldLabel as OptionName, FieldName as OptionValue FROM CustomField WHERE .CustomFieldType=3> - - note the specific field labels OptionName and OptionValue. They are required by the parser. - use the tag to insert the system's table prefix into the sql statement as appropriate - -*/ -class clsConfigAdminItem -{ - var $name; - var $heading; - var $prompt; - var $ElementType; - var $ValueList; /* comma-separated list in name=value pair format*/ - var $ValidationRules; - var $default_value; - var $adodbConnection; - var $NextItem=NULL; - var $Section; - - function clsConfigAdminItem($config_name=NULL) - { - $this->adodbConnection = &GetADODBConnection(); - if($config_name) - $this->LoadSetting($config_name); - } - - function LoadSetting($config_name) - { - $sql = "SELECT * FROM ".GetTablePrefix()."ConfigurationAdmin INNER JOIN ".GetTablePrefix()."ConfigurationValues Using(VariableName) WHERE ".GetTablePrefix()."ConfigurationAdmin.VariableName='".$config_name."'"; - $rs = $this->adodbConnection->Execute($sql); - if($rs && !$rs->EOF) - { - $this->name = $rs->fields["VariableName"]; - $this->heading = $rs->fields["heading"]; - $this->prompt = $rs->fields["prompt"]; - $this->ElementType = $rs->fields["element_type"]; - $this->ValidationRules=$rs->fields["validation"]; - $this->default_value = $rs->fields["VariableValue"]; - $this->ValueList=$rs->fields["ValueList"]; - $this->Section = $rs->fields["Section"]; - } - } - - function explode_sql($sql) - { - $s = ""; - - $rs = $this->adodbConnection->Execute($sql); - - while ($rs && !$rs->EOF) - { - if(strlen(trim($rs->fields["OptionName"]))>0 && strlen(trim($rs->fields["OptionValue"]))>0) - { - if(strlen($s)) - $s .= ","; - $s .= $rs->fields["OptionName"]."="."+".$rs->fields["OptionValue"]; - } - $rs->MoveNext(); - } - return $s; - } - - function replace_sql($string) - { - $string = str_replace("",GetTablePrefix(),$string); - - $start = strpos($string,""); - - while($start) - { - $end = strpos($string,""); - if(!$end) - { - $end = strlen($string); - } - $len = $end - $start; - $sql = substr($string,$start+5,$len-5); - - $sql_val = $this->explode_sql($sql); - $s = substr($string,0,$start) . $sql_val . substr($string,$end+5); - - $string = $s; - $start = strpos($string,""); - } - return $string; - } - - function ItemFormElement($StartFrom=1) - { - global $objConfig; - static $TabIndex; - - if (empty($TabIndex)) - $TabIndex = $StartFrom; - - $o = ""; - if($objConfig->Get($this->name)!="") - $this->default_value = $objConfig->Get($this->name); - $this->default_value=inp_htmlize($this->default_value); - switch($this->ElementType) - { - case "text": - $o .= "name."\" "; - $o .= "VALUE=\"".$this->default_value."\">"; - break; - case "checkbox": - $o .= "name."\" tabindex=\"".($TabIndex++)."\""; - if($this->default_value) - { - $o .= " CHECKED>"; - } - else - $o .= ">"; - - break; - case "password": - - /* To exclude config form from populating with Root (md5) password */ - if ($this->Section == "in-portal:configure_users") - $this->default_value = ""; - - $o .= "name."\" "; - $o .= "VALUE=\"".$this->default_value."\">"; - break; - case "textarea": - $o .= ""; - break; - case "label": - if($this->default_value) - { - $o .= $this->default_value; - } - break; - case "radio": - $radioname = $this->name; - - $ValList = $this->replace_sql($this->ValueList); - - $TabIndex++; - $localTabIndex = $TabIndex; - $TabIndex++; - - $val = explode(",",$ValList); - for($i=0;$i<=count($val);$i++) - { - if(strlen($val[$i])) - { - $parts = explode("=",$val[$i]); - $s = $parts[1]; - if(strlen($s)==0) - $s=""; - - $o .= "name."\" VALUE=\"".$parts[0]."\""; - if($this->default_value==$parts[0]) - { - $o .= " CHECKED>"; - } - else - $o .= ">"; - if(substr($s,0,1)=="+") - { - $o .= $s; - } - else - $o .= prompt_language($s); - } - } - - break; - case "select": - $o .= ""; - } - return $o; - } - - function GetPrompt() - { - $ret = prompt_language($this->prompt); - return $ret; - } -} - -class clsConfigAdmin -{ - var $module; - var $section; - var $Items; - - function clsConfigAdmin($module="",$section="",$Inst=FALSE) - { - $this->module = $module; - $this->section = $section; - $this->Items= array(); - if(strlen($module) && strlen($section)) - $this->LoadItems(TRUE,$Inst); - } - - function Clear() - { - unset($this->Items); - $this->Items = array(); - } - - function NumItems() - { - if(is_array($this->Items)) - { - return count($this->Items); - } - else - return 0; - } - - function LoadItems($CheckNextItems=TRUE, $inst=FALSE) - { - $this->Clear(); - if(!$inst) - { - $sql = "SELECT * FROM ".GetTablePrefix()."ConfigurationAdmin INNER JOIN ".GetTablePrefix()."ConfigurationValues Using(VariableName) - WHERE ModuleOwner='".$this->module."' AND Section='".$this->section."' ORDER BY DisplayOrder ASC"; - } - else - { - - $sql = "SELECT * FROM ".GetTablePrefix()."ConfigurationAdmin INNER JOIN ".GetTablePrefix()."ConfigurationValues Using(VariableName) - WHERE ModuleOwner='".$this->module."' AND Section='".$this->section."' AND Install=1 ORDER BY DisplayOrder ASC"; - } - if( $GLOBALS['debuglevel'] ) echo $sql."
\n"; - $adodbConnection = &GetADODBConnection(); - $rs = $adodbConnection->Execute($sql); - while($rs && !$rs->EOF) - { - $data = $rs->fields; - if(is_object($i) && $CheckNextItems) - { - $last = $i->prompt; - unset($i); - } - $i = new clsConfigAdminItem(NULL); - $i->name = $data["VariableName"]; - $i->default_value = $data["VariableValue"]; - $i->heading = $data["heading"]; - $i->prompt = $data["prompt"]; - $i->ElementType = $data["element_type"]; - $i->ValueList = $data["ValueList"]; - $i->ValidationRules = isset($data['validaton']) ? $data['validaton'] : ''; - $i->Section = $data["Section"]; - - if(strlen($last)>0) - { - if($i->prompt==$last) - { - $this->Items[count($this->Items)-1]->NextItem=$i; - } - else - { - $i->NextItem=NULL; - array_push($this->Items,$i); - } - } - else - { - $i->NextItem=NULL; - array_push($this->Items,$i); - } - //unset($i); - $rs->MoveNext(); - } - } - - function SaveItems($POSTVARS, $force=FALSE) - { - global $objConfig; - - foreach($this->Items as $i) - { - if($i->ElementType != "label") - { - if($i->ElementType != "checkbox") - { - $objConfig->Set($i->name,stripslashes($POSTVARS[$i->name])); - } - else - { - if($POSTVARS[$i->name]=="on") - { - $value=1; - } - else - $value = (int)$POSTVARS[$i->name]; - $objConfig->Set($i->name,stripslashes($value),0,$force); - } - } - } - $objConfig->Save(); - } - - function GetHeadingList() - { - $res = array(); - foreach($this->Items as $i) - { - $res[$i->heading]=1; - } - reset($res); - return array_keys($res); - } - - function GetHeadingItems($heading) - { - $res = array(); - foreach($this->Items as $i) - { - if($i->heading==$heading) - array_push($res,$i); - } - return $res; - } -} - - -?> +m_IsDirty=false; + + $this->adodbConnection = &GetADODBConnection(); + + $this->config = array(); + + $this->m_IsDefault = array(); + + $this->VarType = array(); + + } + + + + function SetDebugLevel($value) + + { + + } + + + + + + function Load() + + { + + if(is_object($this->adodbConnection)) + + { + + LogEntry("Config Load Start\n"); + + $sql = "select VariableName, VariableValue from ".GetTablePrefix()."ConfigurationValues"; + + $rs = $this->adodbConnection->Execute($sql); + + unset($this->config); + + #this->config=array(); + + $count=0; + + while($rs && !$rs->EOF) + + { + + $this->config[$rs->fields["VariableName"]] = $rs->fields["VariableValue"]; + + $this->m_VarType[$rs->fields["VariableName"]] = 0; + + // $this->Set($rs->fields["VariableName"],$rs->fields["VariableValue"],0); + + if( defined('ADODB_EXTENSION') && constant('ADODB_EXTENSION') > 0 ) + + { + + adodb_movenext($rs); + + } + + else + + $rs->MoveNext(); + + $count++; + + } + + LogEntry("Config Load End - $count Variables\n"); + + } + + unset($this->m_DirtyFields); + + $this->m_IsDirty=false; + + } + + + + function Get($property) + + { + + return isset($this->config[$property]) ? $this->config[$property] : ''; + + } + + + + function Set($property, $value,$type=0,$force=FALSE) + + { + + if(is_array($this->config) && strlen($property)>0) + + { + + if(array_key_exists($property,$this->config)) + + { + + $current = $this->config[$property]; + + $changed = ($current != $value); + + } + + else + + $changed = true; + + } + + else + + $changed = false; + + $this->config[$property]=$value; + + $this->m_IsDirty = ($this->m_IsDirty or $changed or $force); + + if($changed || $force) + + { + + $this->m_DirtyFields[$property] = $value; + + } + + $this->m_VarType[$property] = $type; + + } + + + + function Save() + + { + + if($this->m_IsDirty==TRUE) + + { + + foreach($this->m_DirtyFields as $field=>$value) + + { + + if($this->m_VarType[$field]==0) + + { + +// $sql = sprintf("UPDATE ".GetTablePrefix()."ConfigurationValues SET VariableValue=%s WHERE VariableName=%s", $this->adodbConnection->qstr($value), $this->adodbConnection->qstr($field)); + + $sql = 'UPDATE '.GetTablePrefix().'ConfigurationValues SET VariableValue="'.addslashes($value).'" WHERE VariableName="'.addslashes($field).'"'; + + // echo $sql."
\n"; + + + + $rs = $this->adodbConnection->execute($sql); + + } + + } + + } + + $this->m_IsDirty=FALSE; + + unset($this->m_DirtyFields); + + } + + + + function TimeFormat() + + { + + if($this->Get("ampm_time")=="1") + + { + + $format = "g:i:s A"; + + } + + else + + $format = "H:i:s"; + + return $format; + + } + + + + /* vartype should be either 1 or 2, 1 = perstant data, 2 = session data */ + + function GetDirtySessionValues($VarType) + + { + + $result = array(); + + + + if(is_array($this->m_DirtyFields)) + + { + + foreach($this->m_DirtyFields as $property=>$values) + + { + + if($this->m_VarType[$property]==$VarType) + + $result[$property] = $values; + + } + + } + + return $result; + + } + + + + function GetConfigValues($postfix = '') + + { + + // return only varibles, that match specified criteria + + if(!$postfix) return $this->config; + + $result = Array(); + + $postfix_len = $postfix ? strlen($postfix) : 0; + + foreach($this->config as $config_var => $var_value) + + { + + if( substr($config_var, - $postfix_len) == $postfix ) + + $result[$config_var] = $var_value; + + } + + return $result; + + } + +}/* clsConfig */ + + + +/* + +To create the configuration forms in the admin section, populate the table ConfigurationAdmin and + +ConfigurationValues. + + + + The tables are fairly straight-forward. The fields of concern in the ConfigurationValues table is + +ModuleOwner and Section. ModuleOwner should either be the module name or In-Portal for kernel related stuff. + +(Items which should appear under 'System Configuration'). + + + + The Section field determines the NavMenu section the value is associated with. For example, + +in-portal:configure_general refers to items listed under System Configuration->General. + + + + In the ConfigurationAdmin table, ensure the VariableName field is the same as the one in ConfigurationValues + +(this is the field that creates the natural join.) The prompt field is the text displayed to the left of the form element + +in the table. This should contain LANGUAGE ELEMENT IDENTIFIERS that are plugged into the Language function. + + + + The element_type field describes the type of form element is associated with this item. Possible values are: + + - text : textbox + + - checkbox : a simple checkbox + + - select : creates a dropdown box. In this case, the ValueList field should be populated with a comma-separated list + + in name=value,name=value format (each element is translated to: + + + + + + To add dynamic data to this list, enclose an SQL statement with tags for example: + + SELECT FieldLabel as OptionName, FieldName as OptionValue FROM CustomField WHERE .CustomFieldType=3> + + + + note the specific field labels OptionName and OptionValue. They are required by the parser. + + use the tag to insert the system's table prefix into the sql statement as appropriate + + + +*/ + +class clsConfigAdminItem + +{ + + var $name; + + var $heading; + + var $prompt; + + var $ElementType; + + var $ValueList; /* comma-separated list in name=value pair format*/ + + var $ValidationRules; + + var $default_value; + + var $adodbConnection; + + var $NextItem=NULL; + + var $Section; + + + + function clsConfigAdminItem($config_name=NULL) + + { + + $this->adodbConnection = &GetADODBConnection(); + + if($config_name) + + $this->LoadSetting($config_name); + + } + + + + function LoadSetting($config_name) + + { + + $sql = "SELECT * FROM ".GetTablePrefix()."ConfigurationAdmin INNER JOIN ".GetTablePrefix()."ConfigurationValues Using(VariableName) WHERE ".GetTablePrefix()."ConfigurationAdmin.VariableName='".$config_name."'"; + + $rs = $this->adodbConnection->Execute($sql); + + if($rs && !$rs->EOF) + + { + + $this->name = $rs->fields["VariableName"]; + + $this->heading = $rs->fields["heading"]; + + $this->prompt = $rs->fields["prompt"]; + + $this->ElementType = $rs->fields["element_type"]; + + $this->ValidationRules=$rs->fields["validation"]; + + $this->default_value = $rs->fields["VariableValue"]; + + $this->ValueList=$rs->fields["ValueList"]; + + $this->Section = $rs->fields["Section"]; + + } + + } + + + + function explode_sql($sql) + + { + + $s = ""; + + + + $rs = $this->adodbConnection->Execute($sql); + + + + while ($rs && !$rs->EOF) + + { + + if(strlen(trim($rs->fields["OptionName"]))>0 && strlen(trim($rs->fields["OptionValue"]))>0) + + { + + if(strlen($s)) + + $s .= ","; + + $s .= $rs->fields["OptionName"]."="."+".$rs->fields["OptionValue"]; + + } + + $rs->MoveNext(); + + } + + return $s; + + } + + + + function replace_sql($string) + + { + + $string = str_replace("",GetTablePrefix(),$string); + + + + $start = strpos($string,""); + + + + while($start) + + { + + $end = strpos($string,""); + + if(!$end) + + { + + $end = strlen($string); + + } + + $len = $end - $start; + + $sql = substr($string,$start+5,$len-5); + + + + $sql_val = $this->explode_sql($sql); + + $s = substr($string,0,$start) . $sql_val . substr($string,$end+5); + + + + $string = $s; + + $start = strpos($string,""); + + } + + return $string; + + } + + + + function ItemFormElement($StartFrom=1) + + { + + global $objConfig; + + static $TabIndex; + + + + if (empty($TabIndex)) + + $TabIndex = $StartFrom; + + + + $o = ""; + + if($objConfig->Get($this->name)!="") + + $this->default_value = $objConfig->Get($this->name); + + $this->default_value=inp_htmlize($this->default_value); + + switch($this->ElementType) + + { + + case "text": + + $o .= "name."\" "; + + $o .= "VALUE=\"".$this->default_value."\">"; + + break; + + case "checkbox": + + $o .= "name."\" tabindex=\"".($TabIndex++)."\""; + + if($this->default_value) + + { + + $o .= " CHECKED>"; + + } + + else + + $o .= ">"; + + + + break; + + case "password": + + + + /* To exclude config form from populating with Root (md5) password */ + + if ($this->Section == "in-portal:configure_users") + + $this->default_value = ""; + + + + $o .= "name."\" "; + + $o .= "VALUE=\"".$this->default_value."\">"; + + break; + + case "textarea": + + $o .= ""; + + break; + + case "label": + + if($this->default_value) + + { + + $o .= $this->default_value; + + } + + break; + + case "radio": + + $radioname = $this->name; + + + + $ValList = $this->replace_sql($this->ValueList); + + + + $TabIndex++; + + $localTabIndex = $TabIndex; + + $TabIndex++; + + + + $val = explode(",",$ValList); + + for($i=0;$i<=count($val);$i++) + + { + + if(strlen($val[$i])) + + { + + $parts = explode("=",$val[$i]); + + $s = $parts[1]; + + if(strlen($s)==0) + + $s=""; + + + + $o .= "name."\" VALUE=\"".$parts[0]."\""; + + if($this->default_value==$parts[0]) + + { + + $o .= " CHECKED>"; + + } + + else + + $o .= ">"; + + if(substr($s,0,1)=="+") + + { + + $o .= $s; + + } + + else + + $o .= prompt_language($s); + + } + + } + + + + break; + + case "select": + + $o .= ""; + + } + + return $o; + + } + + + + function GetPrompt() + + { + + $ret = prompt_language($this->prompt); + + return $ret; + + } + +} + + + +class clsConfigAdmin + +{ + + var $module; + + var $section; + + var $Items; + + + + function clsConfigAdmin($module="",$section="",$Inst=FALSE) + + { + + $this->module = $module; + + $this->section = $section; + + $this->Items= array(); + + if(strlen($module) && strlen($section)) + + $this->LoadItems(TRUE,$Inst); + + } + + + + function Clear() + + { + + unset($this->Items); + + $this->Items = array(); + + } + + + + function NumItems() + + { + + if(is_array($this->Items)) + + { + + return count($this->Items); + + } + + else + + return 0; + + } + + + + function LoadItems($CheckNextItems=TRUE, $inst=FALSE) + + { + + $this->Clear(); + + if(!$inst) + + { + + $sql = "SELECT * FROM ".GetTablePrefix()."ConfigurationAdmin INNER JOIN ".GetTablePrefix()."ConfigurationValues Using(VariableName) + + WHERE ModuleOwner='".$this->module."' AND Section='".$this->section."' ORDER BY DisplayOrder ASC"; + + } + + else + + { + + + + $sql = "SELECT * FROM ".GetTablePrefix()."ConfigurationAdmin INNER JOIN ".GetTablePrefix()."ConfigurationValues Using(VariableName) + + WHERE ModuleOwner='".$this->module."' AND Section='".$this->section."' AND Install=1 ORDER BY DisplayOrder ASC"; + + } + + if( $GLOBALS['debuglevel'] ) echo $sql."
\n"; + + $adodbConnection = &GetADODBConnection(); + + $rs = $adodbConnection->Execute($sql); + + while($rs && !$rs->EOF) + + { + + $data = $rs->fields; + + if(is_object($i) && $CheckNextItems) + + { + + $last = $i->prompt; + + unset($i); + + } + + $i = new clsConfigAdminItem(NULL); + + $i->name = $data["VariableName"]; + + $i->default_value = $data["VariableValue"]; + + $i->heading = $data["heading"]; + + $i->prompt = $data["prompt"]; + + $i->ElementType = $data["element_type"]; + + $i->ValueList = $data["ValueList"]; + + $i->ValidationRules = isset($data['validaton']) ? $data['validaton'] : ''; + + $i->Section = $data["Section"]; + + + + if(strlen($last)>0) + + { + + if($i->prompt==$last) + + { + + $this->Items[count($this->Items)-1]->NextItem=$i; + + } + + else + + { + + $i->NextItem=NULL; + + array_push($this->Items,$i); + + } + + } + + else + + { + + $i->NextItem=NULL; + + array_push($this->Items,$i); + + } + + //unset($i); + + $rs->MoveNext(); + + } + + } + + + + function SaveItems($POSTVARS, $force=FALSE) + + { + + global $objConfig; + + + + foreach($this->Items as $i) + + { + + if($i->ElementType != "label") + + { + + if($i->ElementType != "checkbox") + + { + + $objConfig->Set($i->name,stripslashes($POSTVARS[$i->name])); + + } + + else + + { + + if($POSTVARS[$i->name]=="on") + + { + + $value=1; + + } + + else + + $value = (int)$POSTVARS[$i->name]; + + $objConfig->Set($i->name,stripslashes($value),0,$force); + + } + + } + + } + + $objConfig->Save(); + + } + + + + function GetHeadingList() + + { + + $res = array(); + + foreach($this->Items as $i) + + { + + $res[$i->heading]=1; + + } + + reset($res); + + return array_keys($res); + + } + + + + function GetHeadingItems($heading) + + { + + $res = array(); + + foreach($this->Items as $i) + + { + + if($i->heading==$heading) + + array_push($res,$i); + + } + + return $res; + + } + +} +?> \ No newline at end of file