if(! function_exists('load_config')) {
function load_config($family) {
global $a;
- $r = q("SELECT * FROM `config` WHERE `cat` = '%s'",
- dbesc($family)
- );
+ $r = q("SELECT * FROM `config` WHERE `cat` = '%s'", dbesc($family));
if(count($r)) {
foreach($r as $rr) {
$k = $rr['k'];
- if ($rr['cat'] === 'config') {
+ if ($family === 'config') {
$a->config[$k] = $rr['v'];
} else {
$a->config[$family][$k] = $rr['v'];
}
}
- } else if ($rr['cat'] != 'config') {
+ } else if ($family != 'config') {
// Negative caching
$a->config[$family] = "!<unset>!";
}
);
if(count($ret)) {
// manage array value
- $val = (preg_match("|^a:[0-9]+:{.*}$|", $ret[0]['v'])?unserialize( $ret[0]['v']):$ret[0]['v']);
+ $val = (preg_match("|^a:[0-9]+:{.*}$|s", $ret[0]['v'])?unserialize( $ret[0]['v']):$ret[0]['v']);
$a->config[$family][$key] = $val;
return $val;
}
if(! function_exists('set_config')) {
function set_config($family,$key,$value) {
global $a;
+
+ // If $a->config[$family] has been previously set to '!<unset>!', then
+ // $a->config[$family][$key] will evaluate to $a->config[$family][0], and
+ // $a->config[$family][$key] = $value will be equivalent to
+ // $a->config[$family][0] = $value[0] (this causes infuriating bugs),
+ // so unset the family before assigning a value to a family's key
+ if($a->config[$family] === '!<unset>!')
+ unset($a->config[$family]);
+
// manage array value
$dbvalue = (is_array($value)?serialize($value):$value);
$dbvalue = (is_bool($dbvalue) ? intval($dbvalue) : $dbvalue);
$k = $rr['k'];
$a->config[$uid][$family][$k] = $rr['v'];
}
- } else if ($rr['cat'] != 'config') {
+ } else if ($family != 'config') {
// Negative caching
$a->config[$uid][$family] = "!<unset>!";
}
);
if(count($ret)) {
- $val = (preg_match("|^a:[0-9]+:{.*}$|", $ret[0]['v'])?unserialize( $ret[0]['v']):$ret[0]['v']);
+ $val = (preg_match("|^a:[0-9]+:{.*}$|s", $ret[0]['v'])?unserialize( $ret[0]['v']):$ret[0]['v']);
$a->config[$uid][$family][$key] = $val;
return $val;
}