<?php
namespace homepro\action;

/**
  * @class 基类
  * @method getLanguage 子类必须实现这个类才能运行
  * @author Yangxing
  */
class baseAction extends \action
{
	public $userpower = [];
	public $isWxClient = null;
    /**
     * 中英文
     * @var mixed|string
     */
    public $language = 'cn';

     /**
     * @var int 0 代表中文，1代表英文
     */
    public static $isChina;

    /**
     * 获取参数
     * @var null
     */
    public $param = null;

    /**
     * 第几页
     * @var int
     */
    public $page;

    public  $total = 0;

	//url的分页参数
	public $pageName = 'page';

    /**
     * 分几页
     * @var int|mixed
     */
    public $pageSize;

    public $perPage;

    /**
     * baseAction constructor.
     */
	public function __construct()
	{
		$this->isWxClient = stripos($_SERVER['HTTP_USER_AGENT'], 'micromessenger') !== false;
        $this->param = \mvc::$req;
        $this->page = isset($this->param['page']) ? $this->param['page'] : 1;
        $this->pageSize = isset($_GET['pageSize']) ? $_GET['pageSize'] : 15 ;
        $this->perPage = isset($_GET['perPage']) ? $_GET['perPage'] : 25 ;

		if(!empty(\mvc::$class) && stripos(\mvc::$class, '\userAction') === false){
			$this->mustLogin();
		}

        //todo 待完成中英文判断 常量判断中英文
        $this->language = $_SESSION['MVC_LANG'];
		//强制登录才能访问整个网站
	
		\view::set('isLogin', $_SESSION['cnuser']['u_id']);
		\view::set('lang', $GLOBALS['lang']);

		if(!empty($_SESSION['cnuser']['u_id']))
		{
			\p::init($_SESSION['cnuser']['u_id'], 'gsp_user_link_role');
			$this->userpower = \p::getData();
			$this->userpower = $this->userpower['Z000'];
			$this->userpower['fac'] = [];
			foreach(explode(',', $this->userpower['prl_fields']) as $v)
			{
				if(stripos($v, 'fac') === 0)
				{
					$this->userpower['fac'][] = substr($v, 3);
				}
			}
			$this->userpower['fac'] = array_unique($this->userpower['fac']);
		}
		//var_dump($this->userpower);
        \view::set('MVC_LANG', $_SESSION['MVC_LANG']);
		
	}

	//检测登录，如果未登录直接跳转到登录
	public function mustLogin()
	{
		if(!$this->isLogin())
		{
           if(isset($_SERVER['HTTP_REFERER'])) {
				$referrer = filter_var($_SERVER['HTTP_REFERER'], FILTER_VALIDATE_URL);
				$_SESSION['login_back_url'] =  $referrer ? $referrer : '';
			}
            header('Location:'.\mvc::$cfg['SELF_URI'].'user/login');
            exit();
        }
	}

	//检测登录，如果未登录直接跳转到登录
	public function isLogin()
	{
		return !empty($_SESSION['cnuser']['u_id']);
	}

    /**
     * @取mod 中的数据返回 json
     * @return json
     */
    public function getJson()
    {
        $arr = explode('/',$_REQUEST['func']);
        $class = $arr[0];
        $func = $arr[1];
        $mod = makeOne('\model\homepro\\'.$class);
        $index = array_search('func', array_keys($_REQUEST)); 
        if($index !== FALSE){ 
            array_splice($_REQUEST, $index, 1); 
        }
        $data =call_user_func_array ( array ( $mod, $func ), $_REQUEST );
        $data = ['status' => true ,'code' => 0,'data' => $data];
        $this->exitToJson($data);
    }

    /**
     * @返回语言包json
     * @param $lang 语言版本
     * @return json
     */
    public function getLangJs($lang)
    {
        $path =  \mvc::$cfg['ROOT'] . 'language/';
        $arr = require($path . $lang.'.php');
        $json = json_encode($arr, JSON_UNESCAPED_UNICODE);
        echo 'var langArr = '. $json . ';';
    }

    /**
     * @param $rules 验证规则
     * @param $param 验证数据
     * @return bool 返回true 表示验证成功，验证错误会直接返回错误给前端
     */
    public function validator($rules,$param)
    {

        $validator = new validatorMod($rules);
        $validator->validate($param);
        if($validator->getError()){
            LibFc::ajaxJsonEncode(['status' => 'false' ,'data' => $validator->getError() ]);
        }else{
            return true;
        }
    }

    /**
     * 验证demo
     */
    public function vilidatorDemo()
    {
        $rules = [
            ['name|name', 'require|email|in:7,8,9|max:10|min:6|between:6,8|length:2', '名字不能为空|名字必须必须为正确的邮件地址'],
            ['test|测试', 'require'],
        ];
        $data = ['name' => '9'];
        $validator = new validatorMod($rules);
//        $validator->addRule(['name|名字', 'regex', '/^[0-8|a-z]+$/', '正则验证失败哦']);  //可以为二维数组，有|的正则验证只能通过addRule。
        $validator->validate($data);
        $validator->getAllErrors(); //获取所有验证错误 array
        //$validator->getError();  //获取第一条验证错误 string
        //var_dump($validator->getError());exit();
    }

