www.gusucode.com > ShopEx481 & PHPWind 整合版码程序 > bbs/admin/updatecache.php

    <?php
!function_exists('adminmsg') && exit('Forbidden');
$basename="$admin_file?adminjob=updatecache";

if(empty($action)){
	include PrintEot('update');exit;
} elseif($_POST['action']=='cache'){
	updatecache();
	adminmsg('operate_success');
} elseif($_POST['action']=='topped'){
	require_once(R_P.'require/updateforum.php');
	updatetop();
	adminmsg('operate_success');
} elseif($_POST['action']=='bbsinfo'){
	@extract($db->get_one("SELECT COUNT(*) AS count FROM pw_members"));
	@extract($db->get_one("SELECT username FROM pw_members ORDER BY uid DESC LIMIT 1"));
	$db->update("UPDATE pw_bbsinfo SET newmember='".addslashes($username)."', totalmember='$count'  WHERE id='1'");
	adminmsg('operate_success');
} elseif($_POST['action']=='online'){
	$writeinto=str_pad("<?php die;?>",96)."\n";
	writeover(D_P.'data/bbscache/online.php',$writeinto);
	writeover(D_P.'data/bbscache/guest.php',$writeinto);
	writeover(D_P.'data/bbscache/olcache.php',"<?php\n\$userinbbs=0;\n\$guestinbbs=0;\n?>");
	adminmsg('operate_success');
} elseif($action=='member'){
	$_SERVER['REQUEST_METHOD']!='POST' && PostCheck($verify);
	InitGP(array('step','percount'));
	if(!$step){
		$db->update("UPDATE pw_memberdata SET postnum=0");
	    $step=1;
	}
	!$percount && $percount=300;
	$start=($step-1)*$percount;
	$next=$start+$percount;
	$step++;
	$j_url="$basename&action=$action&step=$step&percount=$percount";
	$goon=0;
	$query=$db->query("SELECT authorid,COUNT(*) as count FROM pw_threads GROUP BY authorid LIMIT $start,$percount");
	while($rt=$db->fetch_array($query)){
		$goon=1;
		$db->update("UPDATE pw_memberdata SET postnum=postnum+'$rt[count]' WHERE uid='$rt[authorid]'");
	}
	$ptable_a=array('pw_posts');
	if($db_plist){
		$p_list=explode(',',$db_plist);
		foreach($p_list as $val){
			$ptable_a[]='pw_posts'.$val;
		}
	}
	foreach($ptable_a as $val){
		$query=$db->query("SELECT authorid,COUNT(*) as count FROM $val GROUP BY authorid LIMIT $start,$percount");
		while($rt=$db->fetch_array($query)){
			$goon=1;
			$db->update("UPDATE pw_memberdata SET postnum=postnum+'$rt[count]' WHERE uid='$rt[authorid]'");
		}
	}
	$basename="$admin_file?adminjob=setuser";
	if($goon){
		adminmsg('updatecache_step',EncodeUrl($j_url));
	} else{
		adminmsg('operate_success');
	}
} elseif($action=='digest'){
	$_SERVER['REQUEST_METHOD']!='POST' && PostCheck($verify);
	InitGP(array('step','percount'));
	!$step && $step=1;
	!$percount && $percount=300;
	$start=($step-1)*$percount;
	$next=$start+$percount;
	$step++;
	$j_url="$basename&action=$action&step=$step&percount=$percount";
	$goon=0;
	$query=$db->query("SELECT authorid,COUNT(*) as count FROM pw_threads WHERE digest>0 AND ifcheck='1' GROUP BY authorid LIMIT $start,$percount");
	while($rt=$db->fetch_array($query)){
		$goon=1;
		$db->update("UPDATE pw_memberdata SET digests='$rt[count]' WHERE uid='$rt[authorid]'");
	}
	if($goon){
		adminmsg('updatecache_step',EncodeUrl($j_url));
	} else{
		adminmsg('operate_success');
	}
} elseif($action=='forum'){
	$_SERVER['REQUEST_METHOD']!='POST' && PostCheck($verify);
	InitGP(array('step','percount'));
	include_once(D_P.'data/bbscache/forum_cache.php');
	if(!$step){
		$db->update("UPDATE pw_forumdata SET topic=0,article=0,subtopic=0");
	    $step=1;
	}
	!$percount && $percount=30;
	$start=($step-1)*$percount;
	$next=$start+$percount;
	$step++;	
	$j_url="$basename&action=$action&step=$step&percount=$percount";
	$goon=0;
	$query=$db->query("SELECT fid,fup,type,allowhtm,cms FROM pw_forums LIMIT $start,$percount");
	while(@extract($db->fetch_array($query))){
		$goon=1;
		@extract($db->get_one("SELECT COUNT(*) AS topic,SUM( replies ) AS replies FROM pw_threads WHERE fid='$fid' AND ifcheck='1' AND topped<=3"));
		$article=$topic+$replies;
		if($type=='sub'){
			$db->update("UPDATE pw_forumdata SET article=article+'$article',subtopic=subtopic+'$topic' WHERE fid='$fup'");
			if($forum[$fup]['type']=='sub'){
				$fup=$forum[$fup]['fup'];
				$db->update("UPDATE pw_forumdata SET article=article+'$article',subtopic=subtopic+'$topic' WHERE fid='$fup'");
			}
		} elseif($type=='category'){
			$topic=$article=0;
		}
		$lt = $db->get_one("SELECT tid,author,postdate,lastpost,lastposter,subject FROM pw_threads WHERE fid='$fid' AND topped=0 AND ifcheck=1 ORDER BY lastpost DESC LIMIT 0,1");
		if($lt['tid']){
			$lt['subject'] = substrs($lt['subject'],21);
			if($lt['postdate']!=$lt['lastpost']){
				$lt['subject']='Re:'.$lt['subject'];
				$add='&page=e#a';
			}
			$toread=$cms ? '&toread=1' : '';
			$htmurl=$db_htmdir.'/'.$fid.'/'.date('ym',$lt['postdate']).'/'.$lt['tid'].'.html';
			$new_url=file_exists(R_P.$htmurl) && $allowhtm==1 && !$cms ? "$R_url/$htmurl" : "read.php?tid=$lt[tid]$toread$add";			$lastinfo=addslashes(Char_cv($lt['subject'])."\t".$lt['lastposter']."\t".$lt['lastpost']."\t".$new_url);
		} else{
			$lastinfo='';
		}
		$db->update("UPDATE pw_forumdata SET topic='$topic',article=article+'$article',lastpost='$lastinfo' WHERE fid='$fid'");
	}
	if($goon){
		adminmsg('updatecache_step',EncodeUrl($j_url));
	} else{
		adminmsg('operate_success');
	}
} elseif($action=='thread'){
	$_SERVER['REQUEST_METHOD']!='POST' && PostCheck($verify);
	InitGP(array('step','percount'));
	!$step && $step=1;
	!$percount &&$percount=300;
	$start=($step-1)*$percount;
	$next=$start+$percount;
	$step++;	
	$j_url="$basename&action=$action&step=$step&percount=$percount";
	$goon=0;
	$query=$db->query("SELECT tid,replies,ifcheck,ptable FROM pw_threads LIMIT $start,$percount");
	while($rt=$db->fetch_array($query)){
		$goon=1;
		if($rt['ifcheck']){
			$pw_posts = GetPtable($rt['ptable']);
			@extract($db->get_one("SELECT COUNT(*) AS replies FROM $pw_posts WHERE tid='$rt[tid]' AND ifcheck='1'"));
			if($rt['replies']!=$replies){
				$db->update("UPDATE pw_threads SET replies='$replies' WHERE tid='$rt[tid]'");
			}
		}
	}
	if($goon){
		adminmsg('updatecache_step',EncodeUrl($j_url));
	} else{
		adminmsg('operate_success');
	}
} elseif($action=='group'){
	$_SERVER['REQUEST_METHOD']!='POST' && PostCheck($verify);
	InitGP(array('step','percount'));
	!$step && $step=1;
	!$percount && $percount=300;
	$start=($step-1)*$percount;
	$next=$start+$percount;
	$step++;	
	$j_url="$basename&action=$action&step=$step&percount=$percount";
	$goon=0;
	$query=$db->query("SELECT uid,postnum,digests,rvrc,money,credit,onlinetime FROM pw_memberdata LIMIT $start,$percount");
	while(@extract($db->fetch_array($query))){
		$goon=1;
		$usercredit=array(
			'postnum'	=> $postnum,
			'digests'	=> $digests,
			'rvrc'		=> $rvrc,
			'money'		=> $money,
			'credit'	=> $credit,
			'onlinetime'=> $onlinetime,
		);
		$upgradeset = unserialize($db_upgrade);
		foreach($upgradeset as $key=>$val){
			if(is_numeric($key)){
				require_once(R_P.'require/credit.php');
				foreach(GetCredit($uid) as $key=>$value){
					$usercredit[$key] = $value[1];
				}
				break;
			}
		}
		$memberid = getmemberid(CalculateCredit($usercredit,$upgradeset));
		$db->update("UPDATE pw_members SET memberid='$memberid' WHERE uid='$uid'");
	}
	if($goon){
		adminmsg('updatecache_step',EncodeUrl($j_url));
	} else{
		adminmsg('operate_success');
	}
} elseif($_POST['action']=='usergroup'){
	/*
	* 更新系统组成员头衔
	*/
	$query = $db->query("SELECT forumadmin FROM pw_forums WHERE forumadmin!=''");
	while ($forum = $db->fetch_array($query)) {
		if ($forum['forumadmin']) {
			$adminarray=explode(",",$forum['forumadmin']);
			foreach ($adminarray as $value) {
				if ($value) {
					$member = $db->get_one("SELECT username,groupid FROM pw_members WHERE username='".addslashes($value)."'");
					if ($member['groupid']=='-1') {
						$db->update("UPDATE pw_members SET groupid='5' WHERE username='".addslashes($value)."'");
					}
				}
			}
		}
	}
	$gids  = array();
	$glist = '-99';
	$query = $db->query("SELECT gid FROM pw_usergroups WHERE gptype='system' OR gptype='special'");
	while (@extract($db->fetch_array($query))) {
		$gids[] = $gid;
		$glist .= ','.$gid;
	}
	$query = $db->query("SELECT uid,username,groupid,groups FROM pw_members WHERE groupid<>'-1'");
	while (@extract($db->fetch_array($query))) {
		$username = addslashes($username);
		if (!in_array($groupid,$gids)) {
			$db->update("UPDATE pw_members SET groupid='-1' WHERE uid='$uid'");
			if ($groups=='') {
				admincheck($uid,$username,$groupid,$groups,'delete');
			}
		} else {
			admincheck($uid,$username,$groupid,$groups,'update');
		}
	}
	$db->update("DELETE FROM pw_administrators WHERE groupid NOT IN($glist) AND groups=''");

	adminmsg('operate_success');
}

function getmemberid($nums){
	global $lneed;
	arsort($lneed);
	reset($lneed);
	foreach($lneed as $key=>$lowneed){
		$gid=$key;
		if($nums>=$lowneed){
			break;
		}
	}
	return $gid;
}
function CalculateCredit($creditdb,$upgradeset){
	$credit=0;
	foreach($upgradeset as $key=>$val){
		if($creditdb[$key] && $val){
			if($key == 'rvrc'){
				$creditdb[$key] /= 10;
			}elseif($key == 'onlinetime'){
				$creditdb[$key] /= 3600;
			}
			$credit += $creditdb[$key]*$val;
		}
	}
	return (int)$credit;
}
?>