<?php
/**
* 获取用户的品名字段名称
*/
function cateName()
{
    $name = $_SESSION['cateName'];
    if(empty($name)) $name = 'en_name';
	return $name;
}

/**
* 获取用户的姓名
*/

function getOpuserName($username,$db=null)
{
    if(!empty(\mvc::$tempCache['opUserNameList'][$username])){
        return \mvc::$tempCache['opUserNameList'][$username];
    }
    if(!isset(\mvc::$tempCache['opUserNameList'])) \mvc::$tempCache['opUserNameList'] = [];
    
    $result = '';
    if($username!=''){
        if($db){
            $row = $this->db->get('gsp_adm_user',['au_name','au_name_oppo'],['au_id'=>$username]);
        }else{
            $user = makeOne('\model\user');
            $row = $user->getRowByKey($username);
        }
        if($row){
            if(\mvc::$cfg['extModels']['oppo']){
                $result = ($row['au_name_oppo']) ? $row['au_name_oppo'] : $row['au_name'];
            }else{
                $result = $row['au_name'];
            }
        }
    }
    if($result){
        \mvc::$tempCache['opUserNameList'][$username] = $result;
    }
    return $result;
}


/**
 * 格式化年份
 * 传参法二 $syear ['mm_year_from'=>'', 'mm_year_to'=>''....] 
 */
function viewYear($syear, $eyear = null, $smonth = null, $emonth = null)
{
	if(is_array($syear))
	{
		if(isset($syear['mm_year_to'])) $eyear = $syear['mm_year_to'];
		if(isset($syear['mm_month_from'])) $smonth = $syear['mm_month_from'];
		if(isset($syear['mm_month_to'])) $emonth = $syear['mm_month_to'];
		if(isset($syear['mm_year_from'])) $syear = $syear['mm_year_from'];
	}
	$out = '';
	if(strlen($syear) == 4)
	{
		$out = $syear;
		if(!empty($smonth)) $out .= '.'.str_pad($smonth, 2, 0, STR_PAD_LEFT);
	}
	$out .= '-';
	if(strlen($eyear) == 4)
	{
		$out .= $eyear;
		if(!empty($emonth)) $out .= '.'.str_pad($emonth, 2, 0, STR_PAD_LEFT);
	}
	return $out;
}

/**
* 号码分隔并格式化
* @param string $str
* @return 去重的格式化号码['11','564'....]
*/
function formatNums($str)
{
    $nums = preg_split('/[\n|;|,]/',$str);
	foreach($nums as $k=>&$v)
	{
		$v = formatNum($v);
		if($v == '') unset($nums[$k]);
	}
	return array_unique($nums);
}

/**
* 号码分隔不去格式
* @param string $str
* @return 去重的格式化号码['11','564'....]
*/
function arryNums($str)
{
    $nums = preg_split('/[\n|;|,]/',$str);
	foreach($nums as $k=>&$v)
	{
		$v = trim($v);
		if($v == '') unset($nums[$k]);
	}
	return array_unique($nums);
}

/**
* 汉字转拼音,全拼
* @param string $str
* @param string $link 拼音与拼音之间的连接符,默认没有连接符,仅支持 '_', '-', '', '.', '单空格'
* @return string
*/
function pinyin($str,$link=''){
	//single(\Overtrue\Pinyin\Pinyin::class);
	$pinyin = make(\Overtrue\Pinyin\Pinyin::class);
	if($link==' '){
		$result = $pinyin->permalink($str,'-');
		$result = str_replace('-',' ',$result);
	}else{
		$result = $pinyin->permalink($str,$link);
	}
	return $result;
}

/**
* 汉字转拼音,首字母
* @param string $str
* @return string
*/
function pinyinFirst($str){
	//single(\Overtrue\Pinyin\Pinyin::class);
	$pinyin = make(\Overtrue\Pinyin\Pinyin::class);
	return $pinyin->abbr($str);
}

/**
* 只保留字母与数字
*
* @param string $str 待处理的字符串
* @param string $chars 补加保留的字符集
* @return string
* @example ```\wordnum('[123+abc].'); //123abc```
* @example ```\wordnum('[123-abc].','-.'); //123-abc.```
*/
function wordnum($str,$chars=''){
	$result  = '';
	$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'.$chars;
	$len = strlen($str);
	for($i=0;$i<$len;$i++){
		if(strpos($chars,$str[$i])!==false){
			$result .= $str[$i];
		}
	}
	return $result;
}

