XIUNO BBS X版 更新记录贴 20260628

  • 顶部导航用户下拉面板「修改资料」文案改为「用户中心」,新增 user_center 语言键并同步 zh-cn/zh-tw/en-us 三语言包 [语言包不同步]

  • 重构 my 用户中心左侧菜单:去除「个人主页」入口;分组标题「个人设置/消息中心」改名为「设置/通知」;新增「帖子」分组(主题/回复/点赞/收藏);新增「动态」分组(我关注的/关注我的) [配置不同步]

  • 新增语言键 posts_section/dynamics_section/i_following/follow_me 并同步 zh-cn/zh-tw/en-us 三语言包 [语言包不同步]

  • 新增 my 内部列表页:my_post(我的回复)、my_like(我的点赞)、my_following(我关注的)、my_followers(关注我的),复制 user.php 对应查询逻辑,使用 my.layout.inc.htm 布局 [配置不同步]

  • 新增路由 my_like/my_following/my_followers 及对应 url 函数;my_post 路由已存在 [配置不同步]

  • 改造 my_thread.htm/my_favorite.htm 统一使用 my.layout.inc.htm 布局(原为单列 nav-tabs 布局),与 my_profile 等设置页风格一致 [组件混用]

  • my 侧栏「帖子」「动态」分组链接从 user_xxx_url 改为 my_xxx_url,并加 active 高亮 [配置不同步]

  • 修复 my-thread 数据与 user-thread 不一致:my_thread 改用 thread_find 直接查 thread 表(带 audit_status 过滤),原用 mythread_find_by_uid 查缓存表导致数据不同步 [缓存失效]

  • 菜单文案改名:my_thread「主题」→「我的帖子」、my_post「帖子」→「我的回复」,同步 zh-cn/zh-tw/en-us 三语言包;侧栏 my_post 项 lang 键从 reply 改为 my_post 避免影响 user 页面 tab [语言包不同步]

