[geeklog-cvs] Geeklog-SoC: Ported fixes over from the Trunk: Allow $_CONF over...

geeklog-cvs at lists.geeklog.net geeklog-cvs at lists.geeklog.net
Sat Jul 19 03:49:48 EDT 2008


details:   http://project.geeklog.net/cgi-bin/hgweb.cgi/rev/5d8a28d64a81
changeset: 6227:5d8a28d64a81
user:      dirk at prospero.local
date:      Sat Jul 19 09:48:58 2008 +0200
description:
Ported fixes over from the Trunk: Allow $_CONF overrides in siteconfig.php (bug #673); allow disabling "restored" entries (bug #664)

diffstat:

1 file changed, 81 insertions(+), 52 deletions(-)
system/classes/config.class.php |  133 +++++++++++++++++++++++----------------

diffs (280 lines):

diff -r 601b71c8131c -r 5d8a28d64a81 system/classes/config.class.php
--- a/system/classes/config.class.php	Fri Jul 18 00:17:33 2008 +0100
+++ b/system/classes/config.class.php	Sat Jul 19 09:48:58 2008 +0200
@@ -29,7 +29,7 @@
 // |                                                                           |
 // +---------------------------------------------------------------------------+
 //
-// $Id: config.class.php,v 1.42 2008/06/14 15:28:01 dhaun Exp $
+// $Id: config.class.php,v 1.42.2.1 2008/07/15 07:58:23 dhaun Exp $
 
 class config {
     var $dbconfig_file;
@@ -102,17 +102,20 @@
      * track of this reference, and the set function will mutate it.
      *
      * @return array(string => mixed)      This is a reference to the
-     *                              config array
+     *                                     config array
      */
     function &initConfig()
     {
         global $_TABLES;
 
-        $sql_query = "SELECT name, value, group_name FROM {$_TABLES['conf_values']} WHERE (type <> 'subgroup') AND (type <> 'fieldset')";
-        $result = DB_query($sql_query);
+        $sql = "SELECT name, value, group_name FROM {$_TABLES['conf_values']} WHERE (type <> 'subgroup') AND (type <> 'fieldset')";
+        $result = DB_query($sql);
         while ($row = DB_fetchArray($result)) {
             if ($row[1] !== 'unset') {
-                $this->config_array[$row[2]][$row[0]] = unserialize($row[1]);
+                if (!array_key_exists($row[2], $this->config_array) ||
+                    !array_key_exists($row[0], $this->config_array[$row[2]])) {
+                    $this->config_array[$row[2]][$row[0]] = unserialize($row[1]);
+                }
             }
         }
         $this->_post_configuration();
@@ -154,21 +157,15 @@
      */
     function set($name, $value, $group='Core')
     {
-        global $_TABLES, $_DB, $_DB_dbms;
+        global $_TABLES;
 
         $escaped_val = addslashes(serialize($value));
         $escaped_name = addslashes($name);
         $escaped_grp = addslashes($group);
-        $sql_query = "UPDATE {$_TABLES['conf_values']} " .
-            "SET value = '{$escaped_val}' WHERE " .
-            "name = '{$escaped_name}' AND group_name = '{$escaped_grp}'";
-        if ($_DB_dbms == 'mssql') {
-            $sql_query = str_replace("\\'","''",$sql_query);
-            $sql_query = str_replace('\\"','"',$sql_query);
-            $_DB->dbQuery($sql_query, 0, 1);
-        } else {
-            DB_query($sql_query);
-        }
+        $sql = "UPDATE {$_TABLES['conf_values']} " .
+               "SET value = '{$escaped_val}' WHERE " .
+               "name = '{$escaped_name}' AND group_name = '{$escaped_grp}'";
+        $this->_DB_escapedQuery($sql);
         $this->config_array[$group][$name] = $value;
         $this->_post_configuration();
     }
@@ -184,21 +181,15 @@
      */
     function set_default($name, $value, $group = 'Core')
     {
-        global $_TABLES, $_DB, $_DB_dbms;
+        global $_TABLES;
 
         $escaped_val = addslashes(serialize($value));
         $escaped_name = addslashes($name);
         $escaped_grp = addslashes($group);
-        $sql_query = "UPDATE {$_TABLES['conf_values']} " .
-            "SET default_value = '{$escaped_val}' WHERE " .
-            "name = '{$escaped_name}' AND group_name = '{$escaped_grp}'";
-        if ($_DB_dbms == 'mssql') {
-            $sql_query = str_replace("\\'", "''", $sql_query);
-            $sql_query = str_replace('\\"', '"', $sql_query);
-            $_DB->dbQuery($sql_query, 0, 1);
-        } else {
-            DB_query($sql_query);
-        }
+        $sql = "UPDATE {$_TABLES['conf_values']} " .
+               "SET default_value = '{$escaped_val}' WHERE " .
+               "name = '{$escaped_name}' AND group_name = '{$escaped_grp}'";
+        $this->_DB_escapedQuery($sql);
     }
 
     function restore_param($name, $group)
@@ -207,9 +198,19 @@
 
         $escaped_name = addslashes($name);
         $escaped_grp = addslashes($group);
-        $sql = "UPDATE {$_TABLES['conf_values']} SET value = default_value " .
-            "WHERE name = '{$escaped_name}' AND group_name = '{$escaped_grp}'";
-        DB_query($sql);
+
+        $result = DB_query("SELECT value, default_value FROM {$_TABLES['conf_values']} WHERE name = '{$escaped_name}' AND group_name = '{$escaped_grp}'");
+        list($value, $default_value) = DB_fetchArray($result);
+
+        $sql = "UPDATE {$_TABLES['conf_values']} ";
+        if ($value == 'unset') {
+            $default_value = addslashes($default_value);
+            $sql .= "SET value = '{$default_value}', default_value = 'unset:{$default_value}'";
+        } else {
+            $sql .= "SET value = default_value";
+        }
+        $sql .= " WHERE name = '{$escaped_name}' AND group_name = '{$escaped_grp}'";
+        $this->_DB_escapedQuery($sql);
     }
 
     function unset_param($name, $group)
@@ -218,9 +219,15 @@
 
         $escaped_name = addslashes($name);
         $escaped_grp = addslashes($group);
-        $sql = "UPDATE {$_TABLES['conf_values']} SET value = 'unset' " .
-            "WHERE name = '{$escaped_name}' AND group_name = '{$escaped_grp}'";
-        DB_query($sql);
+        $default_value = DB_getItem($_TABLES['conf_values'], 'default_value',
+                "name = '{$escaped_name}' AND group_name = '{$escaped_grp}'");
+        $sql = "UPDATE {$_TABLES['conf_values']} SET value = 'unset'";
+        if (substr($default_value, 0, 6) == 'unset:') {
+            $default_value = addslashes(substr($default_value, 6));
+            $sql .= ", default_value = '{$default_value}'";
+        }
+        $sql .= " WHERE name = '{$escaped_name}' AND group_name = '{$escaped_grp}'";
+        $this->_DB_escapedQuery($sql);
     }
 
     /**
@@ -254,10 +261,10 @@
      *
      * @param boolean $set              whether or not this parameter is set
      */
-    function add( $param_name, $default_value, $type, $subgroup, $fieldset,
+    function add($param_name, $default_value, $type, $subgroup, $fieldset,
          $selection_array=null, $sort=0, $set=true, $group='Core')
     {
-        global $_TABLES, $_DB, $_DB_dbms;
+        global $_TABLES;
 
         $format = 'INSERT INTO %1$s (name, value, type, ' .
             'subgroup, group_name, selectionArray, sort_order,'.
@@ -276,15 +283,9 @@
                        $fieldset,
                        serialize($default_value));
         $Qargs = array_map('addslashes', $Qargs);
-        $sql_query = vsprintf($format, $Qargs);
+        $sql = vsprintf($format, $Qargs);
 
-        if ($_DB_dbms == 'mssql') {
-            $sql_query = str_replace("\\'","''",$sql_query);
-            $sql_query = str_replace('\\"','""',$sql_query);
-            $_DB->dbQuery($sql_query, 0, 1);
-        } else {
-            DB_query($sql_query);
-        }
+        $this->_DB_escapedQuery($sql);
 
         $this->config_array[$group][$param_name] = $default_value;
     }
@@ -296,7 +297,7 @@
     function del($param_name, $group)
     {
         DB_delete($GLOBALS['_TABLES']['conf_values'],
-                  array("name","group_name"),
+                  array('name', 'group_name'),
                   array(addslashes($param_name), addslashes($group)));
         unset($this->config_array[$group][$param_name]);
     }
@@ -312,7 +313,7 @@
         global $_TABLES, $LANG_confignames, $LANG_configselects;
 
         $q_string = "SELECT name, type, selectionArray, "
-            . "fieldset, value FROM {$_TABLES['conf_values']}" .
+            . "fieldset, value, default_value FROM {$_TABLES['conf_values']}" .
             " WHERE group_name='{$group}' AND subgroup='{$subgroup}' " .
             " AND (type <> 'fieldset' AND type <> 'subgroup') " .
             " ORDER BY fieldset,sort_order ASC";
@@ -326,6 +327,11 @@
         }
         while ($row = DB_fetchArray($Qresult)) {
             $cur = $row;
+            if (substr($cur[5], 0, 6) == 'unset:') {
+                $cur[5] = true;
+            } else {
+                $cur[5] = false;
+            }
             $res[$cur[3]][$cur[0]] =
                 array('display_name' =>
                       (array_key_exists($cur[0], $LANG_confignames[$group]) ?
@@ -340,7 +346,8 @@
                        $LANG_configselects[$group][$cur[2]] : null),
                       'value' =>
                       (($cur[4] == 'unset') ?
-                       'unset' : unserialize($cur[4])));
+                       'unset' : unserialize($cur[4])),
+                      'reset' => $cur[5]);
         }
 
         return $res;
