先说一下遇到的问题:
使用discuz!论坛有一段时间了,论坛添加了VIP会员的功能,使用的是站帮网的Vip插件。今天才留意到一个问题,就是我自己的账号原本只开通了一个月的会员,至少也用了半年,怎么到现在还是VIP会员呢?到用户组一看,还是在自定义的VIP会员组里,也就是说站帮网的VIP插件可能有漏洞,然后就去百度,发现确实存在这个bug,VIP会员到期后不自动切换到默认用户组。站帮网官方最开始提出的解决方案是在【VIP会员管理】里把过期的会员清理掉,但这个方法并不完美,而且很麻烦,于是使用了某位大神的方案,最终完美解决。
解决方法:
1、打开文件:source/include/spacecp/spacecp_usergroup.php
找到代码:
$groupexpirynew = $groupterms['ext'][$groupid];
替换成:
//$groupexpirynew = $groupterms['ext'][$groupid];
/*---使用下面这行代码替换上面的那句代码,可以解决站帮网vip插件会员到期没有自动切换用户组问题----*/
$groupexpirynew = $groupterms['ext'][$extgroupidsnew];
2、还是spacecp_usergroup.php这个文件,找到下面这行代码:
$expirylist[$group['groupid']]['grouptitle'] = $isexp ? '<s>'.$group['grouptitle'].'</s>' : $group['grouptitle'];
在它的下面加上如下代码:
/*---- 新增代码 start,解决站帮网vip插件会员过期,没有自动切换用户组问题 ---*/
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]'");
}
/*---- 新增代码 end,解决站帮网vip插件会员过期,没有自动切换用户组问题 ---*/
3、这样就ok了,兼容x2.5-x3.4版本,效果如下图: