美妙社 - MeiMiaoShe.com
不只是一个[美味]且[奇妙]的社区
现在注册
已注册用户请  登录
最近讨论的主题
节点活跃用户
DivivitYan  • 26 讨论
MMS_LJfOrMxm  • 1 讨论
不看回复  • 1 讨论
我的记忆误解了  • 1 讨论
罗钊刚  • 1 讨论
美妙社  ›  建站笔记

Discuz颁发勋章有效期累计修改

DivivitYan听音乐 2021-11-7 21:42:436.5K 次点击 阅读模式     
Discuz的勋章颁发有一定问题,如果给用户颁发一个勋章,有效期30天,那么在用户的勋章还有5天到期的时候再次给用户颁发这个勋章,那么会是一个全新的有效期,即30天。

通过分析源码发现,给用户颁发一次勋章就会往form_medallog表里插入一条记录,其中expiration字段代表有效期,,大体思路有了,在颁发勋章操作里,插入新的勋章前,先查找表里该用户已经有的这个勋章是否过了有效期,如果没有,那么用这个有效期减去当前时间戳得到上个勋章剩余的有效期,插入新的勋章的时候,把这个剩余有效期添加进去,代码其实很简单。

修改的文件为
source/admincp/admincp_members.php
  1. foreach($medalsnewarray as $medalnewarray) {
  2.         $sql = "select * from ".DB::table('forum_medallog')." where uid = {$medalnew['uid']} and medalid = {$medalnewarray['medalid']} order by id desc limit 1";
  3.         $lastmedal = DB::fetch_first($sql);
  4.         // 旧勋章未到期的时间
  5.         $lasttime = $lastmedal['expiration'] > TIMESTAMP ? $lastmedal['expiration'] - TIMESTAMP : 0;
  6.         
  7.         $data = array(
  8.                 'uid' => $medalnew['uid'],
  9.                 'medalid' => $medalnewarray['medalid'],
  10.                 'type' => 0,
  11.                 'dateline' => $_G['timestamp'],
  12.                 'expiration' => $medalnewarray['expiration'] + $lasttime,
  13.                 'status' => $medalnewarray['status'],
  14.         );
  15.         C::t('forum_medallog')->insert($data);
  16.         C::t('common_member_medal')->insert(array('uid' => $medalnew['uid'], 'medalid' => $medalnewarray['medalid']), 0, 1);
  17. }
复制代码
啊舒服sdf
目前尚无回复
添加一条新回复
您需要登录后才可以回帖 登录 | 立即注册

本节点积分规则
站点统计  ·  手机版  ·  小黑屋  ·  帮助  ·  Archiver  ·  手机版  ·  小黑屋  ·  35 人在线  最高记录 291  ·  TOP
愿孤独的人都会唱歌,愿漂泊的人都有酒喝!
World is powered by solitude
GMT+8, 2024-4-18 11:00, Processed in 0.261263 second(s), 179 queries .

  Inspire by v2ex, Powered by Discuz! X3.5, Template by MeiMiaoShe.Com, © 2001-2024 Discuz! Team.