<?php
namespace admin\action;

class userAction extends elementAction
{
	private $user;
	public function __construct($elename='user')
    {
		parent::__construct($elename);
		$this->user = new \model\user($this->elecfg);
	}

    public function detail($key)
    {
		if($key!==getOpuser()){
			//exit(lg('非法操作'));
		}
		//$this->user->updateAllPassTo123456NoExitsAdmin();
		if(!\mvc::$cfg['extModels']['oppo']){
		    unset($this->elecfg['fields']['au_model']);
		}
		parent::detail($key);
    }
    
    public function getUserInfo($key)
    {
		$data = $this->user->getRowByKey($key);
		unset($data['au_pass']);
		$this->successJson($data);
    }

    public function deleteRows()
    {
        $req = \mvc::$req;
        if($this->element->deleteRows($req['ids'])){
            $this->successJson(lg('删除完成'));
        }
    }

	public function edit()
	{
		$req = \mvc::$req;
		$key = $req['key'];
		unset($req['key']);
		unset($req['elename']);
		foreach($req as $k=>$v){
			if($v!='' && $this->elecfg['fields'][$k]['unique'] && !$this->elecfg['fields'][$k]['key']){
				if($this->element->hasWithOut($k,$v,$key)){
					$this->msgJson(sprintf("重复的 [ %s ] 在 [ %s ] 中",$v,$this->elecfg['fields'][$k][LG_NAME]));
				}
			}
			if(isset($this->elecfg['fields'][$k]['editor']['ruleFunction']) && !empty($this->elecfg['fields'][$k]['editor']['ruleFunction'])){
				$this->elecfg['fields'][$k]['editor']['ruleFunction']($req[$this->elecfg['fields'][$k]['field']],$req);
			}
		}
		if(isset($this->elecfg['fields']['opuser'])) $req['opuser'] = getOpuser();
		if(isset($this->elecfg['fields']['update_time'])) $req['update_time'] = getNowTime();
		if(!empty($req['au_pass']) && strlen($req['au_pass'])!==32){
			$req['au_pass'] = $this->user->pass2($req['au_id'],$req['au_pass']);
		}
		if(isset($req['au_dlang'])){
		    $_SESSION['cateName'] = $req['au_dlang'];
		}
	    $_SESSION['user']['au_menuopenone'] = $req['au_menuopenone'];
		if(empty($key)){
			//unset($req[$this->elecfg['key']]);
			if(isset($this->elecfg['fields']['create_time'])) $req['create_time'] = getNowTime();
			$id = $this->element->add($req);
			$this->successJson(['key'=>$id,'op'=>'add']);
		}else{
			if($this->element->edit($key,$req)){
				$this->successJson(['key'=>$key,'op'=>'edit']);
			}
		}
	}

	/*
	* WEB 登录
	*/
	public function webLogin(){
		$req = \mvc::$req;
		$username = base64_decode($req['username']);
		$password = base64_decode($req['password']);
		$verificode = $req['verificode'];
		$msg = $this->user->webLogin($username,$password,$verificode);
	    $this->successJson(['msg'=>$msg]);
	}
	
