<?php
/**
 * Class user model
 */
class userMod extends mod{
	function __construct(){
		parent::__construct();
    }
	/**
	 * Method 加密密码
	 * @param string $pass 原文 
	 * @return array 
	 */
	public static function password($pass){
		return strtolower(md5(md5($pass).'<0~G@k$9^w*E)6=z>'));
	}
	/**
	 * Method 加密密码
	 * @param string $pass 原文 
	 * @return array 
	 */
	public function getUser($userId){
		return $this->getRowSelectTable('user','*',"u_id='".$userId."'");
	}
	/**
	 * Method 修改密码
	 * @param string $pass 原文 
	 * @return array 
	 */
	public function setPassword($userId, $pass){
		if(!$this->dbWrite){
			$this->dbWrite = $GLOBALS['mainDbWriteLink'];
			$noWrite = true;
		}
		$pass = $this->password($pass);
		$result = $this->setRowSelectTable('user',['u_pass'=>$pass],"u_id='".$userId."'");
		if($noWrite) $this->dbWrite = null;
		return $result;
	}
	/**
	 * Method 检查用户密码是否正确
	 * @param string $pass 原文 
	 * @return array 
	 */
	public function checkUser($userId,$pass){
		if($row = $this->getUser($userId)){
			if(strcmp($this->password($pass),$row['u_pass'])==0){
				return $row;
			}
		}
		return false;
	}
    public function login($isLoginOut=0){
    	if(isset($_SESSION['user']) && isset($_SESSION['user']['id']) && $_SESSION['user']['id']!=''){
    		return true;
    	}
		if(isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])){
	    	if($_SESSION['isLoginOut']){
	    		$_SESSION['isLoginOut'] = false;
	    	}else{
				if($row = $this->checkUser($_SERVER['PHP_AUTH_USER'],$_SERVER['PHP_AUTH_PW'])){
					$_SESSION['user'] = [
						'id'=>$row['u_id'],
						'isadmin'=> ($row['u_is_admin']) ? true : false
					];
					return true;
				}
			}
		}
        $this->sendAuthenticate();
    }
    public function loginOut(){
    	$_SESSION['user'] = null;
		unset($_SESSION['user']);
    }
    public function sendAuthenticate(){
		ob_start ();
        header('WWW-Authenticate: Basic realm="SITE '.mvc::$cfg['SITE_NAME'].'"');
        header('HTTP/1.0 401 Unauthorized');
        exit();
    }
}

