'0', 'azure_maps_enabled' => '0', 'osm_places_enabled' => '1', 'forum_maintenance_mode' => '0', 'site_maintenance_mode' => '0', 'site_maintenance_message' => 'Papa-Kind-Treff ist gerade kurz in Wartung. Bitte versuche es in Kürze erneut.', 'place_data_provider' => 'osm', 'community_levels_json' => '', ]; public function __construct(private \PDO $pdo) { } public function ensureSchema(): void { $this->pdo->exec( 'CREATE TABLE IF NOT EXISTS system_settings ( `key` VARCHAR(120) NOT NULL PRIMARY KEY, `value` TEXT NULL, updated_by BIGINT UNSIGNED NULL, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, CONSTRAINT fk_system_settings_updated_by FOREIGN KEY (updated_by) REFERENCES users(id) ON DELETE SET NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci' ); $stmt = $this->pdo->prepare( 'INSERT INTO system_settings (`key`, `value`, updated_by) VALUES (:key, :value, NULL) ON DUPLICATE KEY UPDATE `value` = `value`' ); foreach (self::DEFAULTS as $key => $value) { $stmt->execute([ 'key' => $key, 'value' => $value, ]); } } public function getAll(): array { $this->ensureSchema(); $settings = self::DEFAULTS; $stmt = $this->pdo->query('SELECT `key`, `value` FROM system_settings'); foreach ($stmt->fetchAll(\PDO::FETCH_ASSOC) ?: [] as $row) { $settings[(string)$row['key']] = (string)($row['value'] ?? ''); } return $settings; } public function get(string $key, ?string $default = null): ?string { $this->ensureSchema(); $stmt = $this->pdo->prepare('SELECT `value` FROM system_settings WHERE `key` = :key LIMIT 1'); $stmt->execute(['key' => $key]); $value = $stmt->fetchColumn(); if ($value === false) { return $default ?? (self::DEFAULTS[$key] ?? null); } return (string)$value; } public function getBool(string $key, bool $default = false): bool { $value = $this->get($key, $default ? '1' : '0'); return in_array((string)$value, ['1', 'true', 'yes', 'on'], true); } public function set(string $key, string $value, ?int $updatedBy = null): void { $this->ensureSchema(); $stmt = $this->pdo->prepare( 'INSERT INTO system_settings (`key`, `value`, updated_by) VALUES (:key, :value, :updatedBy) ON DUPLICATE KEY UPDATE `value` = VALUES(`value`), updated_by = VALUES(updated_by), updated_at = CURRENT_TIMESTAMP' ); $stmt->execute([ 'key' => $key, 'value' => $value, 'updatedBy' => $updatedBy, ]); } public function updateMany(array $values, ?int $updatedBy = null): void { $this->ensureSchema(); $stmt = $this->pdo->prepare( 'INSERT INTO system_settings (`key`, `value`, updated_by) VALUES (:key, :value, :updatedBy) ON DUPLICATE KEY UPDATE `value` = VALUES(`value`), updated_by = VALUES(updated_by), updated_at = CURRENT_TIMESTAMP' ); foreach ($values as $key => $value) { $stmt->execute([ 'key' => (string)$key, 'value' => (string)$value, 'updatedBy' => $updatedBy, ]); } } }