<?php
/**
 * Created by PhpStorm.
 * User: yemxing
 * Date: 2018/1/2
 * Time: 10:19
 */


function curl($url, $params = false, $ispost = 0,$cookie='')
{
    $httpInfo = array();
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36');
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt ($ch,CURLOPT_REFERER,Config('website.data'));
    curl_setopt($ch, CURLOPT_COOKIE, $cookie);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在
    if ($ispost) {
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
        curl_setopt($ch, CURLOPT_URL, $url);
    } else {
        if ($params) {
            if (is_array($params)) {
                $params = http_build_query($params);
            }
            curl_setopt($ch, CURLOPT_URL, $url . '?' . $params);
        } else {
            curl_setopt($ch, CURLOPT_URL, $url);
        }
    }

    $response = curl_exec($ch);
    if ($response === FALSE) {
//        echo "cURL Error: " . curl_error($ch);
        return false;
    }
//    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
//    $httpInfo = array_merge($httpInfo, curl_getinfo($ch));
    curl_close($ch);
    return $response;
}

//检查权限,仅支持验证单个权限
function perm($userId,$perm1=''){
    $permArr=config('website.perm');
    $NotAuth=$permArr['notAuth'];
    $AdminID=$permArr['adminGroup'];
    if((!in_array($perm1,$NotAuth)) && !in_array($userId,$AdminID)) {//过滤不用鉴权的方法与用户
        $permID = $permArr['id'];
        $url = $permArr['url'] . '/' . $userId . '/' . $permID . '?perms=' . $perm1;
        $result = json_decode(curl($url, '', 0),true);
        if(!isset($result['retcode']) || $result['retcode']!==0 || $result['data']['perms'][$perm1]==false){
            return false;
        }else{
            return true;
        }
    }else{
        return true;
    }
}

//上传文件接口签名
function Autograph($exts='jpg|png|gif'){
    $url=Config('website.UploadUrl');
    $data['k1']=time();
    $data['k2']=MD5(MD5($data['k1']).Config('fixed.UploadKey'));
    echo '<script>
            k1="'.$data['k1'].'";
            k2="'.$data['k2'].'";
            UploadImgUrl="'.$url.'"
            exts="'.$exts.'"
        </script>';
}

//外部接口加密验证
function Validate($data){
    $key=Config('fixed.MD5KEY');
    $sign=!empty($data['AuthSign'])?$data['AuthSign']:'';
    if(empty($sign) || empty($data['time'])){
        return false;
    }
    unset($data['AuthSign']);
    if((string)MD5(MD5(http_build_query($data)).$key)===(string)$sign){
        return true;
    }else{
        return http_build_query($data);
    }
}

/**
 * 二维数组根据字段进行排序
 * @params array $array 需要排序的数组
 * @params string $field 排序的字段
 * @params string $sort 排序顺序标志 SORT_DESC 降序;SORT_ASC 升序
 */
function arraySequence($array, $field, $sort = 'SORT_DESC')
{
    $arrSort = array();
    foreach ($array as $uniqid => $row) {
        foreach ($row as $key => $value) {
            $arrSort[$key][$uniqid] = $value;
        }
    }
    array_multisort($arrSort[$field], constant($sort), $array);
    return $array;
}

//根据权限生成菜单
function menu($menu,$user){
    $perm=chils($menu);
    $perm1=implode(',',$perm);
    $permArr=config('website.perm');
    $perm=$permArr['id'];
    $url=$permArr['url'].'/'.$user.'/'.$perm.'?perms='.$perm1;
    $result=json_decode(curl($url,'',false),true);
    if($result['retcode']===0){
        $find=$result['data']['perms'];
        $menu=DeleteMenu($menu,$find);
        if(!empty($menu) && is_array($menu)){
           foreach ($menu as $k=>$v){
                $v=(array)$v;
                if($v['title']!='Dashboard' && count($v['childs'])==0 && empty($v['href']))
                    unset($menu[$k]);
           }
        }
        return array_merge($menu);
    }else{
        return false;
    }
}

