39 lines
984 B
PHP
39 lines
984 B
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Repositories;
|
|
|
|
final class SettingRepository extends BaseRepository
|
|
{
|
|
/**
|
|
* @return array<string, mixed>
|
|
*/
|
|
public function allKeyed(): array
|
|
{
|
|
$statement = $this->pdo()->query(
|
|
'SELECT setting_key, setting_value, value_type
|
|
FROM site_settings
|
|
ORDER BY group_name, setting_key'
|
|
);
|
|
|
|
$settings = [];
|
|
|
|
foreach ($statement->fetchAll() as $row) {
|
|
$settings[$row['setting_key']] = $this->castValue($row['setting_value'], $row['value_type']);
|
|
}
|
|
|
|
return $settings;
|
|
}
|
|
|
|
private function castValue(?string $value, string $type): mixed
|
|
{
|
|
return match ($type) {
|
|
'number' => $value === null ? null : (float) $value,
|
|
'bool' => $value === '1' || $value === 'true',
|
|
'json' => $value === null ? null : json_decode($value, true),
|
|
default => $value,
|
|
};
|
|
}
|
|
}
|