//数字转字母列
function int2Excel($num)
{
	$az = 26;
	$m = (int)($num % $az);
	$q = (int)($num / $az);
	$letter = chr(ord('A') + $m);
	if ($q > 0) {
		return int2Excel($q - 1) . $letter;
	}
	return $letter;
}

/**
 * @method 某方法是否可以运行【方法加锁】
 * @param $keyName string [必填] 锁名称 唯一键(作为文件名)
 * @param $time int [选填] 锁的时间 默认600秒
 * @return true|false
 */
function hasFunLock($keyName, $time = 600)
{
	$time = (int) $time;
	$lockFile = \mvc::$cfg['dir']['log'].'/lock_'.$keyName.'.txt';
	if(file_exists($lockFile) && (time() - filemtime($lockFile)) < $time) return false;
	file_put_contents($lockFile, 'lock');
	return true;
}


/**
 * @method 删除方法锁
 * @param $keyName string [必填] 锁名称 唯一键(作为文件名)
 * @return true|false
 */
function delFunLock($keyName)
{
	@unlink(\mvc::$cfg['dir']['log'].'/lock_'.$keyName.'.txt');
	return true;
}

if(!function_exists('mkdirs')){

    /**
     * 递归创建文件
     * @param string $path 文件夹
     * @param int $permissions 创建文件的等级权限,默认为0777
     * @return bool
     */
    function mkdirs($path,$permissions = 0777)
    {
        if(is_dir($path)) return true;
        if(is_dir(dirname($path))) return mkdir($path,$permissions);
        mkdirs(dirname($path),$permissions);
        return mkdir($path,$permissions);
    }
}

if(!function_exists('apiToken')){
    function apiToken()
    {
        try {
            $tokenUrl = \mvc::$cfg['API_1_TOKEN_URL'];
            $params = \mvc::$cfg['API_1_TOKEN_PASS'];
            $header = \mvc::$cfg['API_1_TOKEN_AUTHORIZATION'];
            $ch     = curl_init(); //初始化CURL句柄
            curl_setopt($ch, CURLOPT_URL, $tokenUrl); //设置请求的URL
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //设为TRUE把curl_exec()结果转化为字串，而不是直接输出
            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); //设置请求方式
            curl_setopt($ch, CURLOPT_HTTPHEADER, $header);//设置HTTP头信息
            if(count($params) > 0){
                $params = http_build_query($params);
                curl_setopt($ch, CURLOPT_POSTFIELDS, $params);//设置提交的字符串
            }
            $response = curl_exec($ch);
            if($response === false){
                return false;
            }
            $arr = json_decode($response,true);
            if( isset($arr['access_token']) ){
                return $arr['access_token'];
            }else{
                return false;
            }
        }catch (\Exception $e) {
            return  false;
        }

    }
}

if(!function_exists('postData')){
    function postData($url,$data,$token)
    {
        try {
            $header = array(
                'Authorization: Bearer ' . $token,
                'Content-Type: application/json; charset=UTF-8',
            );
            $postBody  = json_encode($data,true);
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_POST, true);
            if(substr($url, 0, 5) == 'https') {
                curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);    //SSL 报错时使用
                curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);    //SSL 报错时使用
            }
            curl_setopt($curl, CURLOPT_HTTPHEADER, $header);//设置请求头
            curl_setopt($curl, CURLOPT_POSTFIELDS, $postBody);//设置请求体
            curl_setopt($curl, CURLOPT_TIMEOUT, 2);          //单位 秒，也可以使用
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');//    使用一个自定义的请求信息来代替"GET"或"HEAD"作为HTTP请求
            $arr = curl_exec($curl);
            $arr = json_decode($arr,JSON_OBJECT_AS_ARRAY);
            return $arr;
        }catch (\Throwable $e) {
            return false;
        }
    }
}

/*******************************OPPO************************/
function getOppoOtherTag($dimension,$i){
    $j = (LG_NAME=='cn_name') ? 0 : 1;
    return \mvc::$cfg['oppo'][$dimension]['otherTag'][$i][$j];
}