HuoNiu Credits System - 积分系统

付费/Paid HuoNiu Credits System - 积分系统 2.3.8.6

欢迎客人!

• 开始前请阅读社区规则确保您顺利的熟悉本社区。注册用户可以提交资源,如果您有已发布资源的新版本,您可以随时更新版本!

• 文件链接损坏请在文件下方留言,我们将会及时更新来自备份服务器的新链接。如有其它问题请 提交工单 和我们联系!【加入Telegram】【QQ群:5977983】

• 我们拥有多账户检测系统,对于重复注册我们将采取严厉措施!快速获得积分

  • 中国新年将至,本站推出优惠活动。所有用户组都将获得由 HuoNiu 开发的 付费插件 优惠20%活动!如果购买多个插件,将在优惠基础上继续实施5%优惠。本活动将持续一个月!
  1. 修复模板 link 函数参数类型错误 - 真实货币交易列表搜索菜单
  2. 优化事件错误检测逻辑 - 使用语言短语键替代硬编码字符串
  3. 扩展错误白名单 - 将正常的频率限制错误加入白名单,避免误记录
修复错误
  • 将 \XF::app()->schemaManager() 改为 $db->getSchemaManager()

兼容性更新​

适配 XenForo Resource Manager 2.3.8 最新版

新增功能​

  • ✨ 侧边栏显示限时折扣信息(折扣百分比 + 截止日期)
  • ✨ 折扣系统支持叠加计算(折上折):分类折扣 → 限时折扣 → 续订折扣

折扣系统优化​

  • 🔄 限时折扣对所有登录用户可见(无需用户组限制)
  • 🔄 分类折扣仅对指定用户组可见
  • 🔄 三层折扣可累积叠加,最大化优惠力度

Bug 修复​

  • 修复 discount 权限缺失导致折扣功能不可用
  • 修复 getUserGroupDiscountPercent() 返回值错误(100-折扣 → 折扣值)
  • 修复 canDiscount() 冗余权限检查
  • 修复 bypassPurchase 权限名不一致(3处:Entity/ResourceItem、Controller/ResourceVersion)
  • 修复资源购买时 "Trigger fire failed" 错误(quickTrigger 参数导致)
  • 清理 template_modifications.xml 升级提示中的死代码

代码改进​

  • ♻ 重命名 getDiscountPercent() → getDiscountedPrice()(更准确的方法名)
  • ♻ 更新所有折扣相关短语说明(中文 + 英文)
  • ♻ 优化折扣计算逻辑,支持叠加规则

1. Setup.php XenForo 标准合规性修复(9批次)​

  • 移除所有冗余的 information_schema 查询
  • 移除所有 SHOW COLUMNS 检查
  • 移除所有 tableExists() 预检查
  • 移除所有 getColumnDefinition() 检查
  • 移除 deleteDirectory() 辅助方法
  • 保留对第三方插件(MJ)的合法性检查
  • 涉及方法:installStep1、installStep9、uninstallStep1-3、uninstallStep6-7、upgrade2000000Step2-4、upgrade2030500Step1、upgrade2030600Step1、upgrade2030700Step1、upgrade2030702Step1、upgrade2030705Step1、migrateResourcePricing()

2. 新装与升级架构一致性修复​

  • 新增 upgrade2030803Step1 升级步骤
  • 补全4个缺失表:xf_hn_audit_log、xf_hn_failed_event_log、xf_hn_credits_stats、xf_hn_event_statistics
  • 补全 xf_rm_resource 表缺失字段:hn_count_category_only
  • 补全资源购买表缺失的8个过期通知字段(expiry_notified_*)

3. 版本号更新​

  • addon.json:version 更新为 "2.3.8.3",version_id 更新为 2030803

4. hn_stats 模板错误修复​

  • templates.xml:修复3处 {$event.getTitle()} 改为 {$event.title}
  • 原因:控制器传递的是数组而非对象