//提取菜单
function chils($chils){
    $perms=[];
    foreach ($chils as $k=>$v){
        $perm_a=[];
        $perm=[];
        if(strlen($v->href)>2){
            $action=explode('/',$v->href);
            $perm[]=end($action);
        }
        if(count($v->childs)>0){
            $perm_a=chils($v->childs);
        }
        $perms=array_merge($perms,array_merge($perm,$perm_a));
    }
    return $perms;
}

//删除没有权限的菜单
function DeleteMenu($menu,$find){
    foreach ($menu as $k=>$v){
        if(strlen($v->href)>2){
            $action=explode('/',$v->href);
            $key=end($action);
            if(empty($find[$key]) || $find[$key]==false)
                unset($menu[$k]);
        }else{
            if(count($v->childs)>0){
                $menu[$k]->childs=array_values(DeleteMenu($v->childs,$find));
            }
            if(!count($v->childs)>0 && $v->title!='首页') unset($menu[$k]);//为了删除没有下级的目录
        }
    }
    return array_values($menu);
}

function CheckActive($menus, &$arr, $url)
{
    for ($i = 0; $i < count($menus); $i++) {
        $menu = $menus[$i];
        array_push($arr, $i);

        if (isset($menu->href) && ($menu->href == $url || ($menu->href == '/' && $url == '//')))
            return true;
        if (isset($menu->childs) && count($menu->childs) > 0) {
            $ret = CheckActive($menu->childs, $arr, $url);
            if ($ret)
                return $ret;
        }
        array_pop($arr);
    }
    return false;
}

function createMenuReal($menus, $active, $level)
{
    $subclass = ($level == 0) ? 'nav-second-level' : 'nav-third-level';

    $ret = '';
    for ($ii = 0; $ii < ($level == 0 ? 1 : 2); $ii++) {
        for ($i = 0; $i < count($menus); $i++) {
            $menu = $menus[$i];
            $act = (count($active) > $level && $active[$level] == $i) ? true : false;
            $actclass = $act ? ' class="active"' : '';
            $actmenu = $act ? ' in' : '';

            if (isset($menu->childs) && count($menu->childs) > 0) {
                if ($ii != 0 && $level > 0)
                    continue;
                $ret .= '<li' . $actclass . '><a><i class="'
                    . $menu->class . '"></i><span class="nav-label">'
                    . $menu->title . '</span><span class="fa arrow"></span></a>'
                    . '<ul class="nav ' . $subclass . ' collapse' . $actmenu . '">'
                    . createMenuReal($menu->childs, $act ? $active : [], $level + 1)
                    . '</ul></li>';
            } else {
                if ($ii != 1 && $level > 0)
                    continue;
                $ret .= '<li' . $actclass . '><a href="' . $menu->href . '"><i class="' .
                    $menu->class . '"></i><span class="nav-label">' . $menu->title . '</span></a></li>';
            }
        }
    }

    return $ret;
}

function createMenu($menus, $url)
{
    $actives = [];
    $ret = CheckActive($menus, $actives, $url);
    if (!$ret)
        $actives = [];
    return createMenuReal($menus, $actives, 0);
}

function Crumbs($menus, $uri)
{
    $actives = [];
    CheckActive($menus, $actives, $uri);
    $ret = '';
    foreach ($actives as $k => $v) {
        if(!empty($menus['childs'])) $menus = (array)$menus['childs'][$v];
        else $menus = (array)$menus[$v];
        $ret .= '<li class="active"><a href="'.$menus['href'].'">' . $menus['title'] . '</a></li>';
    }
    return $ret;
}

function SendAlarmMsg($data, $key = 'PurSafeStock', $ToUser = 'INNER_PERSON'){
    $touser_json = json_encode($ToUser);
    $check['touser'] = $touser_json;
    $check['data'] = urldecode(json_encode($data));
    $check['pf'] = -1;
    $check['keyword'] = $key;
    $check['is_ignore'] = true;
    $check['k1']=time();
    $check['k2']=MD5(MD5($check['k1']).Config('website.UploadKey'));
    $res = json_decode(curl('http://api.ichunt.com/msg/sendMessageByAuto', $check),true);
    if(empty($res['err_code']) || $res['err_code']!=0) return false;
    return true;
}

