v41 第 41 批:流水线提速 + 12 项界面/交互开发 + DAV 彻底修复
DAV(用户「务必彻底解决」): - 真根因是 home-set 层级错:CalDav::HOME_PATH 原为 /dav/calendars/、 CardDav 原为 /carddav/addressbooks/,而日历本/通讯录的 href 在 /dav/N.ics/ 与 /carddav/N.vcf/ —— home-set 下面一本都没有。 Thunderbird 按 home-set 前缀认成员,于是「找不到日历本 / 找不到联系人」。 改为 /dav/ 与 /carddav/(所有既有 URL 一字不变,老配置不作废)。 - 又发现并修掉 Depth:0 违反 RFC 4918:原实现无论 depth 都列出全部子集合, 且第一条 response 是日历本(不含 current-user-principal)。改为按 depth 分流, Depth:0 只回资源自身、Depth:1 才列出子集合。 界面与交互: - 观影:新建影院弹窗层级修正 + 详细地址;照片左右按钮悬停不再位移; 弹框底栏改「确定 / 取消」。 - 旅程:新建旅程改弹窗并按观影式排版;详情页四个动作按钮按用户指定顺序与配色; 编辑与新增行程弹窗化(单容器 + AJAX);行程时间控件改 AntD(精确到分); 参与人默认带上自己;车次号/车牌号紧跟交通方式词。 - 资源:新建/编辑改弹窗 + 观影式排版 + 新建时即定共享人。 - 纪念日:新建改弹框 + 观影式排版。 验证: - e2e 1510/0;v41 十二项真机 48/0;DAV 反向验证 8/0; 部署断言空跑 337/0;模板 div 深度三形态穷举 33 组全配平。 - 线上 DAV 终验(--resolve 真实入口 + 真 DAV 口令)12/0; 线上确认 Depth:0 恰好 1 个 response。
This commit is contained in:
+23
@@ -195,6 +195,29 @@ if ($method === 'PROPFIND') {
|
||||
// 5c. home-set(以及 `/carddav/` 本身):列出这个人可见的通讯录。
|
||||
// ⚠️ `/carddav/` 也走这条路:用户与老客户端都直接把 /carddav/ 当 home 用。
|
||||
if ($isHome || $bookId === 0) {
|
||||
// 🔴🔴 2026-10-11:与 dav.php 同一个协议隐患 —— **Depth:0 只应回资源自身**。
|
||||
// 原来无论 depth 都把全部通讯录一起回,线上实测 `PROPFIND /carddav/ Depth:0`
|
||||
// 第一条 response 是通讯录(不含 current-user-principal),
|
||||
// 严格客户端可能判"拿不到 principal"。
|
||||
// ⇒ Depth:0 只回 `/carddav/` 自身(principal / home-set 都在里面)。
|
||||
if ($depth !== '1') {
|
||||
$emit([
|
||||
'<d:response><d:href>' . CardDav::x(CardDav::HOME_PATH) . '</d:href>'
|
||||
. '<d:propstat><d:prop>'
|
||||
. '<d:resourcetype><d:collection/></d:resourcetype>'
|
||||
. '<d:displayname>' . CardDav::x('家书通讯录') . '</d:displayname>'
|
||||
. '<d:current-user-principal><d:href>' . CardDav::x(CardDav::PRINCIPAL_PATH)
|
||||
. '</d:href></d:current-user-principal>'
|
||||
. '<d:principal-URL><d:href>' . CardDav::x(CardDav::PRINCIPAL_PATH)
|
||||
. '</d:href></d:principal-URL>'
|
||||
. '<card:addressbook-home-set><d:href>' . CardDav::x(CardDav::HOME_PATH)
|
||||
. '</d:href></card:addressbook-home-set>'
|
||||
. $readOnlyPriv
|
||||
. '</d:prop></d:propstat></d:response>',
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
|
||||
$parts = [];
|
||||
// 🔴 v33:**始终**先输出 home 集合自身。
|
||||
// RFC 4918 规定:PROPFIND 的响应**必须包含被请求的资源本身**,
|
||||
|
||||
Reference in New Issue
Block a user