<?php
+/**
+ *
+ * Arbitrary configuration storage
+ * Note:
+ * Please do not store booleans - convert to 0/1 integer values
+ * The get_?config() functions return boolean false for keys that are unset,
+ * and this could lead to subtle bugs.
+ *
+ * There are a few places in the code (such as the admin panel) where boolean
+ * configurations need to be fixed as of 10/08/2011.
+ */
+
+
// retrieve a "family" of config variables from database to cached storage
if(! function_exists('load_config')) {
if(! function_exists('set_config')) {
function set_config($family,$key,$value) {
global $a;
-
// manage array value
$dbvalue = (is_array($value)?serialize($value):$value);
-
+ $dbvalue = (is_bool($dbvalue) ? intval($dbvalue) : $dbvalue);
if(get_config($family,$key,true) === false) {
$a->config[$family][$key] = $value;
$ret = q("INSERT INTO `config` ( `cat`, `k`, `v` ) VALUES ( '%s', '%s', '%s' ) ",
);
if(count($ret)) {
- $a->config[$uid][$family][$key] = $ret[0]['v'];
- return $ret[0]['v'];
+ $val = (preg_match("|^a:[0-9]+:{.*}$|", $ret[0]['v'])?unserialize( $ret[0]['v']):$ret[0]['v']);
+ $a->config[$uid][$family][$key] = $val;
+ return $val;
}
else {
$a->config[$uid][$family][$key] = '!<unset>!';
if(x($a->config[$family],$key))
unset($a->config[$family][$key]);
$ret = q("DELETE FROM `config` WHERE `cat` = '%s' AND `k` = '%s' LIMIT 1",
- dbesc($cat),
+ dbesc($family),
dbesc($key)
);
return $ret;
global $a;
+ // manage array value
+ $dbvalue = (is_array($value)?serialize($value):$value);
+
if(get_pconfig($uid,$family,$key,true) === false) {
$a->config[$uid][$family][$key] = $value;
$ret = q("INSERT INTO `pconfig` ( `uid`, `cat`, `k`, `v` ) VALUES ( %d, '%s', '%s', '%s' ) ",
intval($uid),
dbesc($family),
dbesc($key),
- dbesc($value)
+ dbesc($dbvalue)
);
if($ret)
return $value;
return $ret;
}
$ret = q("UPDATE `pconfig` SET `v` = '%s' WHERE `uid` = %d AND `cat` = '%s' AND `k` = '%s' LIMIT 1",
- dbesc($value),
+ dbesc($dbvalue),
intval($uid),
dbesc($family),
dbesc($key)