2023-01-01 20:23:53 +00:00
|
|
|
<?php
|
|
|
|
namespace Misuzu\Config;
|
|
|
|
|
|
|
|
use Index\Data\DataException;
|
|
|
|
use Index\Data\IDbConnection;
|
|
|
|
use Index\Data\IDbStatement;
|
|
|
|
|
|
|
|
class DbConfig implements IConfig {
|
|
|
|
private IDbConnection $dbConn;
|
|
|
|
private array $values = [];
|
|
|
|
|
|
|
|
private ?IDbStatement $stmtSet = null;
|
|
|
|
private ?IDbStatement $stmtDelete = null;
|
|
|
|
|
|
|
|
public function __construct(IDbConnection $dbConn) {
|
|
|
|
$this->dbConn = $dbConn;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function reload(): void {
|
|
|
|
$this->values = [];
|
|
|
|
|
|
|
|
try {
|
|
|
|
$result = $this->dbConn->query('SELECT config_name, config_value FROM msz_config;');
|
|
|
|
while($result->next())
|
|
|
|
$this->values[$result->getString(0)] = unserialize($result->getString(1));
|
|
|
|
} catch(DataException $ex) { }
|
|
|
|
}
|
|
|
|
|
|
|
|
public function scopeTo(string $prefix): IConfig {
|
|
|
|
return new ScopedConfig($this, $prefix);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getNames(): array {
|
|
|
|
return array_keys($this->values);
|
|
|
|
}
|
|
|
|
|
2023-01-06 20:50:41 +00:00
|
|
|
public function getValue(string $name, string $type = IConfig::T_ANY, $default = null): mixed {
|
2023-01-01 20:23:53 +00:00
|
|
|
$value = $this->values[$name] ?? null;
|
|
|
|
|
2023-01-06 20:50:41 +00:00
|
|
|
if($type !== IConfig::T_ANY && CfgTools::type($value) !== $type)
|
2023-01-01 20:23:53 +00:00
|
|
|
$value = null;
|
|
|
|
|
|
|
|
return $value ?? $default ?? CfgTools::default($type);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function hasValue(string $name): bool {
|
|
|
|
return array_key_exists($name, $this->values);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function setValue(string $name, $value, bool $save = true): void {
|
|
|
|
$this->values[$name] = $value;
|
|
|
|
|
|
|
|
if($save) {
|
|
|
|
$value = serialize($value);
|
|
|
|
|
|
|
|
if($this->stmtSet === null)
|
|
|
|
$this->stmtSet = $this->dbConn->prepare('REPLACE INTO msz_config (config_name, config_value) VALUES (?, ?)');
|
|
|
|
|
|
|
|
$this->stmtSet->reset();
|
|
|
|
$this->stmtSet->addParameter(1, $name);
|
|
|
|
$this->stmtSet->addParameter(2, $value);
|
|
|
|
$this->stmtSet->execute();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function removeValue(string $name, bool $save = true): void {
|
|
|
|
unset($this->values[$name]);
|
|
|
|
|
|
|
|
if($save) {
|
|
|
|
if($this->stmtDelete === null)
|
|
|
|
$this->stmtDelete = $this->dbConn->prepare('DELETE FROM msz_config WHERE config_name = ?');
|
|
|
|
|
|
|
|
$this->stmtDelete->reset();
|
|
|
|
$this->stmtDelete->addParameter(1, $name);
|
|
|
|
$this->stmtDelete->execute();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|