<?php
namespace admin\action;

use model\user;

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 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['ori_au_pass'] = $req['au_pass'];
			$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();
			$user = new user();
			$id = $user->addUser($req);
			// $id = $this->element->add($req);
			$this->successJson(['key'=>$id,'op'=>'add']);
		}else{
			$user = new user();
			if($user->editUser($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;
		$_SESSION['powerData'] = null;
		foreach($_SESSION as $k=>$v){
		    if($k!='lang'){
    			$_SESSION[$k] = null;
    			unset($_SESSION[$k]);
		    }
		}
		\view::put('index/login');
	}
	
	/*
	* 忘记密码
	*/
	public function forgot_pass(){
	    $req = \mvc::$req;
	    $okmsg = '';
	    $errmsg = '';
	    if(!empty($req['username']) && !empty($req['email'])){
	        $user = new \model\user();
	        $urow = $user->getRowByKey($req['username']);
	        if(!empty($urow) && strtolower(trim($urow['au_id']))===strtolower(trim($req['username']))){
	            if(strtolower(trim($urow['au_email']))===strtolower(trim($req['email']))){
	                $e = lock($urow['au_id'].','.getNowTime(),'2394forgot_pass'); 
	                $a = 'https://pdm.frey.cn/pdc/admin/user/change_pass?fag='.$e; 
	                $tomail=[$urow['au_email']];
	                $title= "FREAY PDC " . lg("重置密码");
	                $body  = lg("用户名").":" . $urow['au_id'];
	                $body .= '<br>'.lg("点击或复制以下链接重置密码，30分钟内有效");
	                $body .= '<br><a href="'.$a.'" target="_blank">'.$a.'</a>';
        			$email = new \model\email();
        			$res = $email->send(implode(',', $tomail), $title, $body);
        			if(isset($res['ok']) && !empty($res['ok'])){
        			    errorLog([$tomail,$title,$body,$res],'SENDMAIL_SUCCESS');
            			$okmsg = lg("邮件已发送，请注意查收");
        			}else{
						$errmsg = lg("邮件发送异常，".$res['msg']);
        			    errorLog([$tomail,$title,$body],'SENDMAIL_ERROR');
        			}
	            }else{
    	            $errmsg = lg('必须和账户邮箱一致');
	            }
	        }else{
	            $errmsg = lg('不存在的用户名');
	        }
			dd($errmsg);
	    }
		\view::set('errmsg',$errmsg);
		\view::set('okmsg',$okmsg);
		\view::put('user/forgot_pass');
	}
	
	/*
	* 设置密码
	*/
	public function change_pass(){
	    $req = \mvc::$req;
	    if(empty($req['fag'])){
	        exit(lg('非法操作'));
	    }
	    $okmsg = '';
	    if(!empty($req['fag']) && !empty($req['password'])){
	        $d = unlock($req['fag'],'2394forgot_pass');
	        list($uid,$datetime) = explode(',',$d);
	        if(empty($datetime) || time() - strtotime($datetime)<60*30){
    	        $user = new \model\user();
    	        $urow = $user->getRowByKey($uid);
    	        if(!empty($urow) && strtolower(trim($urow['au_id']))===strtolower(trim($uid))){
                    $user->setValue($uid,'au_pass',$user->pass2($uid,$req['password']));
                    $user->setValue($uid,'au_passupdatetime',getNowTime());
                    $okmsg = '密码修改完成';
    	        }
	        }else{
	            exit(lg('失效的链接'));
	        }
	    }
		\view::set('fag',$req['fag']);
		\view::set('okmsg',$okmsg);
		\view::put('user/change_pass');
	}

    
	/*
	* 刷新验证码
	*/
	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_bigcates','bigcate');
		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','brand');
		getItems($row,'prl_users','user');
		getItems($row,'prl_companys','company');

		$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('无此权限'));
	    }
	}
	
	public function getPowerRole(){
		$data = $this->user->getPowerRole(\mvc::$req['pwcode']);
		$this->successJson($data);
    }


	public function ddtalkLogin()
	{
		$ddtalk = new \model\user\ddtalk();
		$msg = $ddtalk->dingtalkLogin(\mvc::$req['authCode']);
		$this->successJson(['msg'=>$msg]);
	}
}