[batch_management]内容批量管理热
插件质量报告
插件:
batch_managementHook 功能范围 循环 使用频率 文件读写 修改系统表 读写系统表 读写自己的表 content.before_delete 内容删除操作 否 2 - - - 写 plugin_batch_management_trash admin.tabs 后台管理页标签栏(展示位置:后台Tab) 否 1 - - - - 颜色说明:黄色表示有数据读写,红色表示 Hook 在系统循环中执行,浅蓝色表示有文件写入。“列表跳过”表示回调在列表路径会提前返回,“回调内”表示操作位于回调自身或其帮助函数的循环体内。“文件批处理”表示逐个处理用户一次提交的文件,属于必要操作,不标记修正。只有操作实际处于需要优化的循环路径时,才会标记“修正❗️”。
数据字典
plugin_batch_management_trash字段 类型 可空 默认值 约束 id id 否 - 主键、自增 table_name string 否 - - row_id uint 否 - - row_data text 否 - - deleted_by uint 否 0 - created_at uint 否 - - @bbs1org 已按 topic/245 完成 1.2.0 整改:搜索索引重建改为调用
topic_fts_sync()/reply_fts_sync(),不再直接创建、删除或写入核心 FTS 表。平台不允许非原作者更新同 ID,修正版源码:🔍 插件审查报告(对照《AI 开发规则》与开发者文档)
🔒 安全问题
回收站冗余存储敏感信息:plugin.php:25 把被删用户整行(含邮箱、密码哈希)序列化存入
plugin_batch_management_trash,并在 plugin.php:406 于后台以<pre>明文展示。建议对邮箱、密码哈希等字段脱敏或剔除后再入库。⚡ 性能问题
未发现明显问题(列表查询使用分块与参数化 IN,无循环逐条查询)。
🐛 功能/规范缺陷
- 回帖回收失效:plugin.php:21 回收站白名单含 replies,但核心
del()对回帖是软删除(清空 body)且不触发content.before_delete,因此回帖删除后不会进入回收站、无法恢复。建议删除回帖前由插件自行写入回收站。 - 恢复非原子:plugin.php:370-371 先 DELETE 再 INSERT 且无事务包裹,INSERT 失败会丢失数据。建议用
tx()包裹。 - 移动主题重置 last_reply_at:plugin.php:463 把
last_reply_at置为 now(),语义错误且未刷新版块统计。建议移除该字段更新并刷新相关统计。
✅ 修复优先级
优先修复回帖回收与恢复原子性(数据安全),其次修正移动主题统计,再处理回收站敏感信息脱敏。
- 回帖回收失效:plugin.php:21 回收站白名单含 replies,但核心
有个bug,帖子删掉了但这里依然能看到回帖记录,而且点删除删不掉

版本 1.1.3 更新:
全文搜索不可用时自动使用基础 LIKE 搜索。版本 1.1.4 更新:
优化ui细节版本 1.1.8 更新:
回收站支持彻底删除;回帖支持主题ID搜索;优化移动端排版版本 1.1.9 更新:
单行操作 AJAX 化:- 用户、主题、回帖的单行删除
- 回收站单行恢复、彻底删除
操作成功后会显示提示并直接移除当前列表行,不再跳转刷新页面;普通非 AJAX 提交仍保留原有跳转降级
🔍 插件审查报告(AI 自动审查,对照《AI 开发规则》与开发者文档;本插件未被 8/18 楼上 350 的报告覆盖,属独立首次审查)
插件:batch_management v1.1.9
🔒 安全问题
未发现明显问题。所有列表筛选走参数化查询(LIKE 通配符已用 batch_management_search_like() 转义 !/%/_ 三个特殊字符);写操作路由统一 require_post() + need_manage();单条删除经 can_admin_delete() 二次校验权限,未见越权点。⚡ 性能问题
未发现明显问题。列表查询统一走 count+分页两段式,未见循环单条查询;批量操作(禁言/封禁/转移)均使用 IN (...) 一次性更新。🐛 功能/规范缺陷
- 回帖回收站功能实际不生效:本插件通过 content.before_delete Hook(batch_management_store_trash)捕获被删内容备份到回收站表,但核对核心 del() 函数(index.php),$table==='replies' 分支是软删除(仅执行 UPDATE app_replies SET body='' 后直接 return),并不会触发 content.before_delete;该 Hook 只在 users/topics 分支的事务内被 fire()。因此管理页面对"回帖"执行删除操作时,实际不会写入 plugin_batch_management_trash 表,"回收站"里永远不会出现被删的回帖,用户从回收站尝试恢复回帖也无从下手。这是一个功能性缺陷:insert_trash 逻辑对 replies 类型形同虚设,回收站页面里 replies 类型的条目实际不可能产生。
- 命名前缀检查:函数、表名(plugin_batch_management_trash)均带插件前缀,未见冲突。
- 后台判断权限用 need_manage(),符合规范(涉及用户/内容管理操作)。
✅ 修复优先级
建议优先处理第 1 项:需要额外监听回帖被软删除的时机(目前核心没有对应 Hook),或在插件说明里明确"回收站仅支持用户与主题,不支持回帖",避免用户误以为删除的回帖可以恢复。最后由 399 编辑于 2026-08-28 13:23版本 1.3.2 更新:
增加删除回帖选项版本 1.3.2 更新:
完善删除功能版本 1.4.0 更新:
提升版本号版本 1.4.2 更新:
修正删除主题导致回帖扣分的问题版本 1.4.2 更新:
支持v10版本 1.4.3 更新:
更新版本号