config)) $a->config[$family] = array(); if(! array_key_exists('config_loaded',$a->config[$family])) { $r = q("SELECT * FROM config WHERE cat = '%s'", dbesc($family)); if($r !== false) { if($r) { foreach($r as $rr) { $k = $rr['k']; $a->config[$family][$k] = $rr['v']; } } $a->config[$family]['config_loaded'] = true; } } } // get a particular config variable given the family name // and key. Returns false if not set. // $instore is only used by the set_config function // to determine if the key already exists in the DB // If a key is found in the DB but doesn't exist in // local config cache, pull it into the cache so we don't have // to hit the DB again for this item. function get_config($family, $key) { global $a; if(! array_key_exists($family,$a->config)) load_config($family); if(array_key_exists('config_loaded',$a->config[$family])) { if(! array_key_exists($key,$a->config[$family])) { return false; } return ((preg_match('|^a:[0-9]+:{.*}$|s', $a->config[$family][$key])) ? unserialize($a->config[$family][$key]) : $a->config[$family][$key] ); } return false; } // Store a config value ($value) in the category ($family) // under the key ($key) // Return the value, or false if the database update failed 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) === false) { $a->config[$family][$key] = $value; $ret = q("INSERT INTO config ( cat, k, v ) VALUES ( '%s', '%s', '%s' ) ", dbesc($family), dbesc($key), dbesc($dbvalue) ); if($ret) return $value; return $ret; } $ret = q("UPDATE config SET v = '%s' WHERE cat = '%s' AND k = '%s' LIMIT 1", dbesc($dbvalue), dbesc($family), dbesc($key) ); $a->config[$family][$key] = $value; if($ret) return $value; return $ret; } function del_config($family,$key) { global $a; if(array_key_exists($family,$a->config) && array_key_exists($key,$a->config[$family])) unset($a->config[$family][$key]); $ret = q("DELETE FROM config WHERE cat = '%s' AND k = '%s' LIMIT 1", dbesc($family), dbesc($key) ); return $ret; } function load_pconfig($uid,$family = '') { global $a; if(! array_key_exists($uid,$a->config)) $a->config[$uid] = array(); if(($family) && (! array_key_exists($family,$a->config[$uid]))) $a->config[$uid][$family] = array(); if($family) { $r = q("SELECT * FROM `pconfig` WHERE `cat` = '%s' AND `uid` = %d", dbesc($family), intval($uid) ); } else { $r = q("SELECT * FROM `pconfig` WHERE `uid` = %d", intval($uid) ); } if($r) { foreach($r as $rr) { $k = $rr['k']; $c = $rr['cat']; if(! array_key_exists($c,$a->config[$uid])) { $a->config[$uid][$c] = array(); $a->config[$uid][$c]['config_loaded'] = true; } $a->config[$uid][$c][$k] = $rr['v']; } } } function get_pconfig($uid,$family, $key, $instore = false) { global $a; if(! array_key_exists($uid,$a->config)) load_pconfig($uid); if((! array_key_exists($family,$a->config[$uid])) || (! array_key_exists($key,$a->config[$uid][$family]))) return false; return ((preg_match('|^a:[0-9]+:{.*}$|s', $a->config[$uid][$family][$key])) ? unserialize($a->config[$uid][$family][$key]) : $a->config[$uid][$family][$key] ); } function set_pconfig($uid,$family,$key,$value) { global $a; // manage array value $dbvalue = ((is_array($value)) ? serialize($value) : $value); $dbvalue = ((is_bool($dbvalue)) ? intval($dbvalue) : $dbvalue); if(get_pconfig($uid,$family,$key) === false) { if(! array_key_exists($uid,$a->config)) $a->config[$uid] = array(); if(! array_key_exists($family,$a->config[$uid])) $a->config[$uid][$family] = array(); $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($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($dbvalue), intval($uid), dbesc($family), dbesc($key) ); $a->config[$uid][$family][$key] = $value; if($ret) return $value; return $ret; } function del_pconfig($uid,$family,$key) { global $a; if(x($a->config[$uid][$family],$key)) unset($a->config[$uid][$family][$key]); $ret = q("DELETE FROM pconfig WHERE uid = %d AND cat = '%s' AND k = '%s' LIMIT 1", intval($uid), dbesc($family), dbesc($key) ); return $ret; } function load_xconfig($xchan,$family) { global $a; $r = q("SELECT * FROM `xconfig` WHERE `cat` = '%s' AND `xchan` = '%s'", dbesc($family), dbesc($xchan) ); if(count($r)) { foreach($r as $rr) { $k = $rr['k']; $a->config[$xchan][$family][$k] = $rr['v']; } } else if ($family != 'config') { // Negative caching $a->config[$xchan][$family] = "!!"; } } function get_xconfig($xchan,$family, $key, $instore = false) { global $a; if(! $instore) { // Looking if the whole family isn't set if(isset($a->config[$xchan][$family])) { if($a->config[$xchan][$family] === '!!') { return false; } } if(isset($a->config[$xchan][$family][$key])) { if($a->config[$xchan][$family][$key] === '!!') { return false; } return $a->config[$xchan][$family][$key]; } } $ret = q("SELECT `v` FROM `xconfig` WHERE `xchan` = '%s' AND `cat` = '%s' AND `k` = '%s' LIMIT 1", dbesc($xchan), dbesc($family), dbesc($key) ); if(count($ret)) { $val = (preg_match("|^a:[0-9]+:{.*}$|s", $ret[0]['v'])?unserialize( $ret[0]['v']):$ret[0]['v']); $a->config[$xchan][$family][$key] = $val; return $val; } else { $a->config[$xchan][$family][$key] = '!!'; } return false; } function set_xconfig($xchan,$family,$key,$value) { global $a; // manage array value $dbvalue = (is_array($value)?serialize($value):$value); if(get_xconfig($xchan,$family,$key,true) === false) { $a->config[$xchan][$family][$key] = $value; $ret = q("INSERT INTO `xconfig` ( `xchan`, `cat`, `k`, `v` ) VALUES ( '%s', '%s', '%s', '%s' ) ", dbesc($xchan), dbesc($family), dbesc($key), dbesc($dbvalue) ); if($ret) return $value; return $ret; } $ret = q("UPDATE `xconfig` SET `v` = '%s' WHERE `xchan` = '%s' AND `cat` = '%s' AND `k` = '%s' LIMIT 1", dbesc($dbvalue), dbesc($xchan), dbesc($family), dbesc($key) ); $a->config[$xchan][$family][$key] = $value; if($ret) return $value; return $ret; } function del_xconfig($xchan,$family,$key) { global $a; if(x($a->config[$xchan][$family],$key)) unset($a->config[$xchan][$family][$key]); $ret = q("DELETE FROM `xconfig` WHERE `xchan` = '%s' AND `cat` = '%s' AND `k` = '%s' LIMIT 1", dbesc($xchan), dbesc($family), dbesc($key) ); return $ret; }