Discuz! X2-X3用户组到期后不自动切换组的解决方案

没想到这个问题到了Discuz! X3了还没解决,不知道官方团队是没注意到这个问题,还是遇到了瓶颈,下面是我搜到的网上的教程,但大部分教程不是隐藏就是需要注册回复,转发到这儿,方便大家直接查阅。

修改文件:source/include/spacecp/spacecp_usergroup.php

找到代码:

$groupexpirynew = $groupterms['ext'][$groupid];

替换为:

$groupexpirynew = $groupterms['ext'][$extgroupidsnew];

找到代码:

$expirylist[$group['groupid']]['grouptitle'] = in_array($group['groupid'], $expgrouparray) ? ''.$group['grouptitle'].'' : $group['grouptitle'];
                }
        }

因为不同版本代码有变,所以如果搜不到全部,就只搜一下:

$expirylist[$group['groupid']]['grouptitle']

在这段代码下面(注意:一定是在两个大括号之后)添加:

if($expgrouparray) {
$extgroupidarray = array();
foreach(explode("\t", $_G['forum_extgroupids']) as $extgroupid) {
if(($extgroupid = intval($extgroupid)) && !in_array($extgroupid, $expgrouparray)) {
$extgroupidarray[] = $extgroupid;
}
}

$groupidnew = $_G['groupid'];
$adminidnew = $_G['adminid'];
foreach($expgrouparray as $expgroupid) {
if($expgroupid == $_G['groupid']) {
if(!empty($groupterms['main']['groupid'])) {
$groupidnew = $groupterms['main']['groupid'];
$adminidnew = $groupterms['main']['adminid'];
} else {
$groupidnew = DB::result_first("SELECT groupid FROM ".DB::table('common_usergroup')." WHERE type='member' AND '".$_G['member']['credits']."'>=creditshigher AND '$credits'<creditslower LIMIT 1");
if(in_array($_G['adminid'], array(1, 2, 3))) {
$query = DB::query("SELECT groupid FROM ".DB::table('common_usergroup')." WHERE groupid IN (".dimplode($extgroupidarray).") AND radminid='$_G[adminid]' LIMIT 1");
$adminidnew = (DB::num_rows($query)) ? $_G['adminid'] : 0;
} else {
$adminidnew = 0;
}
}
unset($groupterms['main']);
}
unset($groupterms['ext'][$expgroupid]);
}
require_once libfile('function/forum');
$groupexpirynew = groupexpiry($groupterms);
$extgroupidsnew = implode("\t", $extgroupidarray);
$grouptermsnew = addslashes(serialize($groupterms));
DB::query("UPDATE ".DB::table('common_member')." SET adminid='$adminidnew', groupid='$groupidnew', extgroupids='$extgroupidsnew', groupexpiry='$groupexpirynew' WHERE uid='$_G[uid]'");
DB::query("UPDATE ".DB::table('common_member_field_forum')." SET groupterms='$grouptermsnew' WHERE uid='$_G[uid]'");
}

正常情况下,直接生效,但如果看不出来变化,就后台更新一下缓存,就OK了。

此解决方案来自网络,亲测可行,如果有更复杂的问题,本人没有能力详细回复,希望大家理解。

落花生

认准了方向,就要勇敢地走下去,十年磨一剑,我相信,只要坚持,一切都有可能。

相关日志

  1. 没有图片

    2011.01.02

    老毛桃PE维护系统 09.16完美XP光盘版

    软件分类:系统辅助 运行环境:WinXP/2…

  2. 没有图片

    2010.05.10

    支付宝如何获取交易安全验证码及合作者ID

    一、请在支付宝(http://alipay.…

  3. 没有图片

    2010.09.20

    Discuz! X1.5正式版发布

    康盛旗下产品Discuz! X1.5 正式版…

  4. 没有图片

    2010.04.30

    WP-MulticolLinks 让你的友情链接分栏显示

    菠萝今天找点空弄一下WordPress主题,…

  5. 没有图片

    2012.01.12

    CentOS5命令安装LAMP环境(Linux+Apache+Mysql+PHP)

    平时大家使用的Centos服务器,都是使用L…

  6. 没有图片

    2012.03.03

    精选15个CSS框架

    1.960 Grid System 960网…

评论

  1. 微进制 2013.11.29 1:33下午

    之前的论坛,也遇到过这个问题,当时找了很多方法都不行啊,虽然现在不搞论坛了,但还是感谢分享!

About

马拉松运动员,沉迷于跑步;关注科技前沿,关注互联网!与跑者、程序员、设计师为伍,一起跑步健身,一起编写程序,为自由而战!