Index: usermanage.php
===================================================================
--- usermanage.php	(revision 0)
+++ usermanage.php	(revision 29)
@@ -0,0 +1,982 @@
+<?php
+!function_exists('adminmsg') && exit('Forbidden');
+empty($adminitem) && $adminitem = 'edit';
+$jobUrl = "$admin_file?adminjob=usermanage";
+$basename = "$admin_file?adminjob=usermanage&adminitem=$adminitem";
+
+if ($adminitem == 'edit') {
+	if ($action == 'search') {
+		S::gp(array('groupid','schname','schuid','schname_s','schemail','userip','regdate','schlastvisit','orderway','asc','lines','page','yz'));
+		S::gp(array('vaguename','vagueemail'));
+		if (!$groups && !$schname && !$schuid && !$schemail && !$groupid && !$userip && $regdate=='all' && $schlastvisit=='all') {
+			adminmsg('noenough_condition');
+		}
+		$sql     = is_numeric($groupid) ? "m.groupid=".S::sqlEscape($groupid) : 1;
+		$order   = '';
+		$schname = trim($schname);
+		if ($schname!='') {
+			if (strpos($schname,'*') !== false) {
+				$t_schname = addslashes(str_replace('*','%',$schname));
+				$sql .= " AND (m.username LIKE ".S::sqlEscape($t_schname).')';
+			} else {
+				$schname = addslashes($schname);
+				$sql .= " AND m.username = ".S::sqlEscape($schname);
+			}
+		}
+		if ($schuid!='') {
+			if (strpos($schuid,'*') !== false) {
+				$t_schuid = addslashes(str_replace('*','%',$schuid));
+				$sql .= " ";
+			} else {
+				$schuid = addslashes($schuid);
+				$sql .= " AND m.uid = ".S::sqlEscape($schuid);
+			}
+		}
+		
+		if ($schemail!='') {
+			if (strpos($schemail,'*') !== false) {
+				$t_schemail = str_replace('*','%',$schemail);
+				$sql .= " AND (m.email LIKE ".S::sqlEscape($t_schemail).")";
+			}else{
+				$schemail = addslashes($schemail);
+				$sql .= " AND m.email = ".S::sqlEscape($schemail);
+			}
+		}
+		if ($userip!='') {
+			$userip = str_replace('*','%',$userip);
+			$sql .= " AND (md.onlineip LIKE ".S::sqlEscape("$userip%").")";
+		}
+		if ($regdate!='all' && is_numeric($regdate)) {
+			$schtime = $timestamp-$regdate;
+			$sql .= " AND m.regdate<".S::sqlEscape($schtime);
+		}
+		if ($schlastvisit!='all' && is_numeric($schlastvisit)) {
+			$schtime = $timestamp-$schlastvisit;
+			$sql .= " AND md.thisvisit<".S::sqlEscape($schtime);
+		}
+		if ($orderway) {
+			switch ($orderway) {
+				case 'username' : $orderway = 'm.username'; break;//用户名
+				case 'regdate' : $orderway = 'm.regdate'; break;//注册时间
+				case 'lastpost' : $orderway = 'md.lastpost'; break;//最后发表
+				case 'lastvisit' : $orderway = 'md.lastvisit'; break;//最后登录
+				case 'postnum' : $orderway = 'md.postnum'; break;// 发帖
+				default: $orderway = S::sqlEscape($orderway); break;
+			}
+			$order = "ORDER BY " . $orderway;
+			$asc=='DESC' && $order .= " $asc";
+		}
+		$rs = $db->get_one("SELECT COUNT(*) AS count FROM pw_members m LEFT JOIN pw_memberdata md ON md.uid=m.uid WHERE $sql");
+		$count = $rs['count'];
+	
+		!is_numeric($lines) && $lines=100;
+		(!is_numeric($page) || $page < 1) && $page=1;
+		$numofpage = ceil($count/$lines);
+		if ($numofpage && $page>$numofpage) {
+			$page = $numofpage;
+		}
+		$pages = numofpage($count,$page,$numofpage, "$admin_file?adminjob=usermanage&action=$action&schname=".rawurlencode($schname)."&groupid=$groupid&schuid=$schuid&schemail=$schemail&regdate=$regdate&schlastvisit=$schlastvisit&orderway=$orderway&lines=$lines&asc=$asc&");
+		$start = ($page-1)*$lines;
+		$limit = S::sqlLimit($start,$lines);
+		$groupselect = "<option value='-1'>".getLangInfo('all','reg_member')."</option>";
+		$query = $db->query("SELECT gid,gptype,grouptitle FROM pw_usergroups WHERE gid>2 AND gptype<>'member' ORDER BY gid");
+		while ($group = $db->fetch_array($query)) {
+			$gid = $group['gid'];
+			$groupselect .= "<option value='$gid'>$group[grouptitle]</option>";
+		}
+		$schdb = array();
+		$query = $db->query("SELECT m.uid,m.username,m.email,m.groupid,m.memberid,m.regdate,m.yz,md.lastvisit,md.postnum,md.onlineip FROM pw_members m LEFT JOIN pw_memberdata md ON md.uid=m.uid WHERE $sql $order $limit");
+		while ($sch = $db->fetch_array($query)) {
+			$sch['regdate'] = get_date($sch['regdate']);
+			$sch['lastvisit'] = get_date($sch['lastvisit']);
+			strpos($sch['onlineip'],'|') && $sch['onlineip']=substr($sch['onlineip'],0,strpos($sch['onlineip'],'|'));
+			if ($sch['groupid']=='-1') {
+				$sch['groupselect'] = str_replace("<option value='-1'>".getLangInfo('all','reg_member')."</option>","<option value='-1' selected>".getLangInfo('all','reg_member')."</option>",$groupselect);
+			} else {
+				$sch['groupselect'] = str_replace("<option value='$sch[groupid]'>".$ltitle[$sch['groupid']]."</option>","<option value='$sch[groupid]' selected>".$ltitle[$sch['groupid']]."</option>",$groupselect);
+			}
+			$schdb[] = $sch;
+		}
+		if (empty($schdb) && $schname){
+			$errorname = $schname;
+			Showmsg('user_not_exists');
+		}
+		include PrintEot('usermanage');exit;
+	} elseif ($action == 'edit') {
+		S::gp(array('uid'),'GP',2);
+		$temUid = $uid;
+		//* include_once pwCache::getPath(D_P.'data/bbscache/customfield.php');
+		pwCache::getData(D_P.'data/bbscache/customfield.php');
+		require_once(R_P.'require/showimg.php');
+		if (empty($_POST['step'])) {
+			$userService = L::loadClass('UserService', 'user'); /* @var $userService PW_UserService */
+			@extract($userService->get($uid, true, true, true));
+			$messageServer = L::loadClass('message', 'message');
+			$config = $messageServer->getMsConfigs($uid);
+			$banpm = implode(',',unserialize($config['blacklist']));
+			$messageServer = L::loadClass('message', 'message');
+			$messageServer->grabMessage($uid,array(($groupid == '-1') ? $memberid : $groupid ),max($lastgrab,$regdate));
+			$rvrc = floor($rvrc/10);
+			if (strpos($onlineip,'|')) {
+				$onlineip = substr($onlineip,0,strpos($onlineip,'|'));
+			}
+			$onlinetime = floor($onlinetime / 3600);
+			$regdate = get_date($regdate);
+			$lastvisit = get_date($lastvisit);
+			$ifpublicmail = getstatus($userstatus, PW_USERSTATUS_PUBLICMAIL) ? 'checked' : '';
+			getstatus($userstatus, PW_USERSTATUS_RECEIVEMAIL) ? $email_open = 'checked' : $email_close = 'checked';
+			$sexselect[$gender] = 'selected';
+			$selected[$groupid] = 'selected';
+			$getbirthday = explode("-",$bday);
+			$yearslect[(int)$getbirthday[0]]="selected";
+	        $monthslect[(int)$getbirthday[1]]="selected";
+			$dayslect[(int)$getbirthday[2]]="selected";
+	
+			$groups = explode(',',$groups);
+			foreach ($groups as $key => $value) {
+				${'check_'.$value} = 'checked';
+			}
+			$usergroup = "<ul class=\"list_A list_160\">";
+			$groupselect = "<option value='-1' $selected[member]>".getLangInfo('all','reg_member')."</option>";
+	
+			$query = $db->query("SELECT gid,gptype,grouptitle FROM pw_usergroups WHERE gid>2 AND gptype<>'member' ORDER BY gid");
+			while ($rt = $db->fetch_array($query)) {
+				$gid = $rt['gid'];
+				$groupselect.="<option value='$gid' $selected[$gid]>$rt[grouptitle]</option>";
+	
+				if ($rt['gid'] != $groupid) {
+					$num++;
+					$htm_tr=$num%3==0 ? '' : '';
+					$ifchecked=${'check_'.$rt['gid']};
+					$usergroup.="<li><input type='checkbox' name='groups[]' value='$rt[gid]' $ifchecked>$rt[grouptitle]</li>$htm_tr";
+				}
+			}
+			$usergroup.="</ul>";
+	
+			list($iconurl,$icontype,$iconwidth,$iconheight,$iconfile,$iconpig) = showfacedesign($icon,true,'m');
+			$iconsize = $httpurl = '';
+			$disabled = 'disabled';
+			$width2 = $width3 = $iconwidth;
+			$height2 = $height3 = $iconheight;
+			$iconsize = $iconwidth ? " width=\"$iconwidth\"" : " width=\"75\"";
+			$iconsize .= $iconheight ? " height=\"$iconheight\"" : " height=\"100\"";
+			if ($icontype == 2) {
+				$httpurl = $iconurl;
+				$width3 = $height3 = '';
+			} elseif ($icontype == 3) {
+				$width2 = $height2 = $disabled = '';
+			}
+			$ifselected = false;
+			$fp = opendir($imgdir.'/face/');
+			while ($facefile = readdir($fp)) {
+				if (preg_match('/\.(gif|png|jpg|jepg)$/i',$facefile)) {
+					if ($facefile==$iconfile) {
+						$ifselected = true;
+						$faces .= "<option value=\"$facefile\" selected>$facefile</option>";
+					} else {
+						$fselected = (!$ifselected && $facefile=='none.gif') ? 'selected' : '';
+						$faces .= "<option value=\"$facefile\" $fselected>$facefile</option>";
+					}
+				}
+			}
+			closedir($fp);
+			$mdcredit = $credit;
+			//custom credits
+			if ($_CREDITDB) {
+				require_once(R_P.'require/credit.php');
+				$custom_credits = $credit->get($uid,'CUSTOM');
+			}
+			$customerService = L::loadClass('CustomerFieldService','user');
+			$customerTemplate = $customerService->getAdminTemplate($uid);
+			include PrintEot('usermanage');exit;
+	
+		} elseif ($_POST['step'] == 2) {
+	
+			S::gp(array('groupid','groups','username','password','check_pwd','email','publicmail','receivemail','regdate','yz','userip','facetype','proicon','delupload','postnum','rvrc','money','deposit','ddeposit','credit','currency','onlinetime','site','location','oicq','icq','msn','aliww','yahoo','honor','gender','year','month','day','signature','introduce','banpm','question','customquest','answer','creditdb'),'P');
+			$basename .= "&action=edit&uid=$uid";
+			$upmembers = $uc_edit = array();
+	
+			$userService = L::loadClass('UserService', 'user'); /* @var $userService PW_UserService */
+			$oldinfo = $userService->get($uid);
+			if ($password != '') {
+				$password != $check_pwd && adminmsg('password_confirm');
+				$upmembers['password'] = md5($password);
+				$uc_edit['password'] = md5($password);
+			}
+			if ($email && $email != $oldinfo['email']) {
+				$uc_edit['email'] = $email;
+			}
+			if ($question != '-2') {
+				$upmembers['safecv'] = questcode($question,$customquest,$answer);
+			}
+			$newgroups = $groups ? ','.implode(',',$groups).',' : '';
+			$newgroups = str_replace(','.$groupid.',',',',$newgroups);
+			if (($oldinfo['groupid'] == '3' || strpos($oldinfo['groups'],',3,') !== false) && !If_manager) {
+				adminmsg('manager_right');
+			} elseif ($oldinfo['groupid'] != '3' && ($groupid == '3' || strpos($newgroups,',3,') !== false) && !If_manager) {
+				adminmsg('manager_right');
+			}
+			if (ifadmin($oldinfo['username']) && $groupid != '5' && strpos($newgroups,',5,') === false) {
+				if (strpos($oldinfo['groups'],',5,') !== false) {
+					adminmsg('setuser_forumadmin');
+				} else {
+					$newgroups .= $newgroups ? '5,' : ',5,';
+				}
+			} elseif (!ifadmin($oldinfo['username']) && ($groupid == '5' || strpos($newgroups,',5,') !== false)) {
+				adminmsg('setuser_forumadmin');
+			}
+			$newgroups == ',' && $newgroups = '';
+			if ($groupid <> '-1' || $newgroups) {
+				admincheck($uid,$username,$groupid,$newgroups,'update');
+			} elseif ($oldinfo['groupid'] <> '-1' || $oldinfo['groups']) {
+				admincheck($uid,$username,$groupid,$newgroups,'delete');
+			}
+			$newgroups != $oldinfo['groups'] && $upmembers['groups'] = $newgroups;
+	
+			/*
+			list($iconurl,$icontype,$iconwidth,$iconheight,$iconfile,$iconpig,$ifhavasmallicon) = showfacedesign(addslashes($oldinfo['icon']),true);
+			if ($facetype == 2) {
+				if (substr($_POST['i_http'],0,4) != 'http' || strrpos($_POST['i_http'],'|') !== false) {
+					adminmsg('illegal_customimg');
+				}
+				$icontype == 3 && DelIcon($iconfile);
+				$i_w = (int)$_POST['i_w'];
+				$i_h = (int)$_POST['i_h'];
+				$iconfile = $_POST['i_http'];
+				list($iconwidth,$iconheight) = getfacelen($i_w,$i_h);
+			} elseif ($facetype == 3 && $delupload) {
+				DelIcon($delupload);
+				$facetype = $icontype = 1;
+				$proicon = 'none.gif';
+			}
+			$facetype != 1 && $facetype != 2 && $facetype != 3 && $facetype = $icontype;
+			if ($facetype == 1) {
+				if ($icontype != 1) {
+					$icontype == 3 && DelIcon($iconfile);
+					if (!file_exists("$imgdir/face/$proicon")) {
+						$proicon = 'none.gif';
+					}
+				}
+				if (!empty($proicon)) {
+					if (strlen($proicon)>20 || !preg_match('/^[0-9A-Za-z]+\.[A-Za-z]{2,5}$/',$proicon)) {
+						adminmsg('undefined_action');
+					}
+					$iconfile = $proicon;
+				}
+				$iconwidth = $iconheight = 0;
+			}
+			$iconwidth < 1 && $iconwidth = '';
+			$iconheight < 1 && $iconheight = '';
+			$icon = "$iconfile|$facetype|$iconwidth|$iconheight";
+			if ($iconpig) {
+				$icon .= "|$iconpig";
+			} else {
+				$icon .= "|";
+			}
+			if ($facetype == 3 && $ifhavasmallicon == 1) {
+				$icon .= "|1";
+			}
+			strlen($icon)>100 && adminmsg('illegal_customimg');
+			pwFtpClose($ftp);
+			*/
+			$user_a = explode('|',$oldinfo['icon']);
+			$usericon = '';
+			if ($facetype == 3 && $delupload) {
+				$facetype = 1;
+				$proicon = 'none.gif';
+			}
+			if ($facetype == 1) {
+				$usericon = setIcon($proicon, $facetype, $user_a);
+			} elseif ($facetype == 2) {
+				$httpurl = $_POST['httpurl'];
+				if (strncmp($httpurl[0],'http',4) != 0 || strrpos($httpurl[0],'|') !== false) {
+					Showmsg('illegal_customimg');
+				}
+				$proicon = $httpurl[0];
+				$httpurl[1] = '';
+				$httpurl[2] = '';
+				$httpurl[3] = (int)$httpurl[3];
+				$httpurl[4] = (int)$httpurl[4];
+				list($user_a[2], $user_a[3]) = flexlen($httpurl[1], $httpurl[2], $httpurl[3], $httpurl[4]);
+				$usericon = setIcon($proicon, $facetype, $user_a);
+				unset($httpurl);
+			}
+			pwFtpClose($ftp);
+			$usericon && $upmembers['icon'] = $usericon;
+	
+			$bday = $year."-".$month."-".$day;
+			//$rvrc*=10;
+			$regdate = PwStrtoTime($regdate);
+	
+			if ($oldinfo['username'] != stripcslashes($username)) {
+				if (!$username) {
+					Showmsg('username_empty');
+				}
+				if (strlen($username) > 15) {
+					adminmsg('用户名长度不能大于15个字符');
+				}
+				$userService = L::loadClass('UserService', 'user'); /* @var $userService PW_UserService */
+				$isUsernameExist = $userService->getUserIdByUserName($username);
+				if ($isUsernameExist > 0) {
+					adminmsg('username_exists');
+				}
+				$uc_edit['username'] = $username;
+			}
+			if ($uc_edit) {
+				$ucuser = L::loadClass('Ucuser', 'user');
+				list($ucstatus, $errmsg) = $ucuser->edit($uid, $oldinfo['username'], $uc_edit);
+				if ($ucstatus < 0) {
+					Showmsg($errmsg);
+				}
+			}
+			
+			$userService = L::loadClass('UserService', 'user'); /* @var $userService PW_UserService */
+			$userinfo = $userService->get($uid);
+			
+			$userService->setUserStatus($uid, PW_USERSTATUS_PUBLICMAIL, $publicmail);
+			$userService->setUserStatus($uid, PW_USERSTATUS_RECEIVEMAIL, $receivemail);
+	
+			require_once(R_P.'require/bbscode.php');
+			$cksign = convert($signature,$db_windpic,2);
+			$signstatus = $cksign != $signature ? 1 : 0;
+	
+			if ($signstatus != getstatus($userstatus, PW_USERSTATUS_SIGNCHANGE)) {
+				$userService->setUserStatus($uid, PW_USERSTATUS_SIGNCHANGE, $signstatus);
+			}
+			
+			if ($groupid == 6) {
+				/**
+				$db->update("REPLACE INTO pw_banuser"
+					. " SET " .S::sqlSingle(array(
+						'uid'		=> $uid,
+						'fid'		=> 0,
+						'type'		=> 2,
+						'startdate'	=> $timestamp,
+						'days'		=> 0,
+						'admin'		=> $admin_name,
+						'reason'	=> ''
+				),false));
+				**/
+				pwQuery::replace('pw_banuser', array(
+						'uid'		=> $uid,
+						'fid'		=> 0,
+						'type'		=> 2,
+						'startdate'	=> $timestamp,
+						'days'		=> 0,
+						'admin'		=> $admin_name,
+						'reason'	=> ''			
+				));
+			}
+			
+			/**
+			if ($groupid == 6 || $groupid != $oldinfo['groupid']) {
+				$_cache = getDatastore();
+				$_cache->delete('UID_'.$uid);
+			}
+			**/
+	
+			$mainFields = array_merge($upmembers, array(
+				'username'		=> $username,
+				'gender'		=> $gender,
+				'email'			=> $email,
+				'regdate'		=> $regdate,
+				'groupid'		=> $groupid,
+				'site'			=> $site,
+				'oicq'			=> $oicq,
+				'aliww'			=> $aliww,
+				'icq'			=> $icq,
+				'msn'			=> $msn,
+				'yahoo'			=> $yahoo,
+				'location'		=> $location,
+				'bday'			=> $bday,
+				'honor'			=> $honor,
+				'yz'			=> $yz,
+				'signature'		=> $signature,
+				'introduce'		=> $introduce
+			));
+			
+			$memberDataFields = array(
+				//'rvrc'		=> $rvrc,
+				//'money'		=> $money,
+				//'credit'	=> $credit,
+				//'currency'	=> $currency,
+				'postnum'	=> $postnum,
+				'onlinetime'=> $onlinetime * 3600,
+				'onlineip'	=> $userip
+			);
+	
+			$userService->update($uid, $mainFields, $memberDataFields);
+	
+			$setCredit = array(
+				'rvrc'		=> $rvrc,
+				'money'		=> $money,
+				'credit'	=> $credit,
+				'currency'	=> $currency
+			);
+			if ($_CREDITDB && !empty($creditdb)) {
+				foreach ($creditdb as $key => $value) {
+					if (is_numeric($key) && is_numeric($value)) {
+						$setCredit[$key] = $value;
+					}
+				}
+			}
+			require_once(R_P.'require/credit.php');
+			$credit->runsql(array($uid => $setCredit), false);
+			
+			$userService = L::loadClass('UserService', 'user'); /* @var $userService PW_UserService */
+			$mi = $userService->get($uid, false, false, true);
+			if (!$mi) {
+				if ($deposit || $ddeposit) {
+					$userService->update($uid, array(), array(), array('deposit'=>$deposit,'ddeposit'=>$ddeposit));
+				}
+			} elseif ($deposit != $mi['deposit'] || $ddeposit != $mi['ddeposit']) {
+				$userService->update($uid, array(), array(), array('deposit'=>$deposit,'ddeposit'=>$ddeposit));
+			}
+			if ($customfield) {
+				$customfieldService = L::loadClass('CustomerFieldService','user');
+				$customfieldService->saveAdminCustomerData($uid);
+			}
+			$messageServer = L::loadClass('message', 'message'); 
+			$blacklist = array_unique(explode(',',$banpm));			
+			$messageServer->setMsConfig(array('blacklist'=>serialize($blacklist)),$uid);
+
+			/* phpwind数据统计 */
+			if ($gender != $oldinfo['gender'] || $bday != $oldinfo['bday']) {
+				$statistics = L::loadClass('Statistics', 'datanalyse');
+				$statistics->alertSexDistribution($oldinfo['gender'], $gender);
+				$statistics->alertAgeDistribution(intval($oldinfo['bday']), intval($bday));
+			}
+
+			adminmsg('operate_success');
+		}
+	} elseif ($action == 'editgroup'){
+		S::gp(array('gid'),'P');
+		if (!$gid) adminmsg('operate_error');
+		$_cache = getDatastore();
+		$messageServer = L::loadClass('message', 'message');
+		foreach ($gid as $uid => $groupid) {
+			if ($uid) {
+				$userService = L::loadClass('UserService', 'user'); /* @var $userService PW_UserService */
+				$rt = $userService->get($uid,true,true);
+				if ($rt['groupid'] == 7 && $groupid != 7) $userService->update($uid, array('yz' => 1));
+				$messageServer->grabMessage($uid,array(($rt['groupid'] == '-1') ? $rt['memberid'] : $rt['groupid'] ),max($rt['lastgrab'],$rt['regdate']));
+				if ($rt['groupid']==3 && $groupid!=3 && !If_manager) {
+					adminmsg('manager_right');
+				} elseif ($rt['groupid']!=3 && $groupid==3 && !If_manager) {
+					adminmsg('manager_right');
+				} elseif ($rt['groupid']==5 && $groupid==-1 || $rt['groupid']!=5 && $groupid==5) {
+					adminmsg('setuser_forumadmin');
+				}
+				
+				$groups = $rt['groups'];
+				if ($groups && strpos($groups,','.$groupid.',')!==false) {
+					$groups = str_replace(','.$groupid.',',',',$groups);
+					$groups == ',' && $groups = '';
+				}
+				$userService->update($uid, array('groupid'=>$groupid, 'groups'=>$groups));
+				if ($groupid == 6) {
+					/**
+					$db->update("REPLACE INTO pw_banuser"
+						. " SET " .S::sqlSingle(array(
+							'uid'		=> $uid,
+							'fid'		=> 0,
+							'type'		=> 2,
+							'startdate'	=> $timestamp,
+							'days'		=> 0,
+							'admin'		=> $admin_name,
+							'reason'	=> ''
+					),false));
+					**/
+					pwQuery::replace('pw_banuser', array(
+							'uid'		=> $uid,
+							'fid'		=> 0,
+							'type'		=> 2,
+							'startdate'	=> $timestamp,
+							'days'		=> 0,
+							'admin'		=> $admin_name,
+							'reason'	=> ''				
+					));
+				}
+				$_cache->delete('UID_'.$uid);
+	
+				if ($groupid <> '-1' || $groups) {
+					admincheck($uid,$rt['username'],$groupid,$groups,'update');
+				} elseif ($rt['groupid'] <> '-1' || $rt['groups']) {
+					admincheck($uid,$rt['username'],$groupid,$groups,'delete');
+				}
+			}
+		}
+		adminmsg('operate_success');
+	} else {
+		initGroupOptions();
+		include PrintEot('usermanage');exit;
+	}
+} elseif ($adminitem == 'delete') {
+	if ($action == 'del') {
+		S::gp(array('groupid','schname','schuid','schemail','postnum','onlinetime','userip','regdate','schlastvisit','orderway','asc','lines','item'));
+		S::gp(array('page','skipcheck'),'GP',2);
+		if (empty($_POST['step'])) {
+
+			if (!$skipcheck && !$schname && !$schuid && !$schemail && !$groupid && $regdate=='all' && $schlastvisit='all') {
+				adminmsg('noenough_condition');
+			}
+			is_array($item) && $item = array_sum($item);
+			for($i=0; $i<4; $i++){
+				${'check_'.$i} = ($item & pow(2,$i)) ? 'checked' : '';
+			}
+			if ($groupid != '-1' || !$groupid) {
+				if ($groupid) {
+					if ($groupid == '3' && !If_manager) {
+						adminmsg('manager_right');
+					} elseif (($groupid == '4' || $groupid == '5') && $admin_gid != 3) {
+						adminmsg('admin_right');
+					}
+					$sql = "m.groupid=".S::sqlEscape($groupid);
+				} else {
+					$sql = '1';
+				}
+			} else {
+				$sql = "m.groupid='-1'";
+			}
+			if ($schname != '') {
+				$schname = str_replace('*','%',$schname);
+				$sql .= " AND (m.username LIKE ".S::sqlEscape($schname).")";
+			}
+			if ($schuid!='') {
+				$schuid = intval($schuid);
+				$sql .= " AND m.uid = ".S::sqlEscape($schuid);
+			}
+		
+			if ($schemail != '') {
+				$schemail = str_replace('*','%',$schemail);
+				$sql .= " AND (m.email LIKE ".S::sqlEscape($schemail).")";
+			}
+			if ($postnum) {
+				$sql .= " AND md.postnum<".S::sqlEscape($postnum);
+			}
+			if ($onlinetime) {
+				$sql .= " AND md.onlinetime<".S::sqlEscape($onlinetime);
+			}
+			if ($userip) {
+				$userip = str_replace('*','%',$userip);
+				$sql .= " AND (md.onlineip LIKE ".S::sqlEscape("$userip%").")";
+			}
+			if ($regdate != 'all') {
+				$schtime = $timestamp-$regdate;
+				$sql .= " AND m.regdate<".S::sqlEscape($schtime);
+			}
+			if ($schlastvisit != 'all') {
+				$schtime = $timestamp - $schlastvisit;
+				$sql .= " AND md.thisvisit<".S::sqlEscape($schtime);
+			}
+			$order = '';
+			if ($orderway) {
+				switch ($orderway) {
+					//case 'username' : $orderway = 'm.username'; break;//用户名
+					case 'regdate' : $orderway = 'm.regdate'; break;//注册时间
+					//case 'lastpost' : $orderway = 'md.lastpost'; break;//最后发表
+					case 'lastvisit' : $orderway = 'md.lastvisit'; break;//最后登录
+					case 'postnum' : $orderway = 'md.postnum'; break;// 发帖
+					default: $orderway = $orderway; break;
+				}
+				$order = "ORDER BY " .$orderway;
+				$asc=='DESC' && $order .= " $asc";
+			}
+			
+			$rs = $db->get_one("SELECT COUNT(*) AS count FROM pw_members m LEFT JOIN pw_memberdata md ON md.uid=m.uid WHERE $sql");
+			$count = $rs['count'];
+			if (!is_numeric($lines)) $lines = 100;
+			$page < 1 && $page = 1;
+			$numofpage = ceil($count/$lines);
+			if ($numofpage && $page > $numofpage) {
+				$page = $numofpage;
+			}
+			$pages = pagerforjs($count,$page,$numofpage, "onclick=\"manageclass.superdel(this,'superdel_member','')\"");
+			$start = ($page-1)*$lines;
+			$limit = "LIMIT $start,$lines";
+			$delid = $schdb = array();
+			$query = $db->query("SELECT m.uid,m.username,m.email,m.groupid,m.regdate,md.lastvisit,md.postnum,md.onlineip FROM pw_members m LEFT JOIN pw_memberdata md ON md.uid=m.uid WHERE $sql $order $limit");
+			while ($sch = $db->fetch_array($query)) {
+				if ($_POST['direct']) {
+					$delid[] = $sch['uid'];
+				} else {
+					strpos($sch['onlineip'],'|') && $sch['onlineip'] = substr($sch['onlineip'], 0, strpos($sch['onlineip'],'|'));
+					if ($sch['groupid'] == '-1') {
+						$sch['group'] = getLangInfo('all','reg_member');
+					} else {
+						$sch['group'] = $ltitle[$sch['groupid']];
+					}
+					$sch['regdate']   = get_date($sch['regdate']);
+					$sch['lastvisit'] = get_date($sch['lastvisit']);
+					$schdb[] = $sch;
+				}
+			}
+			if (!$_POST['direct']) {
+				include PrintEot('usermanage');exit;
+			}
+		}
+		if ($_POST['step'] == 2 || $_POST['direct']) {
+			@set_time_limit(300);
+			S::gp(array('item'),'P');
+			$item = array_sum($item);
+			!$item && adminmsg('operate_error');
+			if (!$_POST['direct']) {
+				S::gp(array('delid'),'P');
+			}
+			!$delid && adminmsg('operate_error');
+			$userIds = $delid;
+			$delids = S::sqlImplode($delid);
+
+			$userService = L::loadClass('UserService', 'user'); /* @var $userService PW_UserService */
+			$userInfos = $userService->getByUserIds($userIds);
+			foreach($userInfos as $v) {
+				if ($v['groupid'] == '3' && !If_manager) {
+					adminmsg('manager_right');
+				} elseif (($v['groupid'] == '4' || $v['groupid'] == '5') && $admin_gid != 3) {
+					adminmsg('admin_right');
+				}
+			}
+			if ($item & 1) {
+				$ucuser = L::loadClass('Ucuser', 'user'); /* @var $ucuser PW_Ucuser */
+				$ucuser->delete($delid);
+				
+				#TO DO群组
+				foreach($userIds as $userId){
+					$colonyid =  $db->get_value("SELECT colonyid FROM pw_cmembers WHERE uid=".S::sqlEscape($userId));
+					$colonyMembers =  $db->get_value("SELECT count(id) FROM pw_cmembers WHERE colonyid =".S::sqlEscape($colonyid));
+					//* $db->update("UPDATE pw_colonys SET members=".S::sqlEscape($colonyMembers-1)." WHERE id= ".S::sqlEscape($colonyid));
+					$db->update(pwQuery::buildClause("UPDATE :pw_table SET members=:members WHERE id=:id", array('pw_colonys', $colonyMembers-1, $colonyid)));
+					//* $db->update("DELETE FROM pw_cmembers WHERE uid=".S::sqlEscape($userId));
+					pwQuery::delete('pw_cmembers', 'uid=:uid', array($userId));
+				}
+				//朋友
+				$friendService = L::loadClass('friend', 'friend'); /* @var $friendService PW_Friend */
+				$friendService->delFriendByFriendids($userIds);
+				
+				//关注
+				$db->update("DELETE FROM pw_attention WHERE friendid IN (".S::sqlImplode($userIds).")");
+			}
+			if ($item & 2) {
+				$delarticle = L::loadClass('DelArticle', 'forum'); /* @var $delarticle PW_DelArticle */
+				$delarticle->delTopicByUids($delid);
+			}
+			if ($item & 4) {
+				$delarticle = L::loadClass('DelArticle', 'forum'); /* @var $delarticle PW_DelArticle */
+				$delarticle->delReplyByUids($delid);
+			}
+			if ($item & 8) {
+				$messageServer = L::loadClass('message', 'message'); /* @var $messageServer PW_Message */
+				foreach($userIds as $userId){
+					$messageServer->clearMessages($userId,array('groupsms','sms','notice','request','history'));
+				}
+			}
+			if ($item & 16) {
+				require_once(R_P. 'require/app_core.php');
+				$photoService = L::loadClass('photo', 'colony'); /* @var $photoService PW_Photo */
+				$photoService->delAlbumByUids($userIds);
+			}
+			if ($item & 32) {
+				$diaryService = L::loadClass('diary', 'diary'); /* @var $diaryService PW_Diary */
+				$diaryService->delByUids($userIds);
+			}
+			
+			if ($item & 64) {
+				$weiboService = L::loadClass('weibo', 'sns'); /* @var $weiboService PW_Weibo */
+				$weiboService->deleteWeibosByUids($userIds);
+				
+				$db->update("DELETE FROM pw_cwritedata WHERE uid IN (".S::sqlImplode($userIds).")");
+			}
+			if ($item & 128) {
+				$commentQuery = $db->query('SELECT cid FROM pw_weibo_comment WHERE uid IN (' . S::sqlImplode($userIds) . ')');
+				$commentIds = array();
+				while ($commentResults = $db->fetch_array($commentQuery)) {
+					$commentIds[] = $commentResults['cid'];
+				}
+				$db->update("DELETE FROM pw_comment WHERE uid IN (".S::sqlImplode($userIds).")");
+				S::isArray($commentIds) && $db->update('DELETE FROM pw_weibo_cmrelations WHERE cid IN (' . S::sqlImplode($commentIds) . ')');
+				$db->update("DELETE FROM pw_weibo_comment WHERE uid IN (".S::sqlImplode($userIds).")");
+				$db->update("UPDATE pw_weibo_content SET replies=0 WHERE uid IN(".S::sqlImplode($userIds).")");
+			}
+			if ($item & 256) {
+				//评分
+				$userService = L::loadClass('userservice', 'user'); /* @var $userService PW_Userservice */
+				$userNames = $userService->getUserNamesByUserIds($userIds);
+				if ($userNames) {
+					//$db->update("DELETE FROM pw_pinglog WHERE pinger IN (".S::sqlImplode($userNames).")");
+					pwQuery::delete('pw_pinglog', 'pinger IN (:pinger)', array($userNames));
+				}
+
+				//收藏
+				$collectionService = L::loadClass('collection', 'collection'); /* @var $collectionService PW_Collection */
+				$collectionService->deleteByUids($userIds);
+				
+				//朋友
+				$friendService = L::loadClass('friend', 'friend'); /* @var $friendService PW_Friend */
+				$friendService->delFriendByUids($userIds);
+				
+				//关注
+				$db->update("DELETE FROM pw_attention WHERE uid IN (".S::sqlImplode($userIds).")");
+			}
+
+			$userCache = L::loadClass('userCache', 'user');
+			$userCache->delete($userIds);
+			adminmsg('operate_success', "$basename&action=$action&groupid=$groupid&schname=" . rawurlencode($schname)."&schuid=$schuid&schemail=$schemail&postnum=$postnum&onlinetime=$onlinetime&regdate=$regdate&schlastvisit=$schlastvisit&orderway=$orderway&asc=$asc&lines=$lines&page=$page&skipcheck=1");
+		}
+	} else {
+		initGroupOptions();
+		include PrintEot('usermanage');exit;
+	}
+} elseif ($adminitem == 'add') {
+	if ($action == 'addnew') {
+		S::gp(array('username','password','email','groupid'),'P');
+		if (!$username || !$password || !$email) {
+			adminmsg('setuser_empty');
+		}
+		!$groupid && $groupid = '-1';
+	
+		$username = trim($username);
+		$S_key = array("\\",'&',' ',"'",'"','/','*',',','<','>',"\r","\t","\n",'#');
+		foreach ($S_key as $value) {
+			if (strpos($username,$value)!==false) {
+				adminmsg('illegal_username');
+			}
+			if (strpos($password,$value)!==false) {
+				adminmsg('illegal_password');
+			}
+		}
+		if (strlen($username)>15 || strrpos($username,"|")!==false || strrpos($username,'.')!==false || strrpos($username,' ')!==false || strrpos($username,"'")!==false || strrpos($username,'/')!==false || strrpos($username,'*')!==false || strrpos($username,";")!==false || strrpos($username,",")!==false || strrpos($username,"<")!==false || strrpos($username,">")!==false) {
+			adminmsg('illegal_username');
+		}
+		if (strrpos($password,"\r")!==false || strrpos($password,"\t")!==false || strrpos($password,"|")!==false || strrpos($password,"<")!==false || strrpos($password,">")!==false) {
+			adminmsg('illegal_password');
+		} else {
+			$password = md5($password);
+		}
+		if ($email&&!ereg("^[-a-zA-Z0-9_\.]+\@([0-9A-Za-z][0-9A-Za-z-]+\.)+[A-Za-z]{2,3}$",$email)) {
+			adminmsg('illegal_email');
+		}
+		if ($groupid == '3' && !If_manager) {
+			adminmsg('manager_right');
+		}
+		$register = L::loadClass('Register', 'user');
+		$register->setField('username', $username);
+		$register->setField('password', $password);
+		$register->setField('email', $email);
+		$register->setField('groupid', $groupid);
+		$register->setField('yz', 1);
+		$register->execute();
+		$customfieldService = L::loadClass('CustomerFieldService','user');/* @var $customfieldService PW_CustomerFieldService */
+		$customfieldService->saveRegisterCustomerData();
+		if ($groupid <> '-1') {
+			admincheck($register->uid,$username,$groupid,'','update');
+		}
+		adminmsg('operate_success');
+	} else {
+		initGroupOptions();
+		include PrintEot('usermanage');exit;
+	}
+} elseif ($adminitem == 'usertitle') {
+	//头衔管理 
+	if ($action == 'groups') {
+		S::gp(array('groupid','schname'),'P');
+		$sql = is_numeric($groupid) ? "a.groups LIKE '%,$groupid,%'" : "a.groups!=''";
+		$schname = trim($schname);
+		if ($schname != '') {
+			if (strpos($schname,'*') !== false) {
+				$schname = addslashes(str_replace('*','%',$schname));
+				$sql .= " AND (a.username LIKE ".S::sqlEscape($schname).")";
+			} else {
+				$schname = addslashes($schname);
+				$sql .= " AND a.username=".S::sqlEscape($schname);
+			}
+		}
+		$query = $db->query("SELECT a.uid,a.username,a.groupid,a.groups,m.memberid FROM pw_administrators a LEFT JOIN pw_members m USING(uid) WHERE $sql LIMIT 200");
+		while ($rt = $db->fetch_array($query)) {
+			$rt['system'] = $rt['groupid']=='-1' ? $ltitle[$rt['memberid']] : $ltitle[$rt['groupid']];
+			$groupds = explode(',',$rt['groups']);
+			foreach ($groupds as $key => $value) {
+				if ($value) {
+					$rt['gtitle'] .= $ltitle[$value].' ';
+				}
+			}
+			$schdb[] = $rt;
+		}
+	} else {
+		initGroupOptions();
+	}
+	include PrintEot('usermanage');exit;
+} elseif ($adminitem == 'unituser') {
+	require_once(R_P.'require/credit.php');
+	if ($_POST['action'] == "unit") {
+		S::gp(array('uids','newuid'),'P');
+		if (!$uids) {
+			adminmsg('unituser_username_empty');
+		}
+		if (!$newuid) {
+			adminmsg('unituser_newname_empty');
+		}
+		$userService = L::loadClass('UserService', 'user'); /* @var $userService PW_UserService */
+		$touser = $userService->get($newuid);
+		S::slashes($touser);
+		if (!$touser['username']) {
+			adminmsg('unituser_newname_error');
+		}
+		$oldinfo = array();
+		$uids = explode(',',$uids);
+		foreach ($uids as $key => $value) {
+			if (is_numeric($value)) {
+				if ($value == $newuid) {
+					adminmsg('unituser_samename');
+				}
+				$rt = $userService->get($value, true, true, true);
+				if (!$rt['uid']) {
+					adminmsg('unituser_username_error');
+				} else {
+					$oldinfo[] = $rt;
+				}
+			}
+		}
+		$ptable_a = array('pw_posts');
+	
+		if ($db_plist && count($db_plist)>1) {
+			foreach ($db_plist as $key => $value) {
+				if($key == 0) continue;
+				$ptable_a[] = 'pw_posts'.$key;
+			}
+		}
+		$postnum = $digests = $rvrc = $money = $credits = $currency = $deposit = $ddeposit = 0;
+		foreach ($oldinfo as $key => $value) {
+			$postnum  += $value['postnum'];
+			$digests  += $value['digests'];
+			$rvrc     += $value['rvrc'];
+			$money    += $value['money'];
+			$credits   += $value['credit'];
+			$currency += $value['currency'];
+			$deposit  += $value['deposit'];
+			$ddeposit += $value['ddeposit'];
+	
+			$creditdb = $credit->get($value['uid'],'CUSTOM');
+			foreach ($creditdb as $k => $val) {
+				/**
+				$db->pw_update(
+					"SELECT uid FROM pw_membercredit WHERE uid=".S::sqlEscape($newuid)."AND cid=".S::sqlEscape($k),
+					"UPDATE pw_membercredit SET value=value+".S::sqlEscape($val[1])."WHERE uid=".S::sqlEscape($newuid)."AND cid=".S::sqlEscape($k),
+					"INSERT INTO pw_membercredit SET".S::sqlSingle(array('uid'=>$newuid,'cid'=>$k,'value'=>$val[1]))
+				);
+				**/
+				$db->pw_update(
+					"SELECT uid FROM pw_membercredit WHERE uid=".S::sqlEscape($newuid)."AND cid=".S::sqlEscape($k),
+					pwQuery::buildClause("UPDATE :pw_table SET value=value+:value WHERE uid=:uid AND cid=:cid", array('pw_membercredit', $val[1], $newuid, $k)),
+					pwQuery::insertClause('pw_membercredit', array('uid'=>$newuid,'cid'=>$k,'value'=>$val[1]))
+				);			
+			}
+	
+			//$db->update("UPDATE pw_threads SET ".S::sqlSingle(array('author'=>$touser['username'],'authorid'=>$newuid))."WHERE authorid=".S::sqlEscape($value['uid']));
+			pwQuery::update('pw_threads', 'authorid=:authorid', array($value['uid']), array('author'=>$touser['username'],'authorid'=>$newuid));
+			foreach ($ptable_a as $val) {
+				//$db->update("UPDATE $val SET ".S::sqlSingle(array('author'=>$touser['username'],'authorid'=>$newuid))."WHERE authorid=".S::sqlEscape($value['uid']));
+				pwQuery::update($val, 'authorid=:authorid', array($value['uid']), array('author'=>$touser['username'],'authorid'=>$newuid));
+			}
+			$db->update("UPDATE pw_attachs SET uid=".S::sqlEscape($newuid)."WHERE uid=".S::sqlEscape($value['uid']));
+	
+			$userService->delete($value['uid']);
+	
+			$messageServer = L::loadClass('message', 'message');
+			$messageServer->clearMessages($value['uid'],array('groupsms','sms','notice','request','history'));
+		}
+	
+		$mainFields = array();
+		$memberDataFields = array(
+			'postnum' => $postnum,
+			'digests' => $digests,
+			'rvrc' => $rvrc,
+			'money' => $money,
+			'credit' => $credits,
+			'currency' => $currency
+		);
+		$memberInfoFields = array(
+			'deposit' => $deposit,
+			'ddeposit' => $ddeposit
+		);
+	
+		$userService->updateByIncrement($newuid, $mainFields, $memberDataFields, $memberInfoFields);
+		adminmsg('operate_success');
+	}
+	include PrintEot('usermanage');exit;
+} elseif ($adminitem == 'customcredit'){
+	require_once(R_P."require/credit.php");
+	if ($action == 'edit') {
+		if (empty($_POST['step'])) {
+			S::gp(array('uid','username'));
+			
+			$userService = L::loadClass('UserService', 'user'); /* @var $userService PW_UserService */
+			if(is_numeric($uid)){
+				$rt = $userService->get($uid);
+			} else{
+				$rt = $userService->getByUserName($username);
+			}
+	
+			if (!$rt) {
+				!$username && adminmsg('user_username_empty');
+				$errorname = $username;
+				adminmsg('user_not_exists');
+			}
+			$u_credit = $credit->get($rt['uid'],'CUSTOM');
+			include PrintEot('usermanage');exit;
+	
+		} else {
+	
+			S::gp(array('uid','creditdb'),'P');
+			!is_numeric($uid) && adminmsg('operate_error');
+			foreach ($creditdb as $key => $value) {
+				if (is_numeric($key) && is_numeric($value)) {
+					/**
+					$db->pw_update(
+						"SELECT uid FROM pw_membercredit WHERE uid=".S::sqlEscape($uid)."AND cid=".S::sqlEscape($key),
+						"UPDATE pw_membercredit SET value=".S::sqlEscape($value)."WHERE uid=".S::sqlEscape($uid)."AND cid=".S::sqlEscape($key),
+						"INSERT INTO pw_membercredit SET ".S::sqlSingle(array('uid'=>$uid,'cid'=>$key,'value'=>$value))
+					);
+					**/
+					$db->pw_update(
+						"SELECT uid FROM pw_membercredit WHERE uid=".S::sqlEscape($uid)."AND cid=".S::sqlEscape($key),
+						pwQuery::updateClause('pw_membercredit', 'uid=:uid AND cid=:cid', array($uid,$key), array('value'=>$value)),
+						pwQuery::insertClause('pw_membercredit', array('uid'=>$uid,'cid'=>$key,'value'=>$value))
+					);									
+				}
+			}
+			adminmsg('operate_success');
+		}
+	} else {
+		S::gp(array('page'),'GP',2);
+		$page<1 && $page = 1;
+		$limit = S::sqlLimit(($page-1)*$db_perpage,$db_perpage);
+		$rt    = $db->get_one("SELECT COUNT(*) AS sum FROM pw_membercredit WHERE value!=0");
+		$pages = numofpage($rt['sum'],$page,ceil($rt['sum']/$db_perpage),"$basename&");
+	
+		$query = $db->query("SELECT m.uid,m.username,mc.cid,mc.value FROM pw_membercredit mc LEFT JOIN pw_members m USING(uid) WHERE value!=0 ORDER BY cid, value DESC $limit");
+		while ($rt = $db->fetch_array($query)) {
+			$rt['name'] = $_CREDITDB[$rt['cid']][0];
+			$creditdb[] = $rt;
+		}
+		include PrintEot('usermanage');exit;
+	}
+}
+
+function initGroupOptions(){
+	global $db,
+		$groupselect,$groupselect_add,$g_sel;//for template file
+		
+	$groupselect = "<option value='-1'>".getLangInfo('all','reg_member')."</option>";
+	$groupselect_add = "<option value='-1'>".getLangInfo('all','reg_member')."</option>";
+	$g_sel = '';
+	$query = $db->query("SELECT gid,gptype,grouptitle FROM pw_usergroups WHERE gid>2 AND gptype<>'member' ORDER BY gid");
+	while ($group = $db->fetch_array($query)) {
+		$groupselect .= "<option value=\"$group[gid]\">$group[grouptitle]</option>";
+		if($group['gid'] != 5){
+			$groupselect_add .= "<option value=\"$group[gid]\">$group[grouptitle]</option>";
+		}
+		if ($group['gptype'] != 'default') { 
+			$g_sel .= "<option value=\"$group[gid]\">$group[grouptitle]</option>";
+		}
+	}
+}
\ No newline at end of file
posted on 2016-09-09 18:09  飘渺的悠远  阅读(215)  评论(0)    收藏  举报