- 投票ID poll版本 1.3.0插件制作者 bbs1org免费540 行 / 37.9 KBHook / 路由 / 后台页在主题中发起单选或多选投票,编辑主题时可修改或删除投票,列表标题显示投票标识,投票会刷新主题活跃度,投票自动回帖可设置为关闭、开启但不回复选项或开启且回复选项。app/plugins/poll/plugin.php插件预览1 张开发日志已有 5 条
个人独立维护项目。
淘帖专辑官方安装插件合集主楼 插件质量报告
插件:
pollHook 功能范围 循环 使用频率 文件读写 修改系统表 读写系统表 读写自己的表 topic.after_render 首页/版块列表/主题查看逐条渲染 是(列表跳过) 5 - - - 读 plugin_polls, plugin_poll_options, plugin_poll_votes topic.index_data.loaded 首页/版块/用户主题列表查询后 否 5 - - - 读 plugin_polls topic.title_suffix 首页/版块主题列表逐条标题 是 5 - - - - topic.after_save 主题保存后 回调内 3 - - - 写 plugin_polls, plugin_poll_options, plugin_poll_votes 修正❗️ topic.before_save 主题发布/编辑表单提交 否 3 - - - - topic.before_delete 主题删除操作 否 2 - - - 写 plugin_polls, plugin_poll_votes, plugin_poll_options topic.form_extra 主题发布/编辑表单 否 2 - - - 读 plugin_polls, plugin_poll_options 颜色说明:黄色表示有数据读写,红色表示 Hook 在系统循环中执行,浅蓝色表示有文件写入。“列表跳过”表示回调在列表路径会提前返回,“回调内”表示操作位于回调自身或其帮助函数的循环体内。“文件批处理”表示逐个处理用户一次提交的文件,属于必要操作,不标记修正。只有操作实际处于需要优化的循环路径时,才会标记“修正❗️”。
数据字典
plugin_polls字段 类型 可空 默认值 约束 id id 否 - 主键、自增 topic_id uint 否 - 唯一 user_id uint 否 - - question text 否 - - allow_multiple INTEGER 否 0 - max_choices uint 否 1 - closed_at uint 否 0 - created_at uint 否 - - updated_at uint 否 - - plugin_poll_options字段 类型 可空 默认值 约束 id id 否 - 主键、自增 poll_id uint 否 - - title string 否 - - sort uint 否 0 - vote_count uint 否 0 - plugin_poll_votes字段 类型 可空 默认值 约束 id id 否 - 主键、自增 poll_id uint 否 - 唯一 user_id uint 否 - 唯一 ip_hash string 否 '' - ua_hash string 否 '' - choices text 否 - - created_at uint 否 - - 在主题中创建单选或多选投票,并通过账号、CSRF 和可选 IP 指纹限制重复投票。
优化ui细节
🔍 插件审查报告(对照《AI 开发规则》与开发者文档)
🔒 安全问题
未发现明显问题(投票路由有
require_post+need_login,配置与关闭/开启操作有权限与 CSRF 校验,SQL 全部参数化,用户数据输出均经h()转义)。⚡ 性能问题
- 红区钩子内存在数据库读取:
topic.after_render注册了poll_render_topic(plugin.php:383,:226),其调用链包含poll_rows_for_topic(:128one(...)、:130q(...))、poll_user_vote(:234→:137one(...))、poll_total_votes(:236→:143val(...))。列表路径虽用$ctx['list']提前返回,但主题页渲染仍每次触发 3–4 条查询,违反“渲染循环零 DB 读”规范。建议在topic.replies或app.boot预加载该主题的投票、选项、我的投票与票数到内存,渲染钩子只读内存。
🐛 功能/规范缺陷
poll_vote_page用max(1, (int)($_POST['poll_id'] ?? 0))(plugin.php:281),参数缺失时被静默改写为 1,可能误投到 id=1 的投票。建议严格校验id('poll_id'),≤0 时报错。poll_delete_topic连续三条q("DELETE ...")(plugin.php:320–322)未包tx(),删除中途失败会留下孤儿数据。建议用tx()保证原子性。
✅ 修复优先级
- 红区 DB 读改为预加载;2. poll_id 严格校验;3. 删除操作加事务。
- 红区钩子内存在数据库读取:
版本 1.0.9 更新:
优化小细节版本 1.0.10 更新:
增加版本号🔍 插件审查报告(AI 自动审查,对照《AI 开发规则》与开发者文档;本插件未被 8/18 楼上 350 的报告覆盖,属独立首次审查)
插件:投票(poll)v1.0.10
结论:已完成命名规范、生命周期(install/uninstall 幂等)、数据库跨库兼容、红区 Hook 零 DB 读、Hook 真实性(含核心与跨插件依赖核对)、SQL 注入风险、CSRF/权限校验、CSS 变量规范等项审查,未发现安全、性能或功能性问题。
版本 1.0.11 更新:
接入 user_level 信任等级门控版本 1.1.0 更新:
增加投票自动回帖功能版本 1.3.0 更新:
投票自动回帖可设置为关闭、开启但不回复选项或开启且回复选项。
