query("SELECT setting_key, setting_value FROM system_settings") ->fetchAll(PDO::FETCH_KEY_PAIR); return $rows ?: []; } function settings_cache_load(): array { static $loaded = null; if ($loaded !== null) { return $loaded; } $path = _settings_cache_path(); if (is_file($path)) { $data = @include $path; if (is_array($data)) { return $loaded = $data; } } global $pdo; if (!($pdo instanceof PDO)) { return $loaded = []; } $data = db_get_all_settings($pdo); settings_cache_write($data); return $loaded = $data; } function settings_all(): array { return settings_cache_load(); } function setting(string $key, $default = null) { $data = settings_cache_load(); return array_key_exists($key, $data) ? $data[$key] : $default; } function db_update_setting(PDO $pdo, string $key, string $value, ?int $userId = null): void { // Valor anterior para o audit (os segredos são ocultados pelo módulo, pelo // nome da chave: *password*, *token*, *key*, *secret*). $old = null; try { $o = $pdo->prepare("SELECT setting_value FROM system_settings WHERE setting_key = ?"); $o->execute([$key]); $old = $o->fetchColumn(); $old = $old === false ? null : (string) $old; } catch (Throwable $e) {} $s = $pdo->prepare( "INSERT INTO system_settings (setting_key, setting_value, updated_by) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE setting_value = VALUES(setting_value), updated_by = VALUES(updated_by)" ); $s->execute([$key, $value, $userId]); settings_cache_clear(); if ($old !== $value && function_exists('platform_audit')) { platform_audit($pdo, 'settings.update', [ 'target_type' => 'setting', 'target_id' => $key, 'target_label' => $key, 'changes' => [$key => ['antes' => $old, 'depois' => $value]], ]); } }