<?php

use Pyramid\Component\Utility\StringTool;

//语言
if (!function_exists('lang')) {
    function lang($string = '') {
        static $langs;
        $langsets = config()->get('langs');
        $lang = isset($_COOKIE['language']) ? $_COOKIE['language'] : 'zhCN';
        if (!isset($langsets[$lang]) || empty($langsets[$lang]['status'])) {
            $lang = 'zhCN';
        }
        if (!isset($langs)) {
            $langs = db_query("select name, value from {language} where language=:lang", array(':lang'=>$lang))->fetchAllKeyed();
        }
        if (!isset($langs[$string])) {
            $langs[$string] = $string;
            db_insert('language')
                ->fields(array(
                    'language' => $lang,
                    'name'     => $string,
                    'created'  => time(),
                ))
                ->execute();
        } elseif ($langs[$string] === '') {
            $langs[$string] = $string;
        }
        return $langs[$string];
    }
}

//格式化时间显示
if(!function_exists('formatTimeShown')) {
    function formatTimeShown($stamp, $format='Y-m-d H:i:s') {
        $diff = time() - $stamp;
        if ($diff < 60) {
        return  $diff . ' 秒前 ('.date('H:i:s',$stamp).')';
        } elseif ($diff < 3600) {
            return floor($diff/60) . ' 分钟前 ('.date('H:i:s',$stamp).')';
        } elseif ($diff < 86400) {
            return floor($diff/3600) . ' 小时前 ('.date('H:i:s',$stamp).')';
        } else {
            return date($format, $stamp);
        }
    }
}

//转义字符
if (!function_exists('check_plain')) {
    function check_plain($string = '') {
        return StringTool::checkPlain($string);
    }
}

//分页数据输出
if (!function_exists('themePager')) {
    function themePager($pager, $pageurl = '', $nojump = false) {
        static $li = '<li><a href="%spage=%s">%s</a></li>';
        static $lt = '<li><span>%s</span></li>';
        static $hasjs;
        $unique   = uniqid();
        $pageurl .= strpos($pageurl,'?') ? '&' : '?';
        $return  = '<ul class="pagination">';
        $return .= sprintf($lt, $pager['page'].'/<strong>'.$pager['pages'].'</strong> '.lang('页'));
        $return .= sprintf($lt, sprintf(lang('共 %s 条'), "<strong>{$pager['total']}</strong>"));
        if ($pager['page'] > 1) {
            $return .= sprintf($li, $pageurl, $pager['page']-1, lang('上一页'));
        }
        if ($pager['page'] < $pager['pages']) {
            $return .= sprintf($li, $pageurl, $pager['page']+1, lang('下一页'));
        }
        if (!$nojump) {
          $return .= "<li><a href='javascript:showjumpdiv(\"{$unique}\");'> ".lang('跳转')." </a></li>"
            . "<div id='div{$unique}' class='jumpdiv'>"
            . " <form method='post' action='{$pageurl}'>"
            . "  <input id='input{$unique}' type='text' name='page' /> " . lang('页')
            . "  <button type='submit' class='btn btn-info btn-xs'> ".lang('确定跳转')." </button>"
            . " </form>"
            . "</div>";
        }
        $return .= '</ul>';
        if (!$hasjs) {
            $return .= '<script>function showjumpdiv(unique) { $("#div"+unique).toggle();$("#input"+unique).focus();}</script>';
            $hasjs = true;
        }
        return $return;
    }
}

/**
 * 渲染表单数据
 
    type: 类型
    name: 表单名
    label: 标题
    plugin: 插件css值
    required: 是否必填
    placeholder: 提示语
    default: 默认值
 */