	/*
	* WEB 登录
	*/
	public function logout(){
		(new \model\user)->toLog('系统','退出系统');
		$_SESSION['logined'] = null;
		foreach($_SESSION as $k=>$v){
		    if($k!='lang'){
    			$_SESSION[$k] = null;
    			unset($_SESSION[$k]);
		    }
		}
		\view::put('index/login');
	}

    
	/*
	* 刷新验证码
	*/
	public function verificode(){
	    $v1 = mt_rand(1,999999) % 10;
	    $v2 = mt_rand(1,999999) % 10;
	    $op = (mt_rand(1,999999) % 2 == 0) ? '+' : '*';
	    $optxt = $op;
	    if($optxt=='*') $optxt = 'x';
	    $cmd = $v1.$op.$v2;
	    eval('$value='.$cmd.";");
	    $_SESSION['verificode'] = $value;
        $font = \mvc::$cfg['dir']['static'].'/fonts/verificode/'.(mt_rand(1,5)).'.ttf';
        $bgfile = \mvc::$cfg['dir']['static'].'/images/verificodebg.png';
        $img=imagecreatefrompng($bgfile); //参数为宽度和高度
        $r = 255;
        $g = 255;
        $b = 255;
        $r = (mt_rand(1,999999) % 2 == 0) ? 255 : mt_rand(0,255);
        if($r==255){
            $g = (mt_rand(1,999999) % 2 == 0) ? 255 : mt_rand(0,255);
        }
        if($r==255 && $g==255){
            $b = mt_rand(0,255);
        }
        $color=ImageColorAllocate($img, $r, $g, $b);
        imagettftext($img, 15, mt_rand(-30,30), 8, 42, $color, $font, sprintf("%d %s %d",$v1,$optxt,$v2));
        ob_end_clean();
        header("Content-type:image/png");
        imagepng($img);
        imagedestroy($img);
        exit();
	}
	
	/*
	* 权限与角色UI
	*/
	public function powerLinkRole($type=''){
		\view::put('user/powerLinkRole');
	}	
	
	/*
	* 取角色下所有用户
	*/
	public function getUserLinkRole($roleId){
		$data = $this->user->getUserLinkRole($roleId);
		$this->successJson($data);
	}

	/*
	* 保存或取消角色与用户关联(单条)
	*/
	public function saveUserLinkRole($roleId,$uid,$checked){
		$data = $this->user->saveUserLinkRole($roleId,$uid,$checked);
		$this->successJson();
	}

	/*
	* 保存或取消角色与用户关联(批量)
	*/
	public function saveUserLinkRoleMore($roleId,$uids){
		$data = $this->user->saveUserLinkRoleMore($roleId,explode(',',$uids));
		$this->successJson();
	}

	/*
	* 取角色与权限关联
	*/
	public function getPowerLinkRole($roleId,$powerId){
		function getItems(&$data,$fag,$table){
			$pro = makeOne(\model\pro\pro::class);
			if($data[$fag]!=''){
				$items = $pro->getSelect($table,[],explode(',',$data[$fag]));
				if($items){
					$data['table'][$fag] = $table;
					foreach($items as $item){
						$data['items'][$fag][] = ['value'=>$item['id'],'text'=>$item['name']];
					}
				}
			}
		}
		$row = $this->user->getPowerLinkRole($roleId,$powerId);
		$row['items'] = [];
		/*
		getItems($row,'prl_cates','cate');
		getItems($row,'prl_makes','make');
		getItems($row,'prl_cnmakes','cnmake');
		getItems($row,'prl_factorys','factory');
		getItems($row,'prl_vers','ver');
		getItems($row,'prl_areas','area');
		getItems($row,'prl_users','user');
        */
		$row['table']['prl_countrys'] = 'country';
		if($row['prl_countrys']){
			$countrysArr = explode(',', $row['prl_countrys']);
			foreach ($countrysArr as $item) {
				$row['items']['prl_countrys'][] = ['value'=>$item,'text'=>$item];
			}
		}
		$prpls = $this->user->getPowerAndParamLinkRole($roleId,$powerId);
		foreach ($prpls as $v){
		    $row['items']['params'][$v['prpl_cate']] = $v['prpl_params'];     
		}
		$this->successJson($row);
	}

	/*
	* 保存角色与权限关联
	*/
	public function savePowerLinkRole(){
		$data = $this->user->savePowerLinkRole(\mvc::$req);
		$this->successJson();
	}

	/*
	* 保存角色 权限 与 品名参数关系
	*/
	public function savePowerAndParamLinkRole(){
		$data = $this->user->savePowerAndParamLinkRole(\mvc::$req);
		$this->successJson();
	}


	/*
	* 取指定用户的所有权限
	*/
	public function getPowersByUid($uid){
	    if(\p::has('U000','view')){
		    $data = $this->user->getPowersByUid($uid);
		    $this->successJson($data);
	    }else{
	        exitJson(lg('无此权限'));
	    }
	}

}