5. Templater.php 代码清理​

  • 移除冗余的 fnLink() 方法覆盖(参数签名不匹配)

6. 每日签到小部件修复​

  • Widget/ClockInEveryDay.php:添加 SQL 查询过滤,仅显示配置了 daily_clock 事件的货币
  • templates.xml (hn_widget_user_clock_in_every_day):表单添加 ajax="true",按钮添加 js-clockInBtn 类
  • Pub/Controller/Credit.php (actionClock):移除未使用变量,重定向改为 getDynamicRedirect()

7. 侧边栏积分处罚入口移除​

  • templates.xml (hn_credit_wrapper):移除侧边栏"您的钱包"中的"积分处罚"链接(第3187-3190行)

8. 缺失短语键值补全​

  • phrases.xml:添加 hn_credits_not_enough_x_being_fined 短语:"被处罚用户余额不足,需要 {x}"

文件统计​

  • Setup.php:从 3213 行优化到 2740 行
  • 修改文件数:8个核心文件
  • 新增代码:约200行(upgrade2030803Step1 + 小部件过滤逻辑)
  • 删除代码:约670行(冗余检查 + fnLink方法)

1. 核心Bug修复(3项)​

  • ModeratorLog错误 → 移除logModeratorAction()调用
  • MySQL "Commands out of sync" → 改用Finder API查询
  • json_decode TypeError → 添加is_array()检查

2. 重复防护机制​

  • 事件重复触发防护 → 按currency_id去重
  • 签到重复防护 → SELECT FOR UPDATE原子锁

3. 事件系统精简(删除28个事件)​

  • 移除:profile_post系列(8个)、conversation系列(2个)、poll系列(4个)、thread_watch系列(4个)、thread_sticky/unsticky、post_report系列(2个)、avatar_delete、unfollow/follower_lose、update_status、post_like_lose、thread_reply_lose

4. 提现功能补全​

  • 新增:withdrawal、withdrawal_refund事件定义
  • 新增:Event/Handler/Withdrawal.php处理类
  • 新增:4条相关phrase

5. 升级路径​

  • Setup.php新增upgrade2030801Step1() → 自动清理旧事件+插入新事件

6. 代码一致性清理​

  • EventContainer.php → 移除28个删除事件映射
  • EventHandler.php → 清理删除事件case语句
  • Transaction.php canView() → 允许查看历史记录
  • ConversationUser.php → 清空_postSave()
  • 删除7个实体扩展类文件

7. 配置文件同步​

  • class_extensions.xml → 移除8个已删实体扩展
  • phrases.xml → 删除~40个废弃phrase,新增4个
  • hn_event_definitions.xml → 清理28个删除事件,新增2个
  • Setup.php getData() → 补齐hn_sell_resource_money、paygate_payment

1-3:基础功能修复​

  1. 提现拒绝功能缺失 — 管理员拒绝提现时无法输入原因,无法发送PM通知用户
  2. 信用兑换/分红/红包页面洪水检查误触 — GET请求(首次访问)就触发洪水检查
  3. 每日签到小工具不工作 — 模板名称错误、变量不匹配、缺少货币数据、缺少后端方法

4:事件系统​

  1. 资源购买/出售事件 definition_id 不匹配
  2. 最佳答案悬赏事件 definition_id 不匹配
  3. 资源购买/出售事件无异常保护 — XFRM 插件未安装时会导致致命错误
  4. 投票删除事件未触发 — poll_delete 定义存在但从未被调用
  5. 帖子回复扣减重复执行 — 编辑已删除帖子时重复扣除积分
  6. 主题浏览事件重复触发 — 控制器中多处调用导致同一次浏览触发两次

5:剩余问题​

  1. 真实货币购买资源事件失效 — 定义存在但从未触发
  2. 转账功能绕过事件系统 — 无论事件是否激活、用户组是否有权限,都能转账
  3. 死代码文件存在 — 扩展文件完全未使用