	public function pages($dataArr)
	{
		$html = '';
		$page = $dataArr['page'];
		$pageCount = $dataArr['pagesize']? ceil($dataArr['recordCount']/$dataArr['pagesize']): 0;
		if($pageCount > 0)
		{
			$page = $page > $pageCount? $pageCount: $page;
			$html .= '
			<div class="pager">
				<div>当前条数:'.$dataArr['recordCount'].', 页码: '.$dataArr['page'].'/'.$pageCount.' </div>
				<ul class="pagination style2">
			';
			if($page > 1) $html .= '<li><a href="javascript:gopage('.($page-1).')"><i class="fa fa-chevron-left"></i></a></li>';
			$html .= '<li class="active"><a href="javascript:gopage('.$page.')">'.$page.'</a></li>';
			if($pageCount > $page) $html .= '<li><a href="javascript:gopage('.($page+1).')"><i class="fa fa-chevron-right"></i></a></li>';
			$html .= '</ul></div>';
		}
		return $html;
	}

    public function showPages($total,$perPage = 10, $all = false)
    {   
        $req = \mvc::$req;
        $this->total = $total > 0 ? (int) $total:    $this->total;
		$this->perPage = $perPage > 0 ? (int) $perPage: $this->perPage;
		$totalPage = ceil($this->total/$this->perPage);

		$nowPage = !empty($req[$this->pageName]) && $req[$this->pageName] > 0 ? (int) $req[$this->pageName] : 1;
		$nowPage = $nowPage > $totalPage? $totalPage: $nowPage;
	
		$urlParamArr = array();
		//全部小写
		if(is_array($req))
		{
			foreach($req as $K=>$V)
			{
				$urlParamArr[$K] = $V;
			}
		}
		$urlParamArr[$this->pageName] = '-_-page_-_';
		$Url = $_SERVER['PHP_SELF'].'?'.http_build_query($urlParamArr);
		$PageStr = '';
		if($totalPage > 0)
		{
			$PageStr .= $nowPage == 1 ? '<li class="page-disabled"><a href="javascript:">上一页</a></li>' : '<li><a href="'.self::ReplaceUrl($Url, $nowPage - 1).'">上一页</a></li>';
		}
		if($totalPage <= 7)
		{
			for($i = 1; $i <=$totalPage; $i++)
			{
				if($nowPage == $i)
				{
					$PageStr .= '<li class="page-choose"><a href="javascript:">'.$i.'</a></li>';
				}
				else
				{
					$PageStr .= '<li><a href="'.self::ReplaceUrl($Url, $i).'">'.$i.'</a></li>';
				}
			}
		}
		else
		{//上一页 5 6 7 8 9 10 11 12 下一页
			//计算开始页
			if($nowPage < 4)
			{//[1] [2] 3 [4]...
				$BPage = 1;
			}
			else if(($totalPage-$nowPage) < 3)
			{ 
				$BPage = $nowPage-6+($totalPage-$nowPage);
			}
			else
			{
				$BPage = $nowPage-3;
			}
			for($i = $BPage; $i < $BPage+7; $i++)
			{
				if($i > $totalPage)
				{
					break;
				}
				if($nowPage == $i)
				{
					$PageStr .= '<li class="page-choose"><a href="javascript:">'.$i.'</a></li>';
				}
				else
				{
					$PageStr .= '<li><a href="'.self::ReplaceUrl($Url, $i).'">'.$i.'</a></li>';
				}
			}
		}
		if($totalPage > 0)
		{
			$PageStr .= $nowPage == $totalPage ? '<li class="page-disabled"><a href="javascript:">下一页</a></li>' : '<li><a href="'.self::ReplaceUrl($Url, $nowPage + 1).'">下一页</a></li>';
		}
		//跳转到
		$GoHtml = '';
		if($totalPage > 10)
		{
			$GoHtml .= '<div class="page-go">共<b>'.$totalPage.'</b>页，到第 <input type="text" class="to_page_txt" size="3" base="'.$Url.'" onkeydown="javascript:if(event.keyCode==13){PAGE.jump();return false;}" value="'.$nowPage.'"/> 页 <button type="button" class="btn btn-info btn-sm to_page_btn" onclick="PAGE.jump()">跳转</button ></div>';
		}
		
		$per = '<div class="page-all">共<b>'.$total.'</b>条记录';
		if($all)
		{ 
			
			$per .= '，每页 <input type="text" class="to_pageall_txt" size="2" onkeydown="javascript:if(event.keyCode==13){PAGE.pagesize(this.value);return false;}" value="'.$perPage.'"/> 条';
		}
		$per .= '</div>';
		return '<div class="page-box">'.$per.'<ul class="page">'.$PageStr.'</ul>'.$GoHtml.'</div>';
    }

	public function exitToJson($data)
	{
		ob_clean();
		$json = json_encode($data, JSON_UNESCAPED_UNICODE);
        $json = str_replace('":null,"','":"","',$json);
        echo $json;
		exit;
	}

    private static function ReplaceUrl($Url, $Page)
	{
		return str_replace('-_-page_-_', $Page, $Url);
	}
}