function themeForm($data) {
    foreach ($data as $k=>$v) {
        switch ($v['type']) {
            case 'textarea':
                echo '<div class="form-group">'
                   . '<label class="col-sm-3 control-label no-padding-right '.($v['required']?'required':'').'"> '.$v['label']. ' </label>'
                   . '<div class="col-sm-9">'
                   . '<div class="input-wrap col-sm-9">'
                   . '<textarea name="'.$v['name'].'" class="'.$v['plugin'].'" placeholder="'.(isset($v['placeholder'])?$v['placeholder']:'').'" rows="3">'.$v['default'].'</textarea>'
                   . '</div>'
                   . '</div>'
                   . '</div>';
                break;
            case 'image':
                echo '<div class="form-group">'
                   . '<label class="col-sm-3 control-label no-padding-right '.($v['required']?'required':'').'"> '.$v['label']. ' </label>'
                   . '<div class="col-sm-9">'
                   . '<div class="input-wrap col-sm-9">'
                   . '<input type="hidden" name="'.$v['name'].'" class="form-control image-src'.$k.' '.$v['plugin'].'" value="'.$v['default'].'" />'
                   . '<small class="color-gray">'.(isset($v['placeholder'])?$v['placeholder']:'').'</small>'
                   . '<span class="avatarUpload" data-token="'.$v['formtoken']['token'].'" data-stamp="'.$v['formtoken']['stamp'].'" data-id="src'.$k.'" id="src'.$k.'"> </span>'
                   . '<img class="imageshow-src'.$k.'" style="max-width:320px;max-height:150px;" src="'.($v['default']?$v['default']:'/theme/admin/assets/images/trans.png').'"/>'
                   . ($v['default']?'<span class="delimg fa fa-trash" data-delimg="src'.$k.'"></span>':'')
                   . '</div>'
                   . '</div>'
                   . '</div>';
                break;
            case 'multiple select':
                $options = $v['required'] ? '':'<option value="" ></option>';
                foreach ($v['option'] as $kk=>$vv) {
                    if (in_array($kk, $v['default'])) {
                        $options .= "<option value='{$kk}' selected>{$vv}</option>";
                    } else {
                        $options .= "<option value='{$kk}'>{$vv}</option>";
                    }
                }
                echo '<div class="form-group">'
                   . '<label class="col-sm-3 control-label no-padding-right '.($v['required']?'required':'').'"> '.$v['label']. ' </label>'
                   . '<div class="col-sm-9">'
                   . '<div class="input-wrap col-sm-9">'
                   . '<select name="'.$v['name'].'" class="form-control '.$v['plugin'].'" placeholder="'.(isset($v['placeholder'])?$v['placeholder']:'').'" multiple="multiple">'
                   . $options
                   . '</select>'
                   . '</div>'
                   . '</div>'
                   . '</div>';
                break;
            case 'select':
                $options = $v['required'] ? '':'<option value="" ></option>';
                foreach ($v['option'] as $kk=>$vv) {
                    if ($v['default'] == $kk) {
                        $options .= "<option value='{$kk}' selected>{$vv}</option>";
                    } else {
                        $options .= "<option value='{$kk}'>{$vv}</option>";
                    }
                }
                echo '<div class="form-group">'
                   . '<label class="col-sm-3 control-label no-padding-right '.($v['required']?'required':'').'"> '.$v['label']. ' </label>'
                   . '<div class="col-sm-9">'
                   . '<div class="input-wrap col-sm-9">'
                   . '<select name="'.$v['name'].'" class="form-control '.$v['plugin'].'" placeholder="'.(isset($v['placeholder'])?$v['placeholder']:'').'" >'
                   . $options
                   . '</select>'
                   . '</div>'
                   . '</div>'
                   . '</div>';
                break;
            case 'file':
                echo '<div class="form-group">'
                   . '<label class="col-sm-3 control-label no-padding-right '.($v['required']?'required':'').'"> '.$v['label']. ' </label>'
                   . '<div class="col-sm-9">'
                   . '<div class="input-wrap col-sm-9">'
                   . '<input type="hidden" name="'.$v['name'].'" class="form-control file-src'.$k.' '.$v['plugin'].'" value="'.$v['default'].'" />'
                   . '<small class="color-gray">'.(isset($v['placeholder'])?$v['placeholder']:'').'</small>'
                   . '<span class="fileUpload" data-token="'.$v['formtoken']['token'].'" data-stamp="'.$v['formtoken']['stamp'].'" data-id="src'.$k.'" id="src'.$k.'"> </span>'
                   . '<a target="_blank" class="fileshow-src'.$k.'" href="'.($v['default']?$v['default']:'#').'">'.($v['default']?$v['default']:'').'</a> '
                   . ($v['default']?'<span class="delfile fa fa-trash" data-delfile="src'.$k.'"></span>':'')
                   . '</div>'
                   . '</div>'
                   . '</div>';
                break;
            case 'password':
                echo '<div class="form-group">'
                   . '<label class="col-sm-3 control-label no-padding-right '.($v['required']?'required':'').'"> '.$v['label']. ' </label>'
                   . '<div class="col-sm-9">'
                   . '<div class="input-wrap col-sm-9">'
                   . '<input type="password" name="'.$v['name'].'" class="form-control '.$v['plugin'].'" placeholder="'.(isset($v['placeholder'])?$v['placeholder']:'').'" value="'.$v['default'].'" />'
                   . '</div>'
                   . '</div>'
                   . '</div>';
                break;
            case 'view':
                echo '<div class="form-group">'
                   . ' <div class="col-sm-3 text-right no-padding-right">'.$v['label'].'</div>'
                   . ' <div class="col-sm-9 '.(!empty($v['plugin'])?$v['plugin']:'').'"><strong>'.$v['default'].'</strong></div>'
                   . '</div>';
                break;
            case 'hidden':
                echo '<input type="hidden" name="'.$v['name'].'" value="'.$v['default'].'" />';
                break;
            case 'hr':
                echo '<hr />';
                break;
            case 'text':
            default:
                echo '<div class="form-group">'
                   . '<label class="col-sm-3 control-label no-padding-right '.($v['required']?'required':'').'"> '.$v['label']. ' </label>'
                   . '<div class="col-sm-9">'
                   . '<div class="input-wrap col-sm-9">'
                   . '<input type="text" name="'.$v['name'].'" class="form-control '.$v['plugin'].'" placeholder="'.(isset($v['placeholder'])?$v['placeholder']:'').'" value="'.$v['default'].'" />'
                   . '</div>'
                   . '</div>'
                   . '</div>';
                break;
        }
    }
}