@@ -443,7 +450,7 @@
         $groups = $this->_get_groups();
         $outerloopcntr = 1;
         if (count($groups) > 0) {
-            $t->set_block('menugroup','subgroup-selector','subgroups');
+            $t->set_block('menugroup', 'subgroup-selector', 'subgroups');
             foreach ($groups as $group) {
                 $t->set_var("select_id", ($group === $grp ? 'id="current"' : ''));
                 $t->set_var("group_select_value", $group);
@@ -501,7 +508,8 @@
                                                $e['display_name'],
                                                $e['type'],
                                                $e['value'],
-                                               $e['selectionArray']);
+                                               $e['selectionArray'], false,
+                                               $e['reset']);
             }
             $this->_UI_get_fs($grp, $fs_contents, $fset, $t);
         }
@@ -568,7 +576,8 @@
     }
 
     function _UI_get_conf_element($group, $name, $display_name, $type, $val,
-                                  $selectionArray = null , $deletable = 0)
+                                  $selectionArray = null , $deletable = false,
+                                  $allow_reset = false)
     {
         global $_CONF, $LANG_CONFIG;
 
@@ -598,8 +607,10 @@
         if ($deletable) {
             $t->set_var('delete', $t->parse('output', 'delete-button'));
         } else {
-            //$t->set_var('unset_link',
-            //            "(<a href='#' onClick='unset(\"{$name}\");'>X</a>)");
+            if ($allow_reset) {
+                $t->set_var('unset_link',
+                        "(<a href='#' onClick='unset(\"{$name}\");'>X</a>)");
+            }
             if (($a = strrchr($name, '[')) !== FALSE) {
                 $on = substr($a, 1, -1);
                 $o = str_replace(array('[', ']'), array('_', ''), $name);
@@ -664,7 +675,8 @@
                 $result .= config::_UI_get_conf_element($group,
                                 $name . '[' . $valkey . ']',
                                 $display_name . '[' . $valkey . ']',
-                                substr($type, 1), $valval, $selectionArray);
+                                substr($type, 1), $valval, $selectionArray,
+                                false);
             }
             return $result;
         } elseif (strpos($type, "*") === 0 || strpos($type, "%") === 0) {
@@ -829,6 +841,23 @@
 
         return $retval;
     }
+
+    /**
+     * Helper function: Fix escaped SQL requests for MS SQL, if necessary
+     *
+     */
+    function _DB_escapedQuery($sql)
+    {
+        global $_DB, $_DB_dbms;
+
+        if ($_DB_dbms == 'mssql') {
+            $sql = str_replace("\\'", "''", $sql);
+            $sql = str_replace('\\"', '"', $sql);
+            $_DB->dbQuery($sql, 0, 1);
+        } else {
+            DB_query($sql);
+        }
+    }
 }
 
 ?>



More information about the geeklog-cvs mailing list