373 lines
15 KiB
PHP
373 lines
15 KiB
PHP
<?php
|
|
|
|
/**
|
|
* [Discuz!] (C)2001-2099 Comsenz Inc.
|
|
* This is NOT a freeware, use is subject to license terms
|
|
*
|
|
* $Id: spacecp_usergroup.php 34024 2013-09-22 08:55:00Z nemohou $
|
|
*/
|
|
|
|
if(!defined('IN_DISCUZ')) {
|
|
exit('Access Denied');
|
|
}
|
|
|
|
if($_G['inajax'] && $_GET['showextgroups']) {
|
|
require_once libfile('function/forumlist');
|
|
loadcache('usergroups');
|
|
$extgroupids = $_G['member']['extgroupids'] ? explode("\t", $_G['member']['extgroupids']) : array();
|
|
$group = array();
|
|
if($_G['uid'] && $_G['group']['grouptype'] == 'member' && $_G['group']['groupcreditslower'] != 999999999) {
|
|
$group['upgradecredit'] = $_G['group']['groupcreditslower'] - $_G['member']['credits'];
|
|
$group['upgradeprogress'] = 100 - ceil($group['upgradecredit'] / ($_G['group']['groupcreditslower'] - $_G['group']['groupcreditshigher']) * 100);
|
|
$group['upgradeprogress'] = max($group['upgradeprogress'], 2);
|
|
}
|
|
include template('forum/viewthread_profile_node');
|
|
include template('common/extgroups');
|
|
exit;
|
|
}
|
|
|
|
$do = in_array($_GET['do'], array('buy', 'exit', 'switch', 'list', 'forum', 'expiry')) ? trim($_GET['do']) : 'usergroup';
|
|
|
|
$extgroupids = $_G['member']['extgroupids'] ? explode("\t", $_G['member']['extgroupids']) : array();
|
|
space_merge($space, 'count');
|
|
$credits = $space['credits'];
|
|
$forumselect = '';
|
|
$activeus = array();
|
|
$activeus[$do] = ' class="a"';
|
|
|
|
if(in_array($do, array('buy', 'exit'))) {
|
|
|
|
if($_G['groupid'] == 4 && $_G['member']['groupexpiry'] > 0 && $_G['member']['groupexpiry'] > TIMESTAMP) {
|
|
showmessage('usergroup_switch_not_allow');
|
|
}
|
|
|
|
$groupid = intval($_GET['groupid']);
|
|
|
|
$group = C::t('common_usergroup')->fetch($groupid);
|
|
if($group['type'] != 'special' || $group['system'] == 'private' || $group['radminid'] != 0) {
|
|
$group = null;
|
|
}
|
|
if(empty($group)) {
|
|
showmessage('usergroup_not_found');
|
|
}
|
|
$join = $do == 'buy' ? 1 : 0;
|
|
$group['dailyprice'] = $group['minspan'] = 0;
|
|
|
|
if($group['system'] != 'private') {
|
|
list($group['dailyprice'], $group['minspan']) = explode("\t", $group['system']);
|
|
if($group['dailyprice'] > -1 && $group['minspan'] == 0) {
|
|
$group['minspan'] = 1;
|
|
}
|
|
}
|
|
$creditstrans = $_G['setting']['creditstrans'];
|
|
if(!isset($_G['setting']['creditstrans'])) {
|
|
showmessage('credits_transaction_disabled');
|
|
}
|
|
|
|
if(!submitcheck('buysubmit')) {
|
|
$usermoney = $space['extcredits'.$creditstrans];
|
|
$usermaxdays = $group['dailyprice'] > 0 ? intval($usermoney / $group['dailyprice']) : 0;
|
|
$group['minamount'] = $group['dailyprice'] * $group['minspan'];
|
|
} else {
|
|
$memberfieldforum = C::t('common_member_field_forum')->fetch($_G['uid']);
|
|
$groupterms = dunserialize($memberfieldforum['groupterms']);
|
|
unset($memberfieldforum);
|
|
require_once libfile('function/forum');
|
|
if($join) {
|
|
$extgroupidsarray = array();
|
|
foreach(array_unique(array_merge($extgroupids, array($groupid))) as $extgroupid) {
|
|
if($extgroupid) {
|
|
$extgroupidsarray[] = $extgroupid;
|
|
}
|
|
}
|
|
$extgroupidsnew = implode("\t", $extgroupidsarray);
|
|
if($group['dailyprice']) {
|
|
if(($days = intval($_GET['days'])) < $group['minspan']) {
|
|
showmessage('usergroups_span_invalid', '', array('minspan' => $group['minspan']));
|
|
}
|
|
|
|
if($space['extcredits'.$creditstrans] - ($amount = $days * $group['dailyprice']) < ($minbalance = 0)) {
|
|
showmessage('credits_balance_insufficient', '', array('title'=> $_G['setting']['extcredits'][$creditstrans]['title'],'minbalance' => ($minbalance + $amount)));
|
|
}
|
|
|
|
$groupterms['ext'][$groupid] = ($groupterms['ext'][$groupid] > TIMESTAMP ? $groupterms['ext'][$groupid] : TIMESTAMP) + $days * 86400;
|
|
|
|
$groupexpirynew = groupexpiry($groupterms);
|
|
|
|
C::t('common_member')->update($_G['uid'], array('groupexpiry' => $groupexpirynew, 'extgroupids' => $extgroupidsnew));
|
|
updatemembercount($_G['uid'], array($creditstrans => "-$amount"), true, 'UGP', $extgroupidsnew);
|
|
|
|
C::t('common_member_field_forum')->update($_G['uid'], array('groupterms' => serialize($groupterms)));
|
|
|
|
} else {
|
|
C::t('common_member')->update($_G['uid'], array('extgroupids' => $extgroupidsnew));
|
|
}
|
|
|
|
showmessage('usergroups_join_succeed', "home.php?mod=spacecp&ac=usergroup".($_GET['gid'] ? "&gid=$_GET[gid]" : '&do=list'), array('group' => $group['grouptitle']), array('showdialog' => 3, 'showmsg' => true, 'locationtime' => true));
|
|
|
|
} else {
|
|
|
|
if($groupid != $_G['groupid']) {
|
|
if(isset($groupterms['ext'][$groupid])) {
|
|
unset($groupterms['ext'][$groupid]);
|
|
}
|
|
$groupexpirynew = groupexpiry($groupterms);
|
|
C::t('common_member_field_forum')->update($_G['uid'], array('groupterms' => serialize($groupterms)));
|
|
|
|
} else {
|
|
$groupexpirynew = 'groupexpiry';
|
|
}
|
|
|
|
$extgroupidsarray = array();
|
|
foreach($extgroupids as $extgroupid) {
|
|
if($extgroupid && $extgroupid != $groupid) {
|
|
$extgroupidsarray[] = $extgroupid;
|
|
}
|
|
}
|
|
$extgroupidsnew = implode("\t", array_unique($extgroupidsarray));
|
|
C::t('common_member')->update($_G['uid'], array('groupexpiry' => $groupexpirynew, 'extgroupids' => $extgroupidsnew));
|
|
|
|
showmessage('usergroups_exit_succeed', "home.php?mod=spacecp&ac=usergroup".($_GET['gid'] ? "&gid=$_GET[gid]" : '&do=list'), array('group' => $group['grouptitle']), array('showdialog' => 3, 'showmsg' => true, 'locationtime' => true));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} elseif($do == 'switch') {
|
|
|
|
$groupid = intval($_GET['groupid']);
|
|
if(!in_array($groupid, $extgroupids)) {
|
|
showmessage('usergroup_not_found');
|
|
}
|
|
if($_G['groupid'] == 4 && $_G['member']['groupexpiry'] > 0 && $_G['member']['groupexpiry'] > TIMESTAMP) {
|
|
showmessage('usergroup_switch_not_allow');
|
|
}
|
|
$group = C::t('common_usergroup')->fetch($groupid);
|
|
if(submitcheck('groupsubmit')) {
|
|
$memberfieldforum = C::t('common_member_field_forum')->fetch($_G['uid']);
|
|
$groupterms = dunserialize($memberfieldforum['groupterms']);
|
|
unset($memberfieldforum);
|
|
$extgroupidsnew = $_G['groupid'];
|
|
$groupexpirynew = $groupterms['ext'][$groupid];
|
|
foreach($extgroupids as $extgroupid) {
|
|
if($extgroupid && $extgroupid != $groupid) {
|
|
$extgroupidsnew .= "\t".$extgroupid;
|
|
}
|
|
}
|
|
if($_G['adminid'] > 0 && $group['radminid'] > 0) {
|
|
$newadminid = $_G['adminid'] < $group['radminid'] ? $_G['adminid'] : $group['radminid'];
|
|
} elseif($_G['adminid'] > 0) {
|
|
$newadminid = $_G['adminid'];
|
|
} else {
|
|
$newadminid = $group['radminid'];
|
|
}
|
|
|
|
C::t('common_member')->update($_G['uid'], array('groupid' => $groupid, 'adminid' => $newadminid, 'groupexpiry' => $groupexpirynew, 'extgroupids' => $extgroupidsnew));
|
|
showmessage('usergroups_switch_succeed', "home.php?mod=spacecp&ac=usergroup".($_GET['gid'] ? "&gid=$_GET[gid]" : '&do=list'), array('group' => $group['grouptitle']), array('showdialog' => 3, 'showmsg' => true, 'locationtime' => true));
|
|
}
|
|
|
|
} elseif($do == 'forum') {
|
|
|
|
if($_G['setting']['verify']['enabled']) {
|
|
$myverify= array();
|
|
getuserprofile('verify1');
|
|
for($i = 1; $i < 6; $i++) {
|
|
if($_G['member']['verify'.$i] == 1) {
|
|
$myverify[] = $i;
|
|
}
|
|
}
|
|
$ar = array(1, 2, 3, 4, 5);
|
|
}
|
|
$language = lang('forum/misc');
|
|
$permlang = $language;
|
|
loadcache('forums');
|
|
$fids = array_keys($_G['cache']['forums']);
|
|
$perms = array('viewperm', 'postperm', 'replyperm', 'getattachperm', 'postattachperm', 'postimageperm');
|
|
$defaultperm = array(
|
|
array('viewperm' => 1, 'postperm' => 0, 'replyperm' => 0, 'getattachperm' => 1, 'postattachperm' => 0, 'postimageperm' => 0),
|
|
array('viewperm' => 1, 'postperm' => 1, 'replyperm' => 1, 'getattachperm' => 1, 'postattachperm' => 1, 'postimageperm' => 1),
|
|
);
|
|
if($_G['setting']['verify']['enabled']) {
|
|
for($i = 1; $i < 6; $i++) {
|
|
if($_G['setting']['verify'][$i]['available']) {
|
|
$verifyicon[$i] = !empty($_G['setting']['verify'][$i]['icon']) ? '<img src="'.$_G['setting']['verify'][$i]['icon'].'" alt="'.$_G['setting']['verify'][$i]['title'].'" class="vm" title="'.$_G['setting']['verify'][$i]['title'].'" />' : $_G['setting']['verify'][$i]['title'];
|
|
}
|
|
}
|
|
}
|
|
$forumperm = $verifyperm = $myverifyperm = array();
|
|
$query = C::t('forum_forum')->fetch_all_info_by_fids($fids);
|
|
foreach($query as $forum) {
|
|
foreach($perms as $perm) {
|
|
if($forum[$perm]) {
|
|
if($_G['setting']['verify']['enabled']) {
|
|
for($i = 1; $i < 6; $i++) {
|
|
$verifyperm[$forum['fid']][$perm] .= preg_match("/(^|\t)(v".$i.")(\t|$)/", $forum[$perm]) ? $verifyicon[$i] : '';
|
|
if(in_array($i, $myverify)) {
|
|
$myverifyperm[$forum['fid']][$perm] = 1;
|
|
}
|
|
}
|
|
}
|
|
$forumperm[$forum['fid']][$perm] = preg_match("/(^|\t)(".$_G['groupid'].")(\t|$)/", $forum[$perm]) ? 1 : 0;
|
|
} else {
|
|
$forumperm[$forum['fid']][$perm] = $defaultperm[$_G['groupid'] != 7 ? 1 : 0][$perm];
|
|
}
|
|
}
|
|
}
|
|
|
|
} elseif($do == 'list' || $do == 'expiry') {
|
|
|
|
$memberfieldforum = C::t('common_member_field_forum')->fetch($_G['uid']);
|
|
$groupterms = dunserialize($memberfieldforum['groupterms']);
|
|
unset($memberfieldforum);
|
|
$expgrouparray = $expirylist = $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) {
|
|
$expgrouparray[] = $expgroupid;
|
|
}
|
|
}
|
|
|
|
if(!empty($groupterms['ext'])) {
|
|
foreach($groupterms['ext'] as $extgroupid => $time) {
|
|
$expirylist[$extgroupid] = array('time' => dgmdate($time, 'd'), 'type' => 'ext', 'noswitch' => $time < TIMESTAMP);
|
|
}
|
|
}
|
|
|
|
if(!empty($groupterms['main'])) {
|
|
$expirylist[$_G['groupid']] = array('time' => dgmdate($groupterms['main']['time'], 'd'), 'type' => 'main');
|
|
}
|
|
|
|
$groupids = array();
|
|
foreach($_G['cache']['usergroups'] as $groupid => $usergroup) {
|
|
if(!empty($usergroup['pubtype'])) {
|
|
$groupids[] = $groupid;
|
|
}
|
|
}
|
|
$expiryids = array_keys($expirylist);
|
|
if(!$expiryids && $_G['member']['groupexpiry']) {
|
|
C::t('common_member')->update($_G['uid'], array('groupexpiry' => 0));
|
|
}
|
|
$groupids = array_merge($extgroupids, $expiryids, $groupids);
|
|
$usermoney = $space['extcredits'.$_G['setting']['creditstrans']];
|
|
if($groupids) {
|
|
foreach(C::t('common_usergroup')->fetch_all($groupids) as $group) {
|
|
$isexp = in_array($group['groupid'], $expgrouparray);
|
|
if($_G['cache']['usergroups'][$group['groupid']]['pubtype'] == 'buy') {
|
|
list($dailyprice) = explode("\t", $group['system']);
|
|
$expirylist[$group['groupid']]['dailyprice'] = $dailyprice;
|
|
$expirylist[$group['groupid']]['usermaxdays'] = $dailyprice > 0 ? round($usermoney / $dailyprice) : 0;
|
|
} else {
|
|
$expirylist[$group['groupid']]['usermaxdays'] = 0;
|
|
}
|
|
$expirylist[$group['groupid']]['maingroup'] = $group['type'] != 'special' || $group['system'] == 'private' || $group['radminid'] > 0;
|
|
$expirylist[$group['groupid']]['grouptitle'] = $isexp ? '<s>'.$group['grouptitle'].'</s>' : $group['grouptitle'];
|
|
}
|
|
}
|
|
|
|
} else {
|
|
|
|
$language = lang('forum/misc');
|
|
require_once libfile('function/forumlist');
|
|
$permlang = $language;
|
|
unset($language);
|
|
$maingroup = $_G['group'];
|
|
$ptype = in_array($_GET['ptype'], array(0, 1, 2)) ? intval($_GET['ptype']) : 0;
|
|
foreach($_G['cache']['usergroups'] as $gid => $value) {
|
|
$cachekey[] = 'usergroup_'.$gid;
|
|
}
|
|
loadcache($cachekey);
|
|
$_G['group'] = $maingroup;
|
|
$sidegroup = $usergroups = $activegs = array();
|
|
$nextupgradeid = $nextexist = 0;
|
|
$memberfieldforum = C::t('common_member_field_forum')->fetch($_G['uid']);
|
|
$groupterms = dunserialize($memberfieldforum['groupterms']);
|
|
unset($memberfieldforum);
|
|
$switchmaingroup = $_G['group']['grouppublic'] || isset($groupterms['ext']) ? 1 : 0;
|
|
foreach($_G['cache']['usergroups'] as $gid => $group) {
|
|
$group['grouptitle'] = strip_tags($group['grouptitle']);
|
|
if($group['type'] == 'special') {
|
|
$type = $_G['cache']['usergroup_'.$gid]['radminid'] ? 'admin' : 'user';
|
|
} elseif($group['type'] == 'system') {
|
|
$type = $_G['cache']['usergroup_'.$gid]['radminid'] ? 'admin' : 'user';
|
|
} elseif($group['type'] == 'member') {
|
|
$type = 'upgrade';
|
|
}
|
|
if($nextupgradeid && $group['type'] == 'member') {
|
|
$_GET['gid'] = $gid;
|
|
$nextupgradeid = 0;
|
|
}
|
|
$g = '<a href="home.php?mod=spacecp&ac=usergroup&gid='.$gid.'"'.(!empty($_GET['gid']) && $_GET['gid'] == $gid ? ' class="xi1"' : '').'>'.$group['grouptitle'].'</a>';
|
|
if(in_array($gid, $extgroupids)) {
|
|
$usergroups['my'] .= $g;
|
|
}
|
|
$usergroups[$type] .= $g;
|
|
if(!empty($_GET['gid']) && $_GET['gid'] == $gid) {
|
|
$switchtype = $type;
|
|
if(!empty($_GET['gid'])) {
|
|
$activegs[$switchtype] = ' a';
|
|
}
|
|
$currentgrouptitle = $group['grouptitle'];
|
|
$sidegroup = $_G['cache']['usergroup_'.$gid];
|
|
if($_G['cache']['usergroup_'.$gid]['radminid']) {
|
|
$admingids[] = $gid;
|
|
}
|
|
} elseif(empty($_GET['gid']) && $_G['groupid'] == $gid && $group['type'] == 'member') {
|
|
$nextupgradeid = 1;
|
|
}
|
|
}
|
|
$usergroups['my'] = '<a href="home.php?mod=spacecp&ac=usergroup">'.$maingroup['grouptitle'].'</a>'.$usergroups['my'];
|
|
if($activegs == array()) {
|
|
$activegs['my'] = ' a';
|
|
}
|
|
|
|
$bperms = array('allowvisit','readaccess','allowinvisible','allowsearch','allowcstatus','disablepostctrl', 'allowsendpm', 'allowfriend', 'allowstatdata', 'allowmyop');
|
|
if($_G['setting']['portalstatus']) {
|
|
$bperms[] = 'allowpostarticle';
|
|
}
|
|
$pperms = array('allowpost','allowreply','allowpostpoll','allowvote','allowpostreward','allowpostactivity','allowpostdebate','allowposttrade','allowat', 'allowreplycredit', 'allowposttag', 'allowcreatecollection','maxsigsize','allowsigbbcode','allowsigimgcode','allowrecommend','raterange','allowcommentpost','allowmediacode');
|
|
$aperms = array('allowgetattach', 'allowgetimage', 'allowpostattach', 'allowpostimage', 'allowsetattachperm', 'maxattachsize', 'maxsizeperday', 'maxattachnum', 'attachextensions');
|
|
$sperms = array('allowpoke', 'allowclick', 'allowcomment', 'maxspacesize', 'maximagesize');
|
|
if(helper_access::check_module('blog')) {$sperms[] = 'allowblog';}
|
|
if(helper_access::check_module('album')) {$sperms[] = 'allowupload';}
|
|
if(helper_access::check_module('share')) {$sperms[] = 'allowshare';}
|
|
if(helper_access::check_module('doing')) {$sperms[] = 'allowdoing';}
|
|
$allperms = array();
|
|
$allkey = array_merge($bperms, $pperms, $aperms, $sperms);
|
|
if($sidegroup) {
|
|
foreach($allkey as $pkey) {
|
|
if(in_array($pkey, array('maxattachsize', 'maxsizeperday', 'maxspacesize', 'maximagesize'))) {
|
|
$sidegroup[$pkey] = $sidegroup[$pkey] ? sizecount($sidegroup[$pkey]) : 0;
|
|
}
|
|
$allperms[$pkey][$sidegroup['groupid']] = $sidegroup[$pkey];
|
|
}
|
|
}
|
|
|
|
foreach($maingroup as $pkey => $v) {
|
|
if(in_array($pkey, array('maxattachsize', 'maxsizeperday', 'maxspacesize', 'maximagesize'))) {
|
|
$maingroup[$pkey] = $maingroup[$pkey] ? sizecount($maingroup[$pkey]) : 0;
|
|
}
|
|
}
|
|
|
|
$publicgroup = array();
|
|
$extgroupids[] = $_G['groupid'];
|
|
foreach(C::t('common_usergroup')->fetch_all_switchable(array_unique($extgroupids)) as $group) {
|
|
$group['allowsetmain'] = in_array($group['groupid'], $extgroupids);
|
|
$publicgroup[$group['groupid']] = $group;
|
|
}
|
|
$group = $group[count($group)];
|
|
$_GET['perms'] = 'member';
|
|
if($sidegroup) {
|
|
$group = $sidegroup;
|
|
}
|
|
}
|
|
|
|
include_once template("home/spacecp_usergroup");
|
|
|
|
?>
|