X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2FCore%2FConfig.php;h=7b7045a9ee3ed2f3fe00989d97db6cba13e9959f;hb=80ec0398d877810ddfb8c76f2f258fdaa962ec9e;hp=bbae746b44dae2f3fffa457aab61988e819fc802;hpb=6c346b1ab64fefebe61be3ddf36cf48eccd52d69;p=friendica.git diff --git a/include/Core/Config.php b/include/Core/Config.php index bbae746b44..7b7045a9ee 100644 --- a/include/Core/Config.php +++ b/include/Core/Config.php @@ -1,8 +1,11 @@ config[$k] = $rr['v']; @@ -64,80 +67,46 @@ class Config { * The category of the configuration value * @param string $key * The configuration key to query - * @param boolean $refresh - * If true the config is loaded from the db and not from the cache + * @param mixed $default_value optional + * The value to return if key is not set (default: null) + * @param boolean $refresh optional + * If true the config is loaded from the db and not from the cache (default: false) * @return mixed Stored value or null if it does not exist */ - public static function get($family, $key, $refresh = false) { + public static function get($family, $key, $default_value = null, $refresh = false) { - global $a; + $a = get_app(); - if(! $instore) { + if (!$refresh) { // Looking if the whole family isn't set - if(isset($a->config[$family])) { - if($a->config[$family] === '!!') { - return null; + if (isset($a->config[$family])) { + if ($a->config[$family] === '!!') { + return $default_value; } } - if(isset($a->config[$family][$key])) { - if($a->config[$family][$key] === '!!') { - return null; + if (isset($a->config[$family][$key])) { + if ($a->config[$family][$key] === '!!') { + return $default_value; } return $a->config[$family][$key]; } } - // If APC is enabled then fetch the data from there, else try XCache - /*if (function_exists("apc_fetch") AND function_exists("apc_exists")) - if (apc_exists($family."|".$key)) { - $val = apc_fetch($family."|".$key); - $a->config[$family][$key] = $val; - - if ($val === '!!') - return false; - else - return $val; - } - elseif (function_exists("xcache_fetch") AND function_exists("xcache_isset")) - if (xcache_isset($family."|".$key)) { - $val = xcache_fetch($family."|".$key); - $a->config[$family][$key] = $val; - - if ($val === '!!') - return false; - else - return $val; - } - */ - - $ret = q("SELECT `v` FROM `config` WHERE `cat` = '%s' AND `k` = '%s' LIMIT 1", + $ret = q("SELECT `v` FROM `config` WHERE `cat` = '%s' AND `k` = '%s' ORDER BY `id` DESC LIMIT 1", dbesc($family), dbesc($key) ); - if(count($ret)) { + if (count($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; - // If APC is enabled then store the data there, else try XCache - /*if (function_exists("apc_store")) - apc_store($family."|".$key, $val, 600); - elseif (function_exists("xcache_set")) - xcache_set($family."|".$key, $val, 600);*/ - return $val; - } - else { + } else { $a->config[$family][$key] = '!!'; - - // If APC is enabled then store the data there, else try XCache - /*if (function_exists("apc_store")) - apc_store($family."|".$key, '!!', 600); - elseif (function_exists("xcache_set")) - xcache_set($family."|".$key, '!!', 600);*/ } - return null; + return $default_value; } /** @@ -156,48 +125,38 @@ class Config { * The value to store * @return mixed Stored $value or false if the database update failed */ - public static function set($family,$key,$value) { - global $a; + public static function set($family, $key, $value) { + $a = get_app(); + + $stored = self::get($family, $key); - // If $a->config[$family] has been previously set to '!!', 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($a->config[$family]); + if ($stored == $value) { + return true; + } + + $a->config[$family][$key] = $value; // manage array value - $dbvalue = (is_array($value)?serialize($value):$value); + $dbvalue = (is_array($value) ? serialize($value) : $value); $dbvalue = (is_bool($dbvalue) ? intval($dbvalue) : $dbvalue); - if(self::get($family,$key,true) === false) { - $a->config[$family][$key] = $value; - $ret = q("INSERT INTO `config` ( `cat`, `k`, `v` ) VALUES ( '%s', '%s', '%s' ) ", + + if (is_null($stored)) { + $ret = q("INSERT INTO `config` (`cat`, `k`, `v`) VALUES ('%s', '%s', '%s') ON DUPLICATE KEY UPDATE `v` = '%s'", dbesc($family), dbesc($key), + dbesc($dbvalue), dbesc($dbvalue) ); - if($ret) - return $value; - return $ret; + } else { + $ret = q("UPDATE `config` SET `v` = '%s' WHERE `cat` = '%s' AND `k` = '%s'", + dbesc($dbvalue), + dbesc($family), + dbesc($key) + ); } - - $ret = q("UPDATE `config` SET `v` = '%s' WHERE `cat` = '%s' AND `k` = '%s'", - dbesc($dbvalue), - dbesc($family), - dbesc($key) - ); - - $a->config[$family][$key] = $value; - - // If APC is enabled then store the data there, else try XCache - /*if (function_exists("apc_store")) - apc_store($family."|".$key, $value, 600); - elseif (function_exists("xcache_set")) - xcache_set($family."|".$key, $value, 600);*/ - - if($ret) + if ($ret) { return $value; + } return $ret; } @@ -213,20 +172,16 @@ class Config { * The configuration key to delete * @return mixed */ - public static function delete($family,$key) { + public static function delete($family, $key) { - global $a; - if(x($a->config[$family],$key)) + $a = get_app(); + if (x($a->config[$family],$key)) { unset($a->config[$family][$key]); + } $ret = q("DELETE FROM `config` WHERE `cat` = '%s' AND `k` = '%s'", dbesc($family), dbesc($key) ); - // If APC is enabled then delete the data from there, else try XCache - /*if (function_exists("apc_delete")) - apc_delete($family."|".$key); - elseif (function_exists("xcache_unset")) - xcache_unset($family."|".$key);*/ return $ret; }