|
|
@ -22,6 +22,8 @@ use dbm; |
|
|
|
*/ |
|
|
|
class Config { |
|
|
|
|
|
|
|
private static $cache; |
|
|
|
|
|
|
|
/** |
|
|
|
* @brief Loads all configuration values of family into a cached storage. |
|
|
|
* |
|
|
@ -32,10 +34,17 @@ class Config { |
|
|
|
* The category of the configuration value |
|
|
|
* @return void |
|
|
|
*/ |
|
|
|
public static function load($family) { |
|
|
|
public static function load($family = "config") { |
|
|
|
|
|
|
|
// We don't preload "system" anymore.
|
|
|
|
// This reduces the number of database reads a lot.
|
|
|
|
if ($family == 'system') { |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
$a = get_app(); |
|
|
|
|
|
|
|
$r = q("SELECT `v`, `k` FROM `config` WHERE `cat` = '%s' ORDER BY `cat`, `k`, `id`", dbesc($family)); |
|
|
|
$r = q("SELECT `v`, `k` FROM `config` WHERE `cat` = '%s'", dbesc($family)); |
|
|
|
if (dbm::is_result($r)) { |
|
|
|
foreach ($r as $rr) { |
|
|
|
$k = $rr['k']; |
|
|
@ -43,11 +52,9 @@ class Config { |
|
|
|
$a->config[$k] = $rr['v']; |
|
|
|
} else { |
|
|
|
$a->config[$family][$k] = $rr['v']; |
|
|
|
self::$cache[$family][$k] = $rr['v']; |
|
|
|
} |
|
|
|
} |
|
|
|
} else if ($family != 'config') { |
|
|
|
// Negative caching
|
|
|
|
$a->config[$family] = "!<unset>!"; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -78,34 +85,38 @@ class Config { |
|
|
|
$a = get_app(); |
|
|
|
|
|
|
|
if (!$refresh) { |
|
|
|
// Looking if the whole family isn't set
|
|
|
|
if (isset($a->config[$family])) { |
|
|
|
if ($a->config[$family] === '!<unset>!') { |
|
|
|
return $default_value; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (isset($a->config[$family][$key])) { |
|
|
|
if ($a->config[$family][$key] === '!<unset>!') { |
|
|
|
// Do we have the cached value? Then return it
|
|
|
|
if (isset(self::$cache[$family][$key])) { |
|
|
|
if (self::$cache[$family][$key] == '!<unset>!') { |
|
|
|
return $default_value; |
|
|
|
} else { |
|
|
|
return self::$cache[$family][$key]; |
|
|
|
} |
|
|
|
return $a->config[$family][$key]; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
$ret = q("SELECT `v` FROM `config` WHERE `cat` = '%s' AND `k` = '%s' ORDER BY `id` DESC LIMIT 1", |
|
|
|
$ret = q("SELECT `v` FROM `config` WHERE `cat` = '%s' AND `k` = '%s'", |
|
|
|
dbesc($family), |
|
|
|
dbesc($key) |
|
|
|
); |
|
|
|
if (count($ret)) { |
|
|
|
if (dbm::is_result($ret)) { |
|
|
|
// manage array value
|
|
|
|
$val = (preg_match("|^a:[0-9]+:{.*}$|s", $ret[0]['v'])?unserialize( $ret[0]['v']):$ret[0]['v']); |
|
|
|
$a->config[$family][$key] = $val; |
|
|
|
|
|
|
|
// Assign the value from the database to the cache
|
|
|
|
self::$cache[$family][$key] = $val; |
|
|
|
return $val; |
|
|
|
} else { |
|
|
|
$a->config[$family][$key] = '!<unset>!'; |
|
|
|
} elseif (isset($a->config[$family][$key])) { |
|
|
|
|
|
|
|
// Assign the value (mostly) from the .htconfig.php to the cache
|
|
|
|
self::$cache[$family][$key] = $a->config[$family][$key]; |
|
|
|
|
|
|
|
return $a->config[$family][$key]; |
|
|
|
} |
|
|
|
|
|
|
|
self::$cache[$family][$key] = '!<unset>!'; |
|
|
|
|
|
|
|
return $default_value; |
|
|
|
} |
|
|
|
|
|
|
@ -134,7 +145,14 @@ class Config { |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
$a->config[$family][$key] = $value; |
|
|
|
if ($family === 'config') { |
|
|
|
$a->config[$key] = $value; |
|
|
|
} elseif ($family != 'system') { |
|
|
|
$a->config[$family][$key] = $value; |
|
|
|
} |
|
|
|
|
|
|
|
// Assign the just added value to the cache
|
|
|
|
self::$cache[$family][$key] = $value; |
|
|
|
|
|
|
|
// manage array value
|
|
|
|
$dbvalue = (is_array($value) ? serialize($value) : $value); |
|
|
@ -174,9 +192,8 @@ class Config { |
|
|
|
*/ |
|
|
|
public static function delete($family, $key) { |
|
|
|
|
|
|
|
$a = get_app(); |
|
|
|
if (x($a->config[$family],$key)) { |
|
|
|
unset($a->config[$family][$key]); |
|
|
|
if (isset(self::$cache[$family][$key])) { |
|
|
|
unset(self::$cache[$family][$key]); |
|
|
|
} |
|
|
|
$ret = q("DELETE FROM `config` WHERE `cat` = '%s' AND `k` = '%s'", |
|
|
|
dbesc($family), |
|
|
@ -185,5 +202,4 @@ class Config { |
|
|
|
|
|
|
|
return $ret; |
|
|
|
} |
|
|
|
|
|
|
|
} |