Files
FamilyBook/app
laoyang 50286e5327 服务端:panel_save / Task::setAttrs 支持 repeat_rule (#83)
配合网页端与鸿蒙端把「循环」改成可编辑。

① Task::setAttrs() 新增 repeat_rule 分支
   只写 repeat_rule 一列(与 due_at / category_id / title / note 同一套
   按 `array_key_exists` 判"传没传"的逻辑)。
   ⚠️ 白名单校验:只接受 `self::REPEAT` 里有的键,其余一律存 NULL。
      不校验的话前端传个乱值就进库了,`repeatWord()` 会显示成空白,
      而且 `spawnNext` 那种"按规则生成下一次"的地方会静默不工作。
   ⚠️ 空串 = 不循环,存 NULL(与 `update()` 的 `?: null` 同口径)。

② index.php 的 tasks/panel_save 接收 repeat_rule
   同一套 `array_key_exists` 语义:表单没带就不动(保留原值),
   带了才更新 —— 这样"只改标题"的调用方不会把循环规则清掉。

实测:
  设 repeat_rule=week      => [week] ✅  标题未被破坏 ✅
  设非法值 hacked_value    => [NULL] ✅ 已拦下
  只改 due_at              => repeat_rule 不变 ✅ category_id 保留 ✅
2026-11-05 20:15:18 +08:00
..