[开发]45 号更新:社区治理插件 mod_system(举报中心 + 通知联动 + 小黑屋)

👑Lv.11 元老 🌞 骨干会员
2026-10-25 00:58:27

本文由 FlintHub 开发文档归档发布。原始文档日期见标题前缀,来源:暂存20260913/docs/改动说明 (11).md。

45 号更新:社区治理插件 mod_system(举报中心 + 通知联动 + 小黑屋)

范围:新增「社区治理(举报中心 + 通知联动 + 小黑屋)」插件,并完成核心框架注入(登录封禁拦截、全局写操作拦截、各内容操作后的举报按钮)、统一通知联动、页脚链接区改造。

应用方式:将本目录下文件按相对路径覆盖到站点根目录(d:\phpstudy_pro\WWW\)同名位置即可。


一、改动文件清单

update/45/
├── 改动说明.md
├── app/
│   ├── Controllers/
│   │   └── AuthController.php        修改:登录前触发 auth_login_check 钩子 + 封禁拦截
│   ├── Core/
│   │   └── Router.php                修改:路由匹配前触发 route_before_dispatch 全局写操作拦截
│   └── Views/
│       ├── blog/
│       │   └── detail.php            修改:博客详情/评论后挂 举报 操作钩子
│       ├── layouts/
│       │   └── main.php              修改:前台页脚改两行结构 + 新增 footer_links 钩子位(徽章/小黑屋链接)
│       └── thread/
│           └── show.php              修改:主题内容/帖子内容后挂 举报 操作钩子
├── assets/
│   └── css/
│       └── modern.css                修改:移动端页脚 mn-footer-left 整行居中(与 mn-footer-right 一致)
└── plugins/
    ├── plugins_cache.json            修改:mod_system 的 12 个钩子注册(nav_main_links 已并入 footer_links)
    └── mod_system/                   新增:社区治理插件
        ├── plugin.json               hooks 注册、版本 1.0.0、activated=true
        ├── Plugin.php                 安装建表(mod_reports/mod_bans/mod_logs/mod_notifications)、通知双写、举报逻辑
        ├── AdminController.php        后台:举报处理、封禁、日志
        ├── FrontController.php        前台:举报提交、通知中心、小黑屋公示、用户卡片
        ├── assets/style.css
        ├── data/ (.htaccess + web.config,sqlite 运行时库不随更新包分发)
        ├── hook/ x12:route_register / admin_route_register / admin_sidebar_links /
        │   route_before_dispatch / auth_login_check / thread_operation_after /
        │   post_operation_after / blog_detail_operation_after / blog_comment_operation_after /
        │   profile_user_card_after / footer_links / nav_drawer_links
        ├── lang/ (zh.php + en.php + zh_tw.php)
        └── views/ (_feedback / admin_config / admin_reports / blacklist / notifications)

说明:plugins/mod_system/data/mod_system.sqlite 为运行时库文件,不在更新包内(首次访问插件由 Plugin.php 自动建表)。


二、改动内容详解

1. 新增 mod_system 插件

  • 举报中心:/mod-system/report(htmx POST 提交举报),后台 /admin/mod-system/reports 处理举报 → 可封禁用户/关闭举报,全程写 mod_logs 日志。
  • 小黑屋公示:公开页 /blacklist,展示被封禁名单,profile_user_card_after 在用户卡片处显示封禁标记。
  • 封禁拦截:auth_login_check 阻止被封用户登录;route_before_dispatch 对已封禁用户在写操作前全局拦截(登录页读 $GLOBALS['mod_system_login_blocked'] 提示)。
  • 内容操作钩子:thread_operation_after / post_operation_after / blog_detail_operation_after / blog_comment_operation_after 在主题/帖子/博客详情/评论后注入「举报」按钮,_feedback.php 统一弹出反馈。
  • 数据库表:mod_reports、mod_bans、mod_logs、mod_notifications 四张核心表。

2. 统一通知联动

  • Plugin::notify() 采用双写:既写 mod_system 自己的 mod_notifications 表(作为兜底),也写入统一 notifications 表,前端只保留一个通知入口。
  • 已移除 nav_pc_user_links / nav_user_menu_items 钩子及对应文件,导航收敛;/mod-system/notifications 页面保留,作为通知插件卸载时的兜底。

3. 后台入口与配置

  • admin_sidebar_links 注入后台侧边栏(举报中心/封禁名单/插件配置)。
  • admin_config.php 提供插件配置界面(可处理举报的高管用户组 ID 等,部分预留)。

4. 页脚链接区(footer_links 钩子)

  • main.php 前台页脚由单行改为两行:上行 = flinthub-badge 徽章(左)+ 链接区(右);下行 = 「Powered by + © 版权」(左)+ 渲染统计(右)。
  • 链接区由 footer_links 钩子输出:原顶栏「小黑屋」入口迁至此处,并加了「关于我们 / 网站地图 / 帮助中心」演示占位链接。
  • 移动端(≤768px)页脚四行居中(徽章 / 链接 / 版权+Powered / 统计),modern.css 增加 .mn-footer-left 整行居中规则。
  • 徽章对位修正:flinthub-badge.svg 的 width/height 与 viewBox 比例不一致会产生约 4px 横向 letterbox,故 img 显式给 width:138px;height:20px 消除偏移。

三、验证结论

  • php -l:mod_system 全部 hook/view/控制器、AuthController、Router、main.php 均 0 语法错误;modern.css 无结构损坏。
  • 首页正常渲染(HTTP 200),12 个钩子注册成功,四张核心表创建正确。
  • 刷新后台即可在「插件」中看到 mod_system 并已激活;前台页脚可见徽章 + 小黑屋链接区。

四、部署顺序

  1. 按相对路径覆盖以上文件(plugins/mod_system/、plugins/plugins_cache.json、两个修改文件、四个核心注入文件、modern.css);
  2. 若站点曾导出过页面缓存,请清理 data/runtime/pages/*.html(如存在)以便前台立即可见;
  3. 后台「插件」确认 mod_system 处于激活状态(plugin.json 已带 activated:true,plugins_cache.json 已同步);
  4. 验证:首页页脚看徽章与小黑屋链接;发帖/博客详情看「举报」按钮;后台侧边栏看「举报中心」;登录被封账号看拦截提示。

五、注意事项

  • 本批次依赖既有插件运行时机制(plugins_cache.json 分发钩子),不可跳过 plugins/plugins_cache.json;
  • mod_system 的 .sqlite 运行时库请勿从备份还原覆盖(由代码自动建表);如需重置数据可直接删除该文件重启访问;
  • 「关于我们 / 网站地图 / 帮助中心」为页脚演示占位链接,指向未实现路由,如需可后续补做对应页面或删减。
轻量级、高性能、零 MySQL 依赖的PHP社区系统。
| Views 2 | Replies 0

All Replies (0)

No replies yet

Please Log in