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. 没有图片

    2012.11.23

    Windows Server 2012 上安装 IIS 8 图文教程

    今天弄了台机器,下载了 Windows Se…

  2. 没有图片

    2013.11.19

    WordPress个性轻博客主题 XiaoXiao 发布

    很早就发布过轻博客主题 Cimple,深受大…

  3. 没有图片

    2012.02.28

    Windows 2003 Server 权限设置教程

    整理了一下Windows 2003 Serv…

  4. 没有图片

    2011.12.22

    LNMP的mail函数不能发送邮件解决办法

    编译好的LNMP环境下,WordPress的…

  5. 没有图片

    2012.01.12

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

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

  6. 没有图片

    2011.03.29

    WordPress 3.0+ 多个自定义菜单教程

    自制主题,肯定想使用WordPress 3.…

评论

  1. 微进制 2013.11.29 1:33下午

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

About

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