220 lines
5.1 KiB
PHP
220 lines
5.1 KiB
PHP
<?php
|
|
|
|
namespace Icinga\Module\Director;
|
|
|
|
class Settings
|
|
{
|
|
protected $connection;
|
|
|
|
protected $db;
|
|
|
|
protected $cache;
|
|
|
|
protected $defaults = [
|
|
'default_global_zone' => 'director-global',
|
|
'icinga_package_name' => 'director',
|
|
'config_format' => 'v2',
|
|
'override_services_varname' => '_override_servicevars',
|
|
'override_services_templatename' => 'host var overrides (Director)',
|
|
'disable_all_jobs' => 'n', // 'y'
|
|
'enable_audit_log' => 'n',
|
|
'deployment_mode_v1' => 'active-passive',
|
|
'deployment_path_v1' => null,
|
|
'activation_script_v1' => null,
|
|
'self-service/agent_name' => 'fqdn',
|
|
'self-service/transform_hostname' => '0',
|
|
'self-service/resolve_parent_host' => '0',
|
|
'self-service/global_zones' => ['director-global'],
|
|
'ignore_bug7530' => 'n',
|
|
'feature_custom_endpoint' => 'n',
|
|
// 'experimental_features' => null, // 'allow'
|
|
// 'master_zone' => null,
|
|
];
|
|
|
|
protected $jsonEncode = [
|
|
'self-service/global_zones',
|
|
'self-service/installer_hashes',
|
|
];
|
|
|
|
public function __construct(Db $connection)
|
|
{
|
|
$this->connection = $connection;
|
|
$this->db = $connection->getDbAdapter();
|
|
}
|
|
|
|
/**
|
|
* @return Db
|
|
*/
|
|
public function getConnection()
|
|
{
|
|
return $this->connection;
|
|
}
|
|
|
|
/**
|
|
* @return \Zend_Db_Adapter_Abstract
|
|
*/
|
|
public function getDb()
|
|
{
|
|
return $this->db;
|
|
}
|
|
|
|
/**
|
|
* @param $key
|
|
* @param null $default
|
|
* @return mixed|null
|
|
*/
|
|
public function get($key, $default = null)
|
|
{
|
|
if (null === ($value = $this->getStoredValue($key, $default))) {
|
|
return $this->getDefaultValue($key);
|
|
} else {
|
|
return $value;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param $key
|
|
* @param null $default
|
|
* @return mixed|null
|
|
*/
|
|
public function getStoredValue($key, $default = null)
|
|
{
|
|
if (null === ($value = $this->getSetting($key))) {
|
|
return $default;
|
|
} else {
|
|
if (in_array($key, $this->jsonEncode)) {
|
|
$value = json_decode($value);
|
|
}
|
|
return $value;
|
|
}
|
|
}
|
|
|
|
public function getDefaultValue($key)
|
|
{
|
|
if (array_key_exists($key, $this->defaults)) {
|
|
return $this->defaults[$key];
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public function getStoredOrDefaultValue($key)
|
|
{
|
|
$value = $this->getStoredValue($key);
|
|
if ($value === null) {
|
|
return $this->getDefaultValue($key);
|
|
} else {
|
|
return $value;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param $name
|
|
* @param $value
|
|
* @return $this
|
|
* @throws \Zend_Db_Adapter_Exception
|
|
*/
|
|
public function set($name, $value)
|
|
{
|
|
$db = $this->db;
|
|
|
|
if ($value === null) {
|
|
$db->delete(
|
|
'director_setting',
|
|
$db->quoteInto('setting_name = ?', $name)
|
|
);
|
|
|
|
unset($this->cache[$name]);
|
|
|
|
return $this;
|
|
}
|
|
|
|
if (in_array($name, $this->jsonEncode)) {
|
|
$value = json_encode(array_values($value));
|
|
}
|
|
|
|
if ($this->getSetting($name) === $value) {
|
|
return $this;
|
|
}
|
|
|
|
$updated = $db->update(
|
|
'director_setting',
|
|
array('setting_value' => $value),
|
|
$db->quoteInto('setting_name = ?', $name)
|
|
);
|
|
|
|
if ($updated === 0) {
|
|
$db->insert(
|
|
'director_setting',
|
|
array(
|
|
'setting_name' => $name,
|
|
'setting_value' => $value,
|
|
)
|
|
);
|
|
}
|
|
|
|
if ($this->cache !== null) {
|
|
$this->cache[$name] = $value;
|
|
}
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function clearCache()
|
|
{
|
|
$this->cache = null;
|
|
return $this;
|
|
}
|
|
|
|
protected function getSetting($name, $default = null)
|
|
{
|
|
if ($this->cache === null) {
|
|
$this->refreshCache();
|
|
}
|
|
|
|
if (array_key_exists($name, $this->cache)) {
|
|
return $this->cache[$name];
|
|
}
|
|
|
|
return $default;
|
|
}
|
|
|
|
protected function refreshCache()
|
|
{
|
|
$db = $this->db;
|
|
|
|
$query = $db->select()->from(
|
|
array('s' => 'director_setting'),
|
|
array('setting_name', 'setting_value')
|
|
);
|
|
|
|
$this->cache = (array) $db->fetchPairs($query);
|
|
}
|
|
|
|
/**
|
|
* @param $key
|
|
* @return mixed|null
|
|
*/
|
|
public function __get($key)
|
|
{
|
|
return $this->get($key);
|
|
}
|
|
|
|
/**
|
|
* @param $key
|
|
* @param $value
|
|
* @throws \Zend_Db_Adapter_Exception
|
|
*/
|
|
public function __set($key, $value)
|
|
{
|
|
$this->set($key, $value);
|
|
}
|
|
|
|
public function __destruct()
|
|
{
|
|
$this->clearCache();
|
|
unset($this->db);
|
|
unset($this->connection);
|
|
}
|
|
}
|