Index: trunk/kernel/include/config.php =================================================================== diff -u -r636 -r642 --- trunk/kernel/include/config.php (.../config.php) (revision 636) +++ trunk/kernel/include/config.php (.../config.php) (revision 642) @@ -1,514 +1,515 @@ -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)); - // 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 = stripslashes($objConfig->Get($this->name)); - - 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,$POSTVARS[$i->name]); - } - else - { - if($POSTVARS[$i->name]=="on") - { - $value=1; - } - else - $value = (int)$POSTVARS[$i->name]; - $objConfig->Set($i->name,$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; + } +} + + +?>