插件兼容性扫描器优化

  • 删除 Alpine.js 辅助检测器,修正 jQuery/bs_js_api 建议文案移除 Alpine.js 字样 [配置不同步]

  • 新增 14 个检测分类:php_comment_close_tag、frontend_md5、md5js_global_load、password_update_api、db_charset、service_undefined_var、raw_htmlspecialchars、heredoc_php_tag、bs_tab_navigation、hook_htm_header、db_find_col_string、app_path_in_url、install_non_idempotent 等 [配置不同步]

  • 修复 dangerous_functions 中 exec( 误报 db_exec( 和 PDO ->exec() 方法调用,改用正则 (?<![_>])\bexec( 排除 [类型误用]

  • 修复 4 处 service_undefined_var:全部用 this−>tablepre替换tableName [变量未定义]

  • 修复 6 处 db_charset:install.php 中 CHARSET=utf8 全部改为 CHARSET=utf8mb4 [配置不同步]

  • 修复 9 处 raw_htmlspecialchars:用 esc_html/esc_attr 替代 [类型误用]

扩展 DB 层支持 GROUP BY + 修复 37 处原始 SQL

  • 在 db_pdo_mysql.class.php 新增 find_group() / find_one_group() 方法,支持 GROUP BY + HAVING + 聚合函数查询 [配置不同步]

  • 在 db.func.php 新增 db_find_group() / db_find_one_group() 全局函数,在 DatabaseInterface.php 添加接口声明 [配置不同步]

  • 用 db_find / db_count / db_find_group 替换 27 处 db_sql_find / db_sql_find_one [SQL N+1]

  • 用容斥原理解决 OR 条件查询(db_count 不支持 OR),替代 FriendLinkService 中的原始 SQL [边界未校验]

  • 保留 10 处无法替代的复杂 SQL:JOIN 查询、INFORMATION_SCHEMA 系统表、db_exec 非 SELECT 语句(GREATEST/子查询/INSERT IGNORE SELECT)、时间函数聚合(HOUR(FROM_UNIXTIME)) [类型误用]

  • 每处保留的 SQL 在代码中添加注释说明保留原因 [配置不同步]

  • 更新 doc/plugin-scanner.md:新增 db_find_group 迁移指南和使用示例 [语言包不同步]

direct_db 扫描器识别保留注释跳过

  • PluginScanner 新增 $suppressDirectDbUntil 属性,扫描时检测"保留 db_sql_find"/"保留 db_exec"等注释关键字,标记后续 10 行跳过 direct_db 报告 [配置不同步]

  • 正则识别:/(保留|@suppress).*db_(?:sql_find|sql_find_one|exec)/,兼容中文注释和 @suppress 标记 [边界未校验]

  • 抑制区间 10 行,覆盖多行 SQL 拼接场景(最长注释到调用距离 8 行) [边界未校验]

  • 反向验证:无保留注释的 db_sql_find 仍被检测,有保留注释的被跳过 [配置不同步]

  • 更新 doc/plugin-scanner.md:新增"保留注释抑制机制"章节,说明关键字格式和使用示例 [语言包不同步]

  • 最终扫描结果:10 处保留 SQL 全部被识别跳过,扫描结果归零 [配置不同步]

修复插件安装预扫描弹窗一直显示"扫描中"

  • plugin_list.htm 的 renderPreinstallResult 函数在扫描通过(can_install=true 且 total=0)时提前 return,只更新了按钮区域,未更新扫描结果区域,导致 spinner 一直显示 [变量未定义]

  • 修复:在 return 前补充 document.getElementById('preinstallScanResult').innerHTML = html [边界未校验]

通知系统彻底合并(删除旧 notice 系统)

  • 删除 model/notice.func.php 兼容层文件,所有通知函数统一走 notify 系统 [系统迁移不彻底]

  • 删除 model.inc.php 中 notice.func.php 的加载引用 [系统迁移不彻底]

  • xnx_friendlink 插件 5 处 notice_send() 改为 notify_create()(setting.php 2 处、*****.php 2 处、route/apply.php 1 处),type 走 system [系统迁移不彻底]

  • 升级脚本 upgradeNotifyMerge() 追加 DROP bbs_notice 表步骤(幂等,表不存在时跳过) [系统迁移不彻底]

  • install/install.sql 删除 bbs_notice 表创建语句(新装站点不再建无用表) [系统迁移不彻底]

  • route/my.php 删除运行时自动建 bbs_notice 表的 DDL(保留 user 计数字段和 notify 扩展字段补齐) [系统迁移不彻底]

  • upgradeNoticeIsRead() 升级步骤描述修正(实际只建 notify 表,不建 notice 表),结果 name 从 'notice' 改为 'notify' [系统迁移不彻底]

  • route/notice.php 保留(内部已全部走 notify 表,提供后台 notice-create/notice-list 管理入口),不删除 [系统迁移不彻底]

修复通知下拉列表只显示"系统通知"不显示具体内容

  • 通知下拉列表原来只显示通用类型标签(如"系统通知"),改为显示 message 字段的具体内容(如"有新的友情链接申请:「IM286」""您申请的友情链接「稀土掘金」已通过审核") [配置不同步]

  • 下拉列表中已单独显示用户名,message 中的用户名前缀自动去除避免重复 [边界未校验]

  • HTMLPurifier 白名单新增 div[class|style],修复编辑器中 div 标签被过滤的问题 [边界未校验]

  • 友链申请通知***时 from_uid 从 0 改为申请人 $uid,修复通知显示"游客"而非实际用户名 [类型误用]

  • 友链编辑弹窗移除已废弃字段(站点简介、联系方式类型、联系方式) [配置不同步]

  • 友链编辑弹窗 JS 赋值从 esc_js() 改为 json_encode(),修复输入框显示 " 而非引号 [类型误用]

  • 标题字数校验前先 trim() 去除首尾空格,避免空格占用字数额度 [边界未校验]

  • 邮箱验证码发送限制改为后台可配置:发送间隔、同一邮箱每日上限、同一IP每小时上限 [配置不同步]

  • 发送验证码时增加邮箱域名白名单检查(注册、修改邮箱),避免不在白名单的邮箱浪费发送配额 [边界未校验]

  • 前端发送验证码倒计时从后端返回的 wait 字段获取,与后台配置同步 [配置不同步]

最新回复

请先登录后再回复 登录

uid:1 管理
关注
随遇而安,随缘而行
发帖 39
评论 220
粉丝 9
关注 1
发新帖
目录

扫码手机打开本帖