//生成一个表单token
function generateFormToken() {
    $stamp = time();
    $token = md5(strrev($stamp).LICENSE.$stamp);
    return array('token'=>$token, 'stamp'=>$stamp);
}

//验证表单token
function validateFormToken($stamp, $token, $time = 0) {
    if ($time && abs(time()-(int)$stamp) > $time) {
        return false;
    }
    $value = md5(strrev($stamp).LICENSE.$stamp);
    return $token == $value;
}

//验证Token
function validateRequestToken($request, $time = 0) {
    $token = $request->getParameter('token','');
    $stamp = $request->getParameter('stamp','0');
    if (!validateFormToken($stamp, $token, $time)) {
        throw new ErrorException('非法或过期的Token请求');
    }
}

//根据数字生成字符串
function encrypt_sns_key($uid) {
    $str = 'abcd2efg3hi7jkl5mn4op6qrst8uvw9xyz';
    $len = strlen($str) - 10;
    $start = rand(0, $len);
    $first = substr($str, $start, 1);
    $surplus = substr($str, $start, 10);
    $hash = $first;
    $uid = (string) $uid;
    $ulen = strlen($uid);
    for($i=0;$i<$ulen;$i++) {
        $hash .= $surplus[$uid[$i]];
    }
    $hash .= $str[$ulen];
    return $hash;
}

//反序列数字字符串
function decrypt_sns_key($hash) {
    $str = 'abcd2efg3hi7jkl5mn4op6qrst8uvw9xyz';
    $first = substr($hash,0,1);
    $last = substr($hash,-1,1);
    $pos = strpos($str, $first);
    $surplus = substr($str, $pos, 10);
    $uid = '';
    $hlen = strlen($hash);
    for($i=1;$i<$hlen;$i++) {
        $uid .= strpos($surplus, $hash[$i]);
    }
    $ulen = strpos($str, $last);
    $uid = substr($uid, 0, $ulen);
    return $hlen == strlen($uid) + 2 ? (int) $uid : 0;
}

//下载
function make_download($file, $showname = '') {
    $filename = $showname ? $showname : basename($file);
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.$filename);
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}

function canbepdfviewer($v, $request = '') {
    $ext = strtolower(strrchr($v->file,'.'));
    if ($ext != '.pdf') {
        return false;
    }
    if ($request) {
        $agent = $request->server->getParameter('HTTP_USER_AGENT');
        if (preg_match('/MSIE\s*7/i',$agent)) {
            return false;
        }
    }
    return true;
}
