- 举报与处置中心ID report_center版本 2.1.1插件制作者 cxk123售价 30 积分3174 行 / 192.8 KBHook / 路由 / 后台页把违规举报做成一条有进度可查、可指派、可复检的工单:主题、回帖、用户都能一键举报,收费插件安装说明购买后点击“授权码”获取一次性授权码;在后台 > 插件广场点击在线安装或更新,并填写该授权码。已购买用户更新免费:每次在线安装或更新前,重新点击“授权码”获取新的一次性授权码即可,无需再次购买;也可直接下载新版后用后台“插件上传”更新。尊重并感谢他人劳动,请勿传播代码。app/plugins/report_center/plugin.php插件预览5 张开发日志已有 5 条
此项目接受所有登录用户协助维护和提交更新。
主楼点赞与点评1NB投币1个3天前
版本 1.0.0 更新:
1.0.0 首次上架:把违规举报做成一条有进度可查的工单· 统一受理台:主题、回帖、用户都能一键举报(入口在主题页与每个回帖的「更多操作」里),一条工单只对应一个对象;
管理团队在后台认领(并发点击只有一次生效),处置必须选择结论并填写说明,举报人会收到通知;每条工单都有完整流转时间线。
· 双向申诉复裁:被处置的一方可以在时限内申诉一次;复裁必须由其他管理团队成员执行
—— 原处置人自审会被服务端直接拦下(页面上也会明确提示);维持、改判、撤销三种结论全部留档。
· 滥用反制:同一个对象每人只能举报一次;同一对象被多人举报会合并成一条并显示「+k 人同报」,
人越多优先级越高、时限越紧;被驳回较多的举报人进入冷却期——冷却期内举报照常受理,只降低优先级并在受理台标注,绝不静默丢弃;
受理台同时给出每位举报人的成立率。只做排序与标注,不封人、不扣分。
· SLA 与超时升级:按优先级分档时限;超时仍未处理的工单由计划任务提醒全体管理团队成员;
后台效能面板给出中位处置时长、超时率与各人处理量。
· 举报人视图:我的举报 / 我被举报的两个页签,进度、时间线、申诉入口一处可见。
· 匿名内容举报时,工单快照在落库前先经过匿名遮蔽,不保存真实身份;对象被删除时工单会标注「对象已删除」而不是一起消失。插件质量报告
插件:
report_centerHook 功能范围 循环 使用频率 文件读写 修改系统表 读写系统表 读写自己的表 sidebar.feature_links 首页/侧栏快捷功能 否 5 - - - 写 plugin_report_center_cases topic.index_data.loaded 首页/版块/用户主题列表查询后 否 5 - - - 写 plugin_report_center_cases topic.title_suffix 首页/版块主题列表逐条标题 是 5 - - - - topic.replies_data.loaded 主题查看页回帖查询后 否 4 - - - 写 plugin_report_center_cases content.before_delete 内容删除操作 否 2 - - - 写 plugin_report_center_cases, plugin_report_center_events diy_layout.components 非系统hook 否 1 - - - - post.ops_actions 非系统hook 否 1 - - - 写 plugin_report_center_cases 颜色说明:黄色表示有数据读写,红色表示 Hook 在系统循环中执行,浅蓝色表示有文件写入。“列表跳过”表示回调在列表路径会提前返回,“回调内”表示操作位于回调自身或其帮助函数的循环体内。“文件批处理”表示逐个处理用户一次提交的文件,属于必要操作,不标记修正。只有操作实际处于需要优化的循环路径时,才会标记“修正❗️”。
数据字典
plugin_report_center_cases字段 类型 可空 默认值 约束 - 动态定义 - - 无法静态解析 plugin_report_center_events字段 类型 可空 默认值 约束 - 动态定义 - - 无法静态解析 plugin_report_center_reputation字段 类型 可空 默认值 约束 - 动态定义 - - 无法静态解析 版本 1.0.0 更新:
1.0.0 首次上架:把违规举报做成一条有进度可查的工单· 统一受理台:主题、回帖、用户都能一键举报(入口在主题页与每个回帖的「更多操作」里),一条工单只对应一个对象;
管理团队在后台认领(并发点击只有一次生效),处置必须选择结论并填写说明,举报人会收到通知;每条工单都有完整流转时间线。
· 双向申诉复裁:被处置的一方可以在时限内申诉一次;复裁必须由其他管理团队成员执行
—— 原处置人自审会被服务端直接拦下(页面上也会明确提示);维持、改判、撤销三种结论全部留档。
· 滥用反制:同一个对象每人只能举报一次;同一对象被多人举报会合并成一条并显示「+k 人同报」,
人越多优先级越高、时限越紧;被驳回较多的举报人进入冷却期——冷却期内举报照常受理,只降低优先级并在受理台标注,绝不静默丢弃;
受理台同时给出每位举报人的成立率。只做排序与标注,不封人、不扣分。
· SLA 与超时升级:按优先级分档时限;超时仍未处理的工单由计划任务提醒全体管理团队成员;
后台效能面板给出中位处置时长、超时率与各人处理量。
· 举报人视图:我的举报 / 我被举报的两个页签,进度、时间线、申诉入口一处可见。
· 匿名内容举报时,工单快照在落库前先经过匿名遮蔽,不保存真实身份;对象被删除时工单会标注「对象已删除」而不是一起消失。版本 2.0.0 更新:
2.0.0 —— 处置闭环补全 + 13 条真缺陷修复(1.0.0 之后的首次大更新)【新能力】
- 分派:受理台可把工单「指派 / 改派」给任意管理团队成员(含工作量与改派次数留痕),也可以填理由把处理中的工单「释放」回待受理队列。1.0.0 认领即锁死——处置人请假或误认领,这条工单就被 CAS 永久卡住,别人谁也处置不了。
- 时效阶梯:新增「到期前预警」(默认提前 15 分钟),并把超时升级从「只响一次」改成「每 6 小时再升一轮」,轮次写入留痕;升级通知除发给管理团队全体外,还会点名通知当前认领人。
- 工单留言:举报人 / 被处置方 / 管理团队三方可在工单下留言补充证据与答辩;结案后在申诉复裁期间当事人仍可举证。留言复用事件表,页面查询数一分不涨,且只 append 不可改不可删。
- 结案复检:结案满 3 天的工单由计划任务自动进入「复检队列」,管理团队给出「确认结案」或「重开」;重开会回到处理中、重算时限、清空认领并通知双方。1.0.0 结案即终局。
- 留痕台账:后台新增跨工单的事件流水(动作 / 操作者筛选 + 分页),时间线超过 400 条时不再静默截断,而是显式提示并指路台账。
【修复的缺陷】
- 复裁留档页原本只对管理团队开放,而「我的举报」页把「查看复裁留档」按钮渲染给举报人与被处置方——当事人点进去必然被拒。现在当事人可只读查看,提交复裁仍然只对管理团队开放且不能自审。
- 申诉入口只判「没申诉过」不判「时限已过」:超时用户会看到输入框、填完理由才被打回。现在渲染与服务端共用同一判据,窗口外直接说明「申诉时限已过」。
- 处置只通知举报人,被处置方完全不知道被处置、也不知道 7 天申诉窗口;现在处置结果双向通知,并带申诉指引。
- 申诉只通知管理团队,举报人不知道自己的工单进了复裁;现在一并告知举报人。
- 受理台对「别人认领的处理中工单」照样渲染处置表单,提交必被拒;现在按服务端口径显隐,并给出「已由谁处理中」与改派 / 释放入口。
- 同一对象的多报合并口径含「已结案」工单:merge 窗口内的新举报会被并进一条已结束的工单,举报人在自己的列表里看不到这条举报(等于静默丢弃)。现在只有仍在办的工单才吸收同报,否则新建工单。
- 老站点升级路径缺失:1.0.0 的安装只做 CREATE TABLE IF NOT EXISTS,任何新列都不会被建出来。2.0.0 起所有新列经 app_db_ensure_columns 幂等补齐,1.0.0 升到 2.0.0 不会 500。
- 时间线在 400 条处静默截断;站点级短路判据 report_center_live() 是无人调用的死代码(现已用于留痕台账的空站点短路)。
- 计划任务内批量通知:新增批量通知助手,避免在循环里逐条调用核心通知函数(循环体内零查库)。
【兼容性】
- 3 张自有表 + 新增 9 列(幂等补齐)+ 10 枚具名索引 + 2 条计划任务(escalate / recheck);卸载连索引、站点标记与任务行一起清干净。
- 查询预算:我的工单 5 / 举报表单 GET 3 · POST 4 / 后台受理台 7 / 复检队列 3 / 留痕台账 2(站点无工单 0),全部与内容行数无关;工单留言零额外查询。
- 三驱动可移植(SQLite / MySQL / PostgreSQL);不写 app_users 的任何处罚字段(不封人、不扣分、不静音)。
- 六道静态门禁 + post_html 响应审计全绿;验收套件全部通过。
版本 2.1.0 更新:
2.1.0 —— 计划任务并发正确性 + 老库升级自愈 + 预算复核(A/B)【本轮三项正确性工作】
- 计划任务并发正确性:到期前预警 / 超时升级 / 复检入队三条路径改成「写认领令牌 → 按令牌回读 → 只给回读到的行写事件与通知」。此前用的是「按条件批量 CAS + 一个 rowCount()」,PHP 侧并不知道具体哪几行被改到:只要有一行在 CAS 瞬间已不满足条件(被别的运行抢先、或刚好被处置),这一轮就会给「自己没抢到的行」也写时间线、也发通知。现在两个进程重叠运行(租约过期 / 运维手工补跑)时,事件、通知、升级轮次都不会重复;复检队列里的「重开 vs 确认结案」并发也只有一方生效。
- 升级路径自愈:核心只在启用/停用插件时执行 install;站点如果只是覆盖了插件文件(在线更新、手工上传、rsync),老库缺列会让页面直接报缺列错误,并被核心安全网自动停用。现在把结构代次写进设置,并在所有路径的必经之处挂守卫:快路径只读一次进程内缓存(零额外查询),慢路径幂等补列、建索引、写回标记 —— 覆盖文件后第一发普通请求即自愈,不必先停用再启用。
- 预算复核(A/B 实测):同一份库与夹具下只换插件文件,逐页对比上一版冻结产物与本版源码——后台受理台 7/7、复检视图 3/3、留痕台账 2/2、我的工单 5/5、指派名册 1/1,逐项不变;新增的运行时守卫不产生任何页面查询。
【新能力】
- 复检队列显示「入队时间」(新增 recheck_at):一眼可答这条是什么时候进入复检队列的,而不是只有一个计划复检时间。
【兼容与升级】
- 新增 2 列(run_token / recheck_at,幂等补齐);连同 2.0.0 的 9 列共 11 列,两条升级路径(后台停用启用 / 直接覆盖文件)都能补齐;卸载连索引、站点标记、结构代次标记与计划任务行一起清干净。
- 查询预算与 2.0.0 完全一致,与内容行数无关;三驱动可移植(SQLite / MySQL / PostgreSQL)。
- 六道静态门禁全绿(0 条待人工确认)+ post_html 响应审计可疑 0 项;验收套件 489 项断言 / 0 失败。
版本 2.1.1 更新:
2.1.1 · 设置保存顺序- 修复:后台保存设置时,请求级配置缓存的失效发生在保存之后,而保存内部会重算计划任务间隔 —— 它读到的还是旧配置,于是把旧间隔写回任务表:表单显示新值、实际不生效,要再保存一次才追平。现在先失效缓存再保存。
- 无数据结构变更。