Files
FamilyBook/app/UserSetting.php
T

42 lines
1.4 KiB
PHP
Raw Normal View History

<?php
/**
* 「我自己的」设置 —— 键值对,挂在 person 上而不是 family 上。
*
* 为什么要有它(而不是复用 settings 表加个 person_id 列):
* `settings` 是**家庭级**的(系统 slogan、附件存储这些,改一次全家变),
* `user_settings` 是**个人级**的(我的分组顺序、以后可能还有我的界面偏好),
* 两者的作用范围完全不同。分开存,"改一个人的偏好"就不可能误伤到全家 ——
* 混在一张表里迟早有人忘了带 family 条件。
*
* 与 App\Setting 的关系:同构(都是 k/v),只是作用域不同。
*/
declare(strict_types=1);
namespace App;
final class UserSetting
{
public static function get(int $personId, string $key, $default = null)
{
if ($personId <= 0) {
return $default;
}
$st = Database::get()->prepare('SELECT v FROM user_settings WHERE person_id = ? AND k = ?');
$st->execute([$personId, $key]);
$v = $st->fetchColumn();
return $v === false ? $default : $v;
}
public static function set(int $personId, string $key, string $value): void
{
if ($personId <= 0) {
return;
}
Database::get()->prepare(
'INSERT INTO user_settings (person_id, k, v) VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE v = VALUES(v)'
)->execute([$personId, $key, $value]);
}
}