53 lines
1.3 KiB
PHP
53 lines
1.3 KiB
PHP
|
<?php
|
||
|
class KeyValue {
|
||
|
protected static $kv = null;
|
||
|
|
||
|
public static function get(string $keyname, ?string $channel = null) {
|
||
|
if (self::$kv === null) {
|
||
|
self::load();
|
||
|
}
|
||
|
|
||
|
if ($channel === null) {
|
||
|
$channel = "all";
|
||
|
}
|
||
|
|
||
|
if (isset(self::$kv[$keyname][$channel])) {
|
||
|
return self::$kv[$keyname][$channel];
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
public static function save(string $keyname, string $value, ?string $channel = null) {
|
||
|
if (self::$kv === null) {
|
||
|
self::load();
|
||
|
}
|
||
|
|
||
|
if ($channel === null) {
|
||
|
$channel = "all";
|
||
|
}
|
||
|
|
||
|
$db = new Database();
|
||
|
$stmt = $db::$handle->prepare("INSERT OR REPLACE INTO `keyvalue` (`key`, `value`, `channel`, `created`) VALUES (:key, :value, :channel, strftime('%Y-%m-%d %H:%M:%S','now'))");
|
||
|
$stmt->bindValue(":key", $keyname, SQLITE3_TEXT);
|
||
|
$stmt->bindValue(":value", $value, SQLITE3_TEXT);
|
||
|
$stmt->bindValue(":channel", $channel, SQLITE3_TEXT);
|
||
|
$stmt->execute();
|
||
|
|
||
|
self::$kv[$keyname][$channel] = $value;
|
||
|
}
|
||
|
|
||
|
protected static function load() {
|
||
|
$db = new Database();
|
||
|
$stmt = $db::$handle->prepare("SELECT * FROM `keyvalue`");
|
||
|
$result = $stmt->execute();
|
||
|
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
|
||
|
$channel = $row["channel"];
|
||
|
if ($channel === null) {
|
||
|
$channel = "all";
|
||
|
}
|
||
|
|
||
|
self::$kv[$row["key"]][$channel] = $row["value"];
|
||
|
}
|
||
|
}
|
||
|
}
|