*/
class Configuration
{
+ /**
+ * The blacklist of configuration settings, which should not get saved to the backend
+ * @var array
+ */
+ private $configSaveBlacklist = [
+ 'config' => [
+ 'hostname' => true,
+ ]
+ ];
+
/**
* @var Cache\IConfigCache
*/
*/
public function get($cat, $key, $default_value = null, $refresh = false)
{
- // Return the value of the cache if found and no refresh is forced
- if (!$refresh && $this->configCache->has($cat, $key)) {
- return $this->configCache->get($cat, $key);
- }
+ // if the value isn't loaded or refresh is needed, load it to the cache
+ if ($this->configAdapter->isConnected() &&
+ (!$this->configAdapter->isLoaded($cat, $key) ||
+ $refresh)) {
- // if we don't find the value in the cache and the adapter isn't ready, return the default value
- if (!$this->configAdapter->isConnected()) {
- return $default_value;
+ $dbvalue = $this->configAdapter->get($cat, $key);
+
+ if (isset($dbvalue)) {
+ $this->configCache->set($cat, $key, $dbvalue);
+ return $dbvalue;
+ }
}
- // load DB value to cache
- $dbvalue = $this->configAdapter->get($cat, $key);
+ // use the config cache for return
+ $result = $this->configCache->get($cat, $key);
- if ($dbvalue !== '!<unset>!') {
- $this->configCache->set($cat, $key, $dbvalue);
- return $dbvalue;
- } else {
- return $default_value;
- }
+ return (isset($result)) ? $result : $default_value;
}
/**
$cached = $this->configCache->set($cat, $key, $value);
// If there is no connected adapter, we're finished
- if (!$this->configAdapter->isConnected()) {
+ if (!$this->configAdapter->isConnected() || !empty($this->configSaveBlacklist[$cat][$key])) {
return $cached;
}