欢迎客人!
• 开始前请阅读社区规则确保您顺利的熟悉本社区。注册用户可以提交资源,如果您有已发布资源的新版本,您可以随时更新版本!
• 文件链接损坏请在文件下方留言,我们将会及时更新来自备份服务器的新链接。如有其它问题请 提交工单 和我们联系!【Telegram 频道】【QQ群:5977983】
• 我们拥有多账户检测系统,对于重复注册我们将采取严厉措施!快速获得积分
-
中国新年将至,本站推出优惠活动。所有用户组都将获得由 HuoNiu 开发的 付费插件 优惠20%活动!如果购买多个插件,将在优惠基础上继续实施5%优惠。本活动将持续一个月!
你正在使用过时的浏览器,可能无法正确显示此网站或其他网站。
你应该升级浏览器或使用其他浏览器。
你应该升级浏览器或使用其他浏览器。
- 撤销许可时 BIGINT 溢出报错修复
- 资源到期后购买记录状态自动更新为 expired
- 已过期记录在购买列表中正确显示
- 永久购买(无到期时间)可被管理员正常撤销
- 撤销后彻底禁止下载,不再走过期策略分支(积分 & 真实货币两种购买类型)
- 自然过期后后台配置的下载策略正常生效
- 多条购买记录时始终返回最新一条
修复:货币编辑页“最大持有量”标签显示异常
货币编辑页面中“最大持有量”标签显示为原始 phrase 键名。原因是模板错误引用了通用键 max_amount,与 XenForo 核心 phrase 冲突。现已改为使用插件专属 phrase:hn_currency_max_amount 与 hn_currency_max_amount_explain。
优化:转账手续费显示格式
转账记录中的手续费数值此前直接使用 bcmath 原始字符串显示,例如 0.06000000。现已改为通过 Money::format() 方法进行格式化处理,自动去除尾部多余的零,显示为 0.06。
修复:撤销授权后购买记录仍显示为有效
撤销授权时仅写入 expire_date,未同步更新 purchase_status,导致数据库记录仍保持 purchased 状态。同时购买记录列表查询仅过滤 purchased 状态,导致已撤销记录无法显示。现已修复:撤销授权时同步写入 revoked 状态,并更新查询逻辑,使列表同时显示 purchased 与 revoked 记录。
修复:交易记录 AUTO_INCREMENT ID 异常跳跃
升级脚本与管理员手动迁移同时执行批量 INSERT,InnoDB 在执行 INSERT IGNORE 前会预分配 AUTO_INCREMENT 值,即使未实际插入数据也会推进计数器,导致 ID 从约 4600 跳跃到 8200 以上。现已在批量插入前加入幂等性检查(transaction_hash LIKE 'mj_migration_%'),防止重复执行迁移。
架构调整:升级脚本不再执行数据迁移
原升级脚本 upgrade2000000Step1–4 同时包含 Schema 修改与数据迁移逻辑,导致每次升级都会重复迁移数据。现已重构为仅执行数据库结构变更(ALTER TABLE),所有数据迁移统一由 migrateMJCredits() 方法负责。
完善:手动迁移功能覆盖完整数据范围
此前管理员手动执行 migrateMJCredits() 时,仅迁移部分数据。现已将原升级脚本中的迁移逻辑统一整合到该方法中,确保一次迁移即可完整处理所有数据,包括:
升级脚本现在仅负责 数据库结构变更,所有业务数据迁移统一通过 后台迁移工具 执行。
- 用户积分余额与每日签到时间
- 资源定价与货币信息
- 资源购买记录
- 交易历史记录
- 货币配置与积分事件规则
- 帖子悬赏数据
- 充值购买记录
- 资源支付类型标记
- 红包与红包领取记录
- 权限前缀(mjCredits → hnCredits)迁移
- 相关缓存重建
- 修复积分交易列表 $conditions 为 null 导致的 TypeError
- 修复真实货币导出 $this->response() 未定义错误,改为标准 XF View 模式
- 修复模板中使用不存在的 | merge 过滤器
- 新增缺失短语 hn_title
- 修复 seller/buyer 短语未定义,改用 hn_user/hn_trigger_user
- 导出按钮改为标准 <xf😛ageaction> + <xf:button>
- 提现管理列表/详情页按钮改为标准 <xf:button>
- 迁移选项模板按钮改为标准 <xf:button>
- 修复真实货币购买按钮不显示的问题 — 登录用户现在能正常看到付费资源的购买按钮
- 精简后台侧边栏 — ACP 侧边栏从三个入口合并为一个"HuoNiu积分系统"
- 修复编辑器工具栏付费内容按钮失效的问题 — 解决因加载不存在的 JS 文件导致编辑器按钮无法显示的问题
- 增加积分购买升级用户组
- 多货币设置升级用户组
- 支付网关货币由固定列表升级为动态下拉,自动按系统可用货币与已启用支付方式联动展示。
- 优化支付货币选择逻辑,支持保留历史已保存值,避免升级后配置项丢失或不可选。
- 修复支付方式勾选变更时的校验时机问题,解决“首次保存报不支持、再次保存又通过”的不一致现象。
- 增强货币兼容校验:仅变更支付方式时也会立即执行货币支持检查,结果更稳定一致。
- 增强循环订阅兼容校验:仅变更支付方式时也会同步检查是否支持 recurring 与周期长度。
- 后台保存校验行为统一,减少因配置顺序不同导致的误判与绕过。
- 兼容现有支付流程与购买逻辑,不改变实际扣费/结算路径,仅强化配置阶段校验与可用性。
多货币定价功能(新功能)
货币单位将跟随系统语言切换自动显示。具体测试可变更底部语言显示,价格及单位将同步变更。
- 资源支持同时设置多种货币价格,用户访问时自动展示对应货币
- 新增货币优先级规则:用户手动选择 > 管理员语言包映射 > 默认货币
- 新增管理后台选项:语言包 → 货币映射配置表
- 支付方式将根据货币自动选择付款网关,缺失网关将会自动增加退回机制
- 用户也可手动选择相关支付方式
P1 WARNING 修复(13项)
P2 WARNING 修复(10项)
- SQL注入修复 + 游标分页
- 管理员提现控制器添加权限验证
- 数据迁移控制器添加权限验证
- 诊断控制器添加权限验证
- 全额退款方法修复错误列名
- 退款逻辑覆盖 pending+approved 两种状态
- 反应内容实体添加空值安全链 ?->
- 资源付费记录实体添加默认 return false
- 支付处理器修复不存在的方法调用
- 红包抢夺加数据库事务+行锁,mt_rand → random_int
- 货币相关列类型 FLOAT → STR
- 帖子付费查询子查询改 JOIN + 补 content_type 过滤
- 数据导入仓库 3处SQL注入修复
- 统计仓库列名白名单验证
- 积分转账金额 float → bcmath 精度安全
- 奖励实体空值检查
- 红包实体空值检查
- 交易清理任务 DELETE 加 LIMIT 防超时
- 转账服务传入正确用户对象而非 null
- 频率限制检查移入 POST 分支
- 管理后台清除操作添加 CSRF 验证
- 收费BB代码静态缓存 + 保存后更新缓存
- 货币仓库移除读取路径的写操作副作用
新增功能
- 资源拒绝与反馈 — 管理员在审批队列中可选择"拒绝并反馈",向资源作者发送私信说明拒绝原因和修改建议
- 资源版本拒绝与反馈 — 同上,支持对资源新版本的拒绝操作
- 拒绝时可选删除资源 — 拒绝时可勾选是否软删除资源,不勾选则保留资源供作者修改后重新提交
- 拒绝时可选发送私信 — 拒绝时可勾选是否发送包含拒绝原因和修改建议的私信通知
- 独立拒绝页面 — 在资源详情页提供单独的拒绝表单入口(非审批队列场景)
- 购买列表权限控制 — 新增 canViewPurchaseList() 权限判断,仅资源作者、管理员、版主可查看购买记录
- 审批队列拒绝字段动态显示 — 选中"拒绝"单选按钮时自动展开原因和建议输入框,选其他操作时自动隐藏
修复
- 已过期购买记录不可见 — 移除了 isActive() 过滤器,现在显示所有购买记录并附带 is_active / is_expired 状态标识
- 拒绝不删除时审批队列条目残留 — 拒绝资源但不删除时,resource_state 保持 'moderated' 不变,不触发实体状态变更钩子,导致队列条目永不移除。修复为显式删除 ApprovalQueue 条目
- 修复模板 link 函数参数类型错误 - 真实货币交易列表搜索菜单
- 优化事件错误检测逻辑 - 使用语言短语键替代硬编码字符串
- 扩展错误白名单 - 将正常的频率限制错误加入白名单,避免误记录