HEX
Server: nginx/1.28.1
System: Linux 10-41-63-61 6.8.0-31-generic #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20 00:40:06 UTC 2024 x86_64
User: www (1001)
PHP: 7.4.33
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/bs.kntsleep.com/system/admin/member/member.class.php
<?php
/*
 * Copyright (c) Huyin Information Technology Co., Ltd. All Rights Reserved.
 * BOSSCMS Content Management System (https://www.bosscms.net/)
 */
defined('IS_OK') or exit('Access Forbidden');

into::basic_class('admin');

class member extends admin
{
	public function init()
	{
		global $G;
		$G['cover'] = $this->cover();
		mysql::update(array('etime'=>0,'weight'=>setDefault($G['config']['member_grade_default'],0)),'member',"etime>0 AND etime<".TIME);
		$where = $this->where($G['get']);
		$data = page::member_pages($G['rows']=$this->rows(20), null, null, null, 'pages', '*', $where);
		foreach($data['list'] as $k=>$v){
			$data['list'][$k]['grade'] = arrExist(page::grade_one($v['weight']),'name');
		}
		$G['grade'] = arrOption(page::grade_list(),'weight','name');
		echo $this->theme('member/member',$data);
	}

	public function where($data)
	{
		$where = 1;
		if($keyword = $data['keyword']){
			$where = "(username='{$keyword}' OR alias='{$keyword}') AND {$where}";
		}
		if(is_numeric($data['weight'])){
			$where = "weight='{$data['weight']}' AND {$where}";
		}
		if($data['etime'] && is_numeric($data['etime'])){
			$where = "etime>0 AND etime<".strtotime('+'.abs($data['etime']).' '.($data['etime']>0?'month':'day'),TIME)." AND {$where}";
		}
		return $where;
	}
	
	public function edit()
	{
		global $G;
		$G['cover'] = $this->cover('member');
		$data = array();
		if(isset($G['get']['id']) && $data['member']=mysql::select_one('*','member',"id='{$G['get']['id']}'")){
			$data['member']['utime'] = $data['member']['utime']?date('Y-m-d H:i:s',$data['member']['utime']):0;
			$data['member']['etime'] = $data['member']['etime']?date('Y-m-d H:i:s',$data['member']['etime']):0;
			$data['member']['weight'] = arrExist(page::grade_one($data['member']['weight']),'weight');
			$data['params'] = arrOption(page::material($data['member']['id']),'parent','value');
		}
		$G['grade'] = arrOption(page::grade_list(),'weight','name');
		$data['form'] = page::form_register();
		echo $this->theme('member/edit',$data);
	}
	
	public function modify()
	{
		global $G;
		$this->cover('member','M');
		if(isset($G['post']['id'])){
			$error=array();
			foreach($G['post']['id'] as $id){
				if(isset($G['post']['open'.$id])){
					$data = array(
						'open' => $G['post']['open'.$id]
					);
					if(!is_numeric(mysql::update($data,"member","id='{$id}'"))){
						$error[]=$id;
					}
				}
			}
			if($error){
				alert('ID为'.implode(',',$error).'修改失败');
			}else{
				alert('修改成功', url::mpf('member','member','init'));
			}
		}else{
			alert('没有提交信息');
		}
	}
	
	public function add()
	{
		global $G;
		$this->cover('member',arrExist($G,'get|id')?'M':'A');
		if(isset($G['post'])){
			$data = array(
				'weight'     => is_numeric($G['post']['weight'])?$G['post']['weight']:0,
				'avatar'     => $G['post']['avatar'],
				'alias'      => $G['post']['alias'],
				'email'      => $G['post']['email'],
				'phone'      => $G['post']['phone'],
				'sex'        => $G['post']['sex'],
				'golds'      => $G['post']['golds'],
				'points'     => $G['post']['points'],
				'balance'    => $G['post']['balance'],
				'contribute' => $G['post']['contribute'],
				'utime'      => $G['post']['utime']?strtotime($G['post']['utime']):0,
				'etime'      => is_array($G['post']['etime'])||!$G['post']['etime']?0:strtotime($G['post']['etime']),
				'open'       => $G['post']['open']
			);
			if($password = arrExist($G,'post|password')){
				if($password && preg_match('/^(?![a-zA-Z]+$)(?![0-9]+$).{6,}$/',delFilter($password))){
					if($password == arrExist($G,'post|passwords')){
						$data['password'] = md5(stripslashes($G['post']['password']));
					}else{
						alert('两次密码输入不同,请重新输入');
					}
				}else{
					alert('密码必须含有英文字母和数字,且长度大于6位字符');
				}
			}
			$form = page::form_register();
			if($id = arrExist($G,'get|id')){
				if($res = page::member_one($id)){
					mysql::update($data,'member',"id='{$id}'");
					if($form){
						foreach($form as $v){
							$value = $G['post']['params'][$v['id']];
							$value = is_array($value)?json::enFilter($value):$value;
							if(mysql::total('material',$whe="parent='{$v['id']}' AND member='{$res['id']}'")){
								mysql::update(array('value'=>$value),'material',$whe);
							}else{
								mysql::insert(array('parent'=>$v['id'],'member'=>$res['id'],'value'=>$value),'material');
							}
						}
					}
				}else{
					alert('会员错误');
				}
			}else{
				if(!$password){
					alert('密码不能为空');
				}
				$data['username'] = $G['post']['username'];
				if(mb_strlen($data['username'],'utf-8')<2){
					alert('账户名称必须大于2个字符');
				}
				if(mysql::total('member',"username='{$data['username']}'")){
					alert('该账号已经存在,请重新输入');
				}
				$data['ip'] = '';
				$data['frequency'] = '0';
				$data['ctime'] = TIME;
				$data['ltime'] = 0;
				if($id = mysql::insert($data,'member')){
					if($form){
						foreach($form as $v){
							$value = $G['post']['params'][$v['id']];
							mysql::insert(array(
								'parent' => $v['id'],
								'value' => is_array($value)?json::enFilter($value):$value,
								'member' => $id
							),'material');
						}
					}
				}
			}
			alert('保存成功',url::mpf('member','member','edit',array('id'=>$id,'success'=>'ok')));
		}else{
			alert('没有提交信息');
		}
	}
	
