IT618

 找回密码
 立即注册
查看: 1568|回复: 0

DiscuzX3用户组过期自动切换主用户组问题解决方法

[复制链接]
<

267

主题

49

回帖

3087万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
30870152
发表于 2018-3-15 13:06:39 | 显示全部楼层 |阅读模式
如果安装了it618钱包有现金+积分购买用户组的功能,同时还会自动解决用户组过期自动切换主用户组的问题,只是需要修改source/class/discuz/discuz_application.php
QQ截图20181120090330.png
只需要在上图黄色代码那行前面加//就是不强制跳转到论坛电脑版的购买用户组页面,而是会自动跳转到电脑版或手机版钱包购买用户组页面,这样体验更好,在跳转前已经自动切换主用户组了,会员如果不想续费或购买用户组,也可以访问别的页面

钱包的自动切换用户组规则:如果购买自定义用户组B后,当前用户组还是会员用户组A,那么到期后,当前用户组还是A
如果购买自定义用户组B后,手工切换到自定义用户组B,那么到期后,会按会员用户组的积分规则获取新的会员用户组


以下是没有安装it618钱包的方法:
打开文件:source/include/spacecp/spacecp_usergroup.php
找到代码

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

替换为

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

然后找到代码

$expirylist[$group['groupid']]['grouptitle'] = in_array($group['groupid'], $expgrouparray) ? '<s>'.$group['grouptitle'].'</s>' : $group['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]'");
        }
此方法适用于Discuz X2到X3.2,如果你的用户组到期可以正常切换就不需要进行以上修改,如果存在问题可以根据上面的方法进行相应的调整,调整前请记住备份。如果以上方法不能解决你的问题,再尝试以下方法:
首先我们要找到打开source\include\spacecp\spacecp_usergroup.php这个文件,找到299行左右,

foreach(explode("\t", $_G['forum_extgroupids']) as $extgroupid) {
修改为

foreach(explode("\t", $_G['member']['extgroupids']) as $extgroupid) {
修改完后,以后的用户组过期就会得到解决。

如果你以前就有很多的过期用户想清理掉怎么办呢?这个的要修改source\class\discuz\discuz_application.php这个文件了。
原理就是在用户今日论坛的时候自动检测一下是否过期,如果过期就自动切换到原来的用户组上去。

打开discuz_application.php文件,大概在433行左右,找到

if($user && $user['groupexpiry'] > 0 && $user['groupexpiry'] < TIMESTAMP && (getgpc('mod') != 'spacecp' || CURSCRIPT != 'home')) {
在他上面添加内容并重写成以下的代码

$groupterms = unserialize(DB::result_first("SELECT groupterms FROM ".DB::table('common_member_field_forum')." WHERE uid='".getglobal('uid', 'member')."'"));
                        $termsarray = array();
                        if(!empty($groupterms['ext']) && is_array($groupterms['ext'])) {
                                $termsarray = $groupterms['ext'];
                }
                        if(!empty($groupterms['main']['time']) && (empty($termsarray[$_G['groupid']]) || $termsarray[$_G['groupid']] > $groupterm['main']['time'])) {
                                $termsarray[$_G['groupid']] = $groupterms['main']['time'];
                        }
                        foreach($termsarray as $expgroupid => $expiry) {
                                if($expiry <= TIMESTAMP) {
                                        $user_expiry = 1;
                                }
                        }
                        if($user && (( $user['groupexpiry'] > 0 && $user['groupexpiry'] < TIMESTAMP) || $user_expiry == 1) && (getgpc('mod') != 'spacecp' || CURSCRIPT != 'home')) {
                                 dheader('location: home.php?mod=spacecp&ac=usergroup&do=expiry');
                         }
保存文件,修改完成。

每当用户刷新页面的时候,自动检测是否到达过期时间,如果到达的话,就自动切换当前用户组。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|插件教程|常见问题|扫码访问手机版|IT618

GMT+8, 2024-4-20 04:51

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表