/**
 * php上传文件到oss
 * @param string $Path 文件路径
 * @param array $data
 * @return array
 * Created on 2018-03-15
 */
function UploadToOss($Path='',$data=[]){
    if(empty($Path)) return false;
    $field=new CurlFile($Path);
    if(!$field) return false;
    $data['upload']=$field;
    $url=Config('website.UploadUrl');
    $data['source']=1;
    $data['k1']=time();
    $data['k2']=MD5(MD5($data['k1']).Config('website.UploadKey'));
    $data['FileType']='csv';
    $result=curl($url,$data,true);
    return $result;
}

//生成的文件上传到OSS
function SaveDownFile($FileName=''){
    if(empty($FileName)) return false;
    $result=json_decode(UploadToOss(storage_path().DIRECTORY_SEPARATOR.'app'.DIRECTORY_SEPARATOR.'uploads'.DIRECTORY_SEPARATOR.$FileName),true);
    if(empty($result['code']) || $result['code'] != 200 || empty($result['data'][0])) return false;
    return $result['data'][0];
}

function ErrorLog($ErrInfo,$ErrCode=null,$ErrMsg=null){
    $Route=debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
    $ErrFile=$Route[1]['file'];
    $line=$Route[1]['line'];
    $Action=request()->route('key');
    if(is_array($ErrInfo)){
        $ErrMsg=empty($ErrInfo[1])?'':$ErrInfo[1];
        $ErrCode=empty($ErrInfo[0])?'':$ErrInfo[0];
    }
    if(empty($ErrCode)) return true;
    $ErrInfo=\LogReport::anlyError($ErrMsg,$ErrFile,$line,$ErrCode,$Action);//错误内容, 错误文件, 错误行数, 错误码, 错误方法名); 返回固定格式字符串,第一个参数可传数组
    \LogReport::write($ErrInfo); //将anlyError返回的数据作参数传入
}

/**
 * @param array|bool $arr 指定收集的字段
 * @param bool $empty 是否过滤空值
 * @param array $data 需要过滤数据,不指定从get、post拿指定字段
 * @return array|string
 */

function TrimX($arr = false, $empty = true, $data = [])
{
    if (empty($data)) $data = \Illuminate\Support\Facades\Request::only($arr);
    if (is_array($data)) {
        foreach ($data as $k => &$v) {
            if (!empty($v) && $v != '0' && is_string($v)) {
                $data[$k] = trim(trim($v, ' '));
            } elseif (is_array($v)) {
                array_walk_recursive($v, function(&$i){
                    if (is_string($i)) {
                        $i = trim(trim($i, ' '));
                    }
                });
            }
            if ($empty == true) if ((empty($v) && $v != 0) || $v == 'undefined' || $v == null) unset($data[$k]);
            if (is_array($arr) && count($arr) > 0 && count($data) > 0) {
                if (!in_array($k, $arr)) unset($data[$k]);
            }
        }
    } else {
        $data = trim(trim($data, ' '));
    }
    return $data;
}

//获取key用于发送消息
function authkey(){
    $data['k1']=time();
    $data['k2']=MD5(MD5($data['k1']).Config('website.UploadKey'));
    return $data;
}

function apiReturn($errcode=0,$errmsg='ok',$datas=[]){
    $data = [
        'errcode' => $errcode,
        'errmsg'  => $errmsg,
        'code'    => $errcode,
        'msg'     => $errmsg,
    ];
    if(!empty($datas['total']))
        $data['count'] = $datas['total'];
    if(!empty($datas))
        foreach ($datas as $k=>$v)
            $data[$k] = $v;
    return response()->json($data,200);
}

function  resolves($id){
    $data['db']    = 'ic_goods_0';
    $data['table'] = 'ic_sku_0';
    $dbCode     = substr($id,-2,1);
    $tableCode  = substr($id,-1);
    $dbID       = substr($id, 0, -2);
    $data['db']     =   'ic_goods_'.$dbCode;
    $data['table']  =   'ic_sku_'.$tableCode;
    $data['id']     =   $dbID;
    return $data;
}