v7:家谱树与名册三处口径统一(树上的人自动互相可见)
用户反馈:我把一个人设成配偶、又设了我们的孩子,配偶登录后首页能看到
孩子、家谱也能看到,名册里却看不到——没分享的人却在家谱上看得到,
口径打架。
口径由用户拍板:**以每个人为中心上下三代那棵家谱树(= 首页「我的家人」
同一棵)里的人,自动进他名册(source=kin,默认归公共「家人」组);
树外的人三处都不可见。**
- PersonRoster::syncKinForFamily():整树同步(补缺、撤多余;已存在的
self/shared/seeded 行绝不碰,用户改过的分组/顺序保留)。幂等。
- 同步挂在事件上:建边 / 解边 / 开通账号 / 结构升级回填。
- Relations::addParent/addSpouse 建边后同步;remove/detach 解边后同步。
- 名册不许单独移走 kin 来源的人(服务端拦截 + 人话提示 + 卡片隐藏
移走按钮改提示语):他在首页/家谱照样看得见,单藏名册只会回到口径
打架;想不再看到他,解除关系即自动移出。
- 名册卡片给 kin 来源标「家谱」徽标(来历可辨)。
- Schema v7:widenRosterSourceEnum(⚠️ CREATE TABLE IF NOT EXISTS 不会
更新已存在表的枚举,v6 老库不扩宽则 strict 模式下插 kin 整条被拒、
且被容错吞掉——e2e 的 v6 旧库当场抓出)+ 按已有关系回填 kin 条目。
验证:e2e 309/0、升级专测 82/0、部署静态空跑 78/0、桌面几何 0 失败、
交互 97/0、移动几何 180/0;线上探针 ver=7、enum 含 kin、无升级告警。
This commit is contained in:
@@ -77,6 +77,11 @@ $renderGrid = function (array $list) use ($meId, $canMove, $groups): void {
|
||||
if ($pNick !== '' && $pNick !== (string)$p['name']) {
|
||||
echo ' · <span class="muted">' . e((string)$p['name']) . '</span>';
|
||||
}
|
||||
// v7:因家谱关系自动进名册的人,标出来历 ——
|
||||
// 不然"我没加过他,他怎么在我名册里"会让人怀疑数据坏了
|
||||
if (($p['roster_source'] ?? '') === 'kin') {
|
||||
echo ' <span class="badge" title="他在你的家谱树上(配偶/父母/子女/祖孙…),自动加入你的名册">家谱</span>';
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
@@ -99,11 +104,15 @@ $renderGrid = function (array $list) use ($meId, $canMove, $groups): void {
|
||||
</select>
|
||||
<button class="btn btn-ghost btn-sm" type="submit" data-no-drag>移动</button>
|
||||
</form>
|
||||
<form method="post" action="<?= e(url('people/forget')) ?>" class="person-move">
|
||||
<?= csrf_field() ?>
|
||||
<input type="hidden" name="person_id" value="<?= $pid ?>">
|
||||
<button class="btn btn-ghost btn-sm" type="submit" data-no-drag>从我的名册移走</button>
|
||||
</form>
|
||||
<?php if (($p['roster_source'] ?? '') === 'kin'): ?>
|
||||
<p class="small muted person-move" style="margin:4px 0 0">因家谱关系自动加入;解除关系后自动移出。</p>
|
||||
<?php else: ?>
|
||||
<form method="post" action="<?= e(url('people/forget')) ?>" class="person-move">
|
||||
<?= csrf_field() ?>
|
||||
<input type="hidden" name="person_id" value="<?= $pid ?>">
|
||||
<button class="btn btn-ghost btn-sm" type="submit" data-no-drag>从我的名册移走</button>
|
||||
</form>
|
||||
<?php endif; ?>
|
||||
</details>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user