discuz 的 group.php,DiscuzX用户组过期问题解决方法

本文详细介绍了如何解决Discuz用户组过期后无法自动切换回原用户组的问题。通过修改spacecp_usergroup.php和discuz_application.php两个文件中的特定代码,实现了用户组过期后自动切换的功能,确保用户在过期后能够正确回到默认用户组。此外,还提供了解决已过期用户清理的方法。
摘要由CSDN通过智能技术生成

Discuz自从出现以来就是一个Bug坑,各种bug,虽然也有解决了的,但是还是有很多BUG官方都没有解决。就像这个用户组过期问题一样,过期后就不会自己切换回去。官方的态度就是,我们没有发现这个BUG啊。。废话,你们都不启用这些东西的,怎么会知道BUG的存在!!!

言归正传,现在我们就来解决这用户组过期不能自动切换的问题。

就拿DiscuzX2.5作为例子,在N多人去官方论坛投诉后,官方最终加上了一段代码。但是随后都反映说这用户组过期问题还是存在,然后这个问题就这样存在着。。

在仔细看完了discuz论坛的整个代码后发现,官方给出的代码大部分是没有错误的,但是有一个致命的问题写错了,导致不能正常过期。

下面我们就来修改这个bug。首先我们要找到打开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');

}

保存文件,修改完成。

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

标签:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值