	public function delete()
	{
		global $G;
		$this->cover('member','D');
		if(isset($G['post']['url']) && isset($G['get']['id'])){
			$del = array();
			$arr = explode(',',$G['get']['id']);
			foreach($arr as $id){
				if(is_numeric($id)){
					$del[$id] = $id;
				}
			}
			if($del){
				$error=array();
				foreach($del as $id=>$name){
					if(is_numeric(mysql::delete("member","id='{$id}'"))){
						
					}else{
						$error[]=$id;
					}
				}
				if($error){
					alert('ID为'.implode(',',$error).'删除失败');
				}else{
					alert('删除成功',url::mpf('member','member','init',array('id'=>null)));
				}
			}else{
				alert('没有删除对象id');
			}			
		}
		alert('没有提交信息');
	}

	public function csv()
	{
		global $G;
		$this->cover('member','R');
		if($G['post']){
			header('Content-Type: application/vnd.ms-excel');
			header('Content-Disposition: attachment;filename="member.csv"');
			header('Cache-Control: max-age=0');
			$where = $this->where($G['post']);
			$rows = 1000;
			if($total = mysql::total('member', $where)){
				$file = fopen('php://output','a');
				$arr = array('编号','账号','昵称','头像','性别','邮箱','电话','等级','升级时间','到期时间','金币','积分','余额','投稿限制','登陆时间','登陆IP','登录次数','账号状态');
				foreach($arr as $k=>$v){
					$arr[$k] = iconv('utf-8','gbk',$v);
				}
				if($form = page::form_register()){
					foreach($form as $v){
						$arr[] = iconv('utf-8','gbk',$v['title']);
					}
				}
				fputcsv($file,$arr);
				$max = ceil($total/$rows);
				$grade = array();
				$open = array(1=>'正常启用',2=>'限制禁言',-1=>'邮箱未验证',0=>'已关闭');
				$res = mysql::select_all('name,weight','grade','open=1',"weight DESC,id DESC");
				foreach($res as $v){
					$grade[$v['weight']] = $v['name'] ;
				}
				$domain = $G['config']['store_type']?$G['config']["store_domain"]:$G['config']['domain'];
				for($i=0; $i<$max; $i++){
					ob_flush();
					flush();
					$list = mysql::select_all('*', 'member', $where, 'id ASC', ($i*$rows).','.$rows);
					foreach($list as $v){
						$arr = array(
							$v['id'],
							iconv('utf-8','gbk',$v['username']),
							iconv('utf-8','gbk',$v['alias']),
							url::upload($v['avatar'],$domain),
							iconv('utf-8','gbk',$G['option']['sex'][$v['sex']]),
							$v['email'],
							$v['phone'],
							iconv('utf-8','gbk',$grade[$v['weight']]),
							$v['ltime']>1e9?date('Y-m-d H:i:s',$v['utime']):'',
							$v['etime']?date('Y-m-d H:i:s',$v['etime']):iconv('utf-8','gbk','永久'),
							$v['golds'],
							$v['points'],
							$v['balance'],
							$v['contribute'],
							$v['ltime']>1e9?date('Y-m-d H:i:s',$v['ltime']):'',
							$v['ip'],
							$v['frequency'],
							iconv('utf-8','gbk',$open[$v['open']])
						);
						if($form){
							$mt = arrOption(page::material($v['id']),'parent','value');
							foreach($form as $v){
								if($value = $mt[$v['id']]){
									$value = preg_match('/^\[(".+")?\]$/',$value)?implode(',',json::decode($value)):$value;
									$value = htmlspecialchars_decode($value, ENT_QUOTES);
									$value = iconv('utf-8','gbk',$value);
									$arr[] = $v['style']==8?url::upload($value,$domain):$value;
								}else{
									$arr[] = '';
								}
							}
						}
						fputcsv($file, $arr);
					}
				}
				fclose($file);
			}else{
				alert('数据为空');
			}
		}else{
			alert('没有提交信息');
		}
	}
	
	public function login()
	{
		global $G;
		if($G['config']['member_fast_login'] && is_numeric($G['get']['id']) && $result=mysql::select_one('*','member',"id='{$G['get']['id']}'")){
			$member_logout_time = arrExist($G,'config|member_logout_time');
			if(!is_numeric($member_logout_time) || (is_numeric($member_logout_time) && $member_logout_time<60)){
				$member_logout_time = 60;
			}
			session::set('member', $result['id'].P.$result['username'].P.$result['password'].P.$result['ltime'], $member_logout_time);
			location(url::items(mysql::select_one('*','items',"type='11'")));
		}
	}
}
?>