6:后台设置与选项​

  1. EventContainer 映射错误(严重)— 约16个 definition_id 键名错误,导致交易记录描述全部显示为空
  2. 每日限额重复检查+SQL错误(高危)— EventHandler.trigger() 有重复检查逻辑且忽略开关,SQL IN 参数绑定错误
  3. 幽灵选项(中等)— 在代码中使用但 options.xml 从未定义,管理员无法配置
  4. 提现货币默认值不一致

7:PHP 8 兼容性​

  1. Trigger 服务类型错误

8:日志优化​

  1. 未配置事件错误日志泛滥 — daily_login 是可选功能,管理员未配置时每次请求都记录错误

🔧 修复问题​

  1. 提现管理界面优化
    • 金额显示格式化为2位小数(修复显示8位小数问题)
    • 完整显示收款信息(账户姓名、收款账号),不再仅显示支付方式
  2. 路由配置修复
    • 删除重复的管理后台提现路由定义
    • 修复安装时路由冲突错误(Error 1062: Duplicate entry)
  3. 货币删除功能修复
    • 修复删除货币时查询不存在数据表的错误
    • 修复删除过程中未定义变量 $column 的错误
    • 正确从 xf_user 表检查用户余额
  4. 界面组件标准化
    • 事件管理页面金币货币提示使用 XenForo 标准 blockMessage 组件
    • 改善视觉一致性和用户体验

🔒 安全特性​

  • 金币货币系统保护机制完整(6层防护)
  • 仅能通过销售资源文件获得金币

一、代码规范修复(15项)​

实体类修复(9项)
  1. ResourceMoneyPurchase.php - 修复汇率默认值、PHPDoc、缩进
  2. Charge.php - 添加缺失的 $refundOnDelete 属性和setter方法
  3. EventDefinition.php - 移除未定义属性的默认值设置
  4. Withdrawal.php - 金额字段类型从FLOAT改为STR(精度问题)
  5. Bonus.php - 修复主键定义(array→string)
  6. Reward.php - 修复主键定义(array→string)
安装/升级修复(3项)
7. Setup.php - 修复卸载步骤命名冲突(6A→6, 6→7)
8. Setup.php - 补全卸载步骤中遗漏的表/列删除
9. Setup.php - 移除所有调试echo语句

控制器修复(1项)
10. Pub/Controller/Withdrawal.php - 添加提现防洪水检查

监听器修复(1项)
11. Listener.php - 修复默认货币ID(0→1,避免外键错误)

文件清理(1项)
12. 删除备份文件 Entity/Bonus.php.bak

二、小数位显示修复(6处)​

模板修复
  1. 管理面板资源批量列表 - 积分价格、现金价格格式化
  2. 购买确认页面 - 发送金额、剩余余额格式化
  3. 资源价格标签 - 原价、折扣价、续费价格(~10个实例)
  4. 货币汇率显示 - 4位小数
  5. 重置积分目标 - 2位小数
影响
  • 所有积分金额现在按货币 decimal_places 设置显示(默认2位)
  • 解决迁移后显示8位小数的问题

三、修改文件统计​

共修改 10 个文件:
  • 6 个实体类
  • 1 个安装类
  • 1 个控制器
  • 1 个监听器
  • 1 个模板文件
  1. options.xml - 新增防洪选项
  2. phrases.xml - 中文短语
  3. Pub/Controller/Credit.php - 防洪逻辑
  4. Service/Transfer/Handler.php - 触发用户
  5. Setup.php - 迁移修复
修复了 3 个文件
  • phrases.xml - 清理重复语言键
  • templates.xml - 修复提现模板错误
  • Thread.php - 解决插件兼容性
🎯 核心问题
  1. 清理重复语言键导致显示异常
  2. 提现模板 XML 结构错误无法安装
  3. 与 SearchImprovements 插件冲突报错
🔧 技术细节
  • 语义区分:"支付方式"(买积分)vs "收款方式"(提现)
  • 注册 getter 确保类扩展继承正确
后退
顶部