request->baseUrl;
}
function createUrl($route, $params = array(), $ampersand = '&')
{
return webapp()->controller->createUrl($route, $params, $ampersand);
}
function getAttributes($data, $returnNull = TRUE)
{
if($data)
{
foreach($data AS $obj)
{
$result[] = $obj->getAttributes();
}
return $result;
}
return $returnNull ? NULL : array();
}
function getAttribute($obj, $returnNull = TRUE)
{
if(is_object($obj))
{
return $obj->getAttributes();
}
return $returnNull ? NULL : array();
}
function debug($data, $type = TRUE, $exit = TRUE)
{
echo '
';
if ($type) print_r($data);
else var_dump($data);
echo '
';
if ($exit) die;
}
function strip_html($html)
{
$html = strip_tags($html);
$html = preg_replace ('/\n/is', '', $html);
$html = preg_replace ('/ | /is', '', $html);
$html = preg_replace ('/ /is', '', $html);
return $html;
}
function numToUpper($number)
{
$number = substr($number, 0, 2);
$arr = array("零","一","二","三","四","五","六","七","八","九");
if (strlen($number) == 1) {
$result = $arr[$number];
} else {
if ($number == 10) {
$result ="十";
} else {
if ($number < 20) {
$result = "十";
} else {
$result = $arr[substr($number, 0, 1)] ."十";
}
if (substr($number, 1, 1) != "0") {
$result .= $arr[substr($number, 1, 1)];
}
}
}
return $result;
}
function numToLetter($number)
{
$latters = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
$number = (int)$number;
$result = '';
if ($number >= 1 AND $number <= 26) {
$result = $latters[$number - 1];
}
return $result;
}
function letterToNum($letter)
{
$number = 0;
$letters = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
$result = 0;
foreach ($letters as $k => $v) {
if (strtoupper(trim($letter)) == $v) {
$result = $number;
break;
}
$number++;
}
return $result;
}
function jsonEncode($arr)
{
$jsonSupport = version_compare(PHP_VERSION, '5.4', '>=');
if ($jsonSupport)
{
$result = json_encode($arr, JSON_UNESCAPED_UNICODE);
}
else
{
$result = json_encode($arr);
// $result = preg_replace("#\\\u([0-9a-f]+)#ie", "iconv('UCS-2', 'UTF-8', pack('H4', '\\1'))", $result);
$result = preg_replace("#\\\u([0-9a-f]{4})#ie", "iconv('UCS-2BE', 'UTF-8', pack('H4', '\\1'))", $result);
}
return $result;
}
function jsonDecodeBigInt($input){
// return json_decode($arr,true,512,JSON_BIGINT_AS_STRING);
if (version_compare(PHP_VERSION, '5.4.0', '>=') && !(defined('JSON_C_VERSION') && PHP_INT_SIZE > 4)) {
$obj = json_decode($input, true, 512, JSON_BIGINT_AS_STRING);
} else {
$max_int_length = strlen((string) PHP_INT_MAX) - 1;
$json_without_bigints = preg_replace('/:\s*(-?\d{'.$max_int_length.',})/', ': "$1"', $input);
$obj = json_decode($json_without_bigints,true);
}
}
//针对全学科试题id溢出
function jsonEncodeBigInt($arr){
if(isset($arr['new_items'])){
foreach ($arr['new_items'] as $key => $val){
if(isset($val['stemId'])){
$arr['new_items'][$key]['stemId']=number_format($val['stemId'],0,'','');
}
if(isset($val['topicId'])){
$arr['new_items'][$key]['topicId']=number_format($val['topicId'],0,'','');
}
}
}
return jsonEncode($arr);
}
/**
* @param int $status
* @param string $msg
* @param array $data
* 格式化ajax返回内容
*/
function returnMsg($status = 0, $msg = '', $data = array())
{
$result = array();
$result['status'] = $status;
$result['msg'] = $msg;
$result['data'] = $data;
exit(json_encode($result));
}
/**
* @param $method
* @param string $type
* @param array $params
* @return array
* 请求处理方法
*/
function http($method, $type='POST', $authUsername, $params=array(),$subject=0,$header=array())
{
if(!$subject){
$imsApi = Yii::app()->params['ims']['url'];
$sign = $authUsername.Yii::app()->params['ims']['sign_url'].Yii::app()->params['ims']['sign'];
$authPassword = md5($sign);
$url = $imsApi.$method;
}elseif($subject=='armor'){
$imsApi = Yii::app()->params['armor']['url'];
$sign = $authUsername.Yii::app()->params['armor']['sign_url'].Yii::app()->params['armor']['sign'];
$authPassword = md5($sign);
$url = $imsApi.$method;
}elseif($subject=='online'){
$onlineCardApi=Yii::app()->params['getOnlineToken'];
$url=$onlineCardApi['url'];
$authUsername=$onlineCardApi['username'];
$authPassword=$onlineCardApi['password'];
}elseif($subject=='cgi'){
$Api=Yii::app()->params['zsy_api_url'];
$url=$Api.$method;
if(strpos($method,'/cms/')!==false){
$url=str_replace('xiaoben','xueping',$url);
}
$authPassword = md5($authUsername.Yii::app()->params['zsy_api_key']);
}
$response = array();
$type = strtoupper($type);
if($type=='GET'){
if ($params){
$urlString = http_build_query($params);
$url = $url.'?'.$urlString;
}
$headerArr=array(
"authorization: Basic ". base64_encode($authUsername.":".$authPassword),
"cache-control: no-cache"
);
if($header){
$headerArr=array_merge($headerArr,$header);
}
$curl = curl_init();
if($curl){
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 10,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_HTTPHEADER => $headerArr,
));
$response = curl_exec($curl);
curl_close($curl);
}
}elseif($type=="PUT"){
$curl = @curl_init();
if ($curl) {
if(empty($params)){
$data = '{}';
}else{
$data = json_encode($params);
}
$headerArr=array(
'Content-Type: application/json',
'Content-Length: '. strlen($data),
"cache-control: no-cache"
);
if($header){
$headerArr=array_merge($headerArr,$header);
}
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, $authUsername .':'. $authPassword);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headerArr);
$response = curl_exec($curl);
curl_close($curl);
}
}elseif ($type == 'DELETE'){
$curl = @curl_init();
if ($curl) {
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, $authUsername .':'. $authPassword);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
));
$response = curl_exec($curl);
curl_close($curl);
}
}
elseif($type=="FORM"){
$curl = @curl_init();
if ($curl) {
if(is_array($params)){
$data = json_encode($params);
}else{
$data = $params;
}
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_USERPWD => $authUsername .':'. $authPassword,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 10,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => $data,
CURLOPT_HTTPHEADER => array(
"Cache-Control: no-cache",
"content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW"
),
));
$response = curl_exec($curl);
curl_close($curl);
}
}else{
$curl = @curl_init();
if ($curl) {
if(empty($params)){
$data = '{}';
}else{
$data = json_encode($params);
}
$headerArr=array(
"authorization: Basic ". base64_encode($authUsername.":".$authPassword),
"cache-control: no-cache",
'Content-Type: application/json',
);
if($header){
$headerArr=array_merge($headerArr,$header);
}
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, $authUsername .':'. $authPassword);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headerArr);
$response = curl_exec($curl);
curl_close($curl);
}
}
return $response;
}
/**
* @param $response
* @return array
* 处理返回数据
*/
function formatResponse($response)
{
$result = array();
if($response){
$responseArr = json_decode($response,true);
if(isset($responseArr['errCode']) && $responseArr['errCode'] === '00'){
if(isset($responseArr['data'])){
$result['status'] = 1;
$result['data'] = $responseArr['data'];
}else{
$result['status'] = 1;
$result['data'] = isset($responseArr['errMsg'])?$responseArr['errMsg']:"操作成功";
}
}else{
$errMsg = isset($responseArr['errMsg'])?$responseArr['errMsg']:"ims接口异常";
$result['status'] = 0;
$result['data'] = $errMsg;
}
}else{
$result['status'] = 0;
$result['data'] = '无法获取数据!';
}
return $result;
}
function imsBasicAuth($username ,$password){
return $username.':'.md5($username.$password);
}
//格式化打印数据
function dd($data)
{
echo '';
print_r($data);die;
}
/**
* @param $data 分页数据
* @param $method 调整地址
* @param $params 参数
* @return string
* 格式页面
*/
function formatPage($data, $method, $params){
$html = '';
if ($data && is_array($data)){
if($data['pages']>1){
$html.= '
';
$html.= '';
$html.= '共'.$data['total'].'条记录, 第'.$data['pageNum'].'页,共'. $data['pages'].'页';
$html.= '';
//上一页
$params['page'] = $data['prePage'];
$url = Yii::app()->createUrl($method.'?'.http_build_query($params));
if($data['isFirstPage']){
$html.= "上一页";
}else{
$html.= "上一页";
}
//中间页
$page = $data['pageNum']; //当前页
$count = $data['pages']; //总页数
$num = 10; //显示多少页
$num = min($count,$num); //处理显示的页码数大于总页数的情况
if($page > $count || $page < 1) return; //处理非法页号的情况
$end = $page + floor($num/2) <= $count ? $page + floor($num/2) : $count; //计算结束页号
$start = $end - $num + 1; //计算开始页号
if($start < 1) { //处理开始页号小于1的情况
$end -= $start - 1;
$start = 1;
}
for($i=$start; $i<=$end; $i++) { //输出分页条,请自行添加链接样式
$params['page'] = $i;
$url = Yii::app()->createUrl($method.'?'.http_build_query($params));
if ($i == $page) {
$html.= "{$i}";
} else {
$html.= "{$i}";
}
}
//下一页
$params['page'] = $data['nextPage'];
$url = Yii::app()->createUrl($method.'?'.http_build_query($params));
if($data['isLastPage']){
$html.= "下一页";
}else{
$html.= "下一页";
}
}
}
return $html;
}
/**
* 验证日期
* @param $date
* @return bool
*/
function getCheckDate($date){
if (preg_match ("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $date, $parts))
{
//检测是否为日期
if(checkdate($parts[2],$parts[3],$parts[1]))
return true;
else
return false;
}
}
//品目类型
function itemType($type)
{
switch ($type){
case '1':
$name = '固定资产';
break;
case '2':
$name = '原材料';
break;
case '3':
$name = '产成品';
break;
case '4':
$name = '低值易耗品';
break;
default:
$name = '固定资产';
}
return $name;
}
/**
* in_array() php 5.3 有问题重新写
* @param type $value
* @param type $arr
* @return boolean
*/
function inArray($value,$arr){
if($arr){
foreach($arr as $v){
if((string)$value === (string)$v){
return true;
}
}
}
return false;
}
/**
* 获取学科题型
* @param $subjectId
* @return string
*/
function getSubjectTopicType($subjectId){
$logicType = array(
//英语
8 => array(
'1'=> '单项填空',
'2'=> '完形填空',
'3'=> '阅读理解',
'4'=> '任务型阅读',
'5'=> '七选五',
'6'=> '语法填空',
'7'=> '短文改错',
'8'=> '单词拼写',
'9'=> '选词填空',
'10'=> '课文填空',
'11'=> '句子翻译',
'12'=> '完成句子',
'13'=> '书面表达',
'14'=> '阅读表达',
'15'=> '考试听力',
'16' =>'概要写作',
'17' =>'读后续写',
'18' =>'单句改错',
'19' =>'单句语法填空',
'20' =>'单句翻译',
),
//语文
9 => array(
'1' => '现代文阅读',
'2' => '古代诗文阅读',
'3' => '语言文字运用',
'4' => '写作',
'5' => '文言文阅读',
'6' => '古诗词鉴赏',
'7' => '名句名篇默写',
'8' => '现代文阅读(一)',
'9' => '现代文阅读(二)',
'10' => '作文',
'11' => '附加题',
),
//物理
12 => array(
'1' => '选择题',
'2' => '非选择题',
'3' => '选考题',
'4' => '单选题',
'5' => '多选题',
'6' => '简答题',
'7' => '计算题',
'8' => '选择题I',
'9' => '选择题II',
),
//化学
13 => array(
'1' => '选择题',
'2' => '必考题',
'3' => '选考题',
'4' => '非选择题',
'5' => '选做题',
'6' => '加试题',
),
//生物
14 => array(
'1' => '选择题',
'2' => '必考题',
'3' => '单择题',
'4' => '多选题',
'5' => '非选择题',
),
//政治
15 => array(
'1' => '选择题',
'2' => '综合题',
'3' => '单项选择',
'4' => '解析题',
'5' => '判断',
'6' => '选择I',
'7' => '选择II',
),
//历史
16 => array(
'1' => '选择题',
'2' => '非选择题',
),
//地理
17 => array(
'1' => '选择题',
'2' => '非选择题',
'3' => '单项选择题',
'4' => '双项选择题',
'5' => '综合题',
),
);
if(isset($logicType[$subjectId])){
return $logicType[$subjectId];
}else{
return array();
}
}
/**
* 获取学科名称
* @param $subjectId
* @return mixed|string
*/
function getSubjectName($subjectId){
$subject_name_arr = array(
3 => '数学',
6 => '数学',
8 => '英语',
9 => '语文',
12 => '物理',
13 => '化学',
14 => '生物',
15 => '政治',
16 => '历史',
17 => '地理',
18 => '理综',
19 => '文综',
);
return isset($subject_name_arr[$subjectId])?$subject_name_arr[$subjectId]:'';
}
//转码 (php排序函数无法直接对utf-8编码汉字排序)
function utf8_array_asort(&$array)
{
if (!isset($array) || !is_array($array)) {
return false;
}
foreach ($array as $k => $v) {
$array[$k] = iconv('UTF-8', 'GBK//IGNORE', $v);
}
return true;
}
//多维数组排序
function arrayMsort(&$data,$field)
{
$regions = _array_column($data, $field);
utf8_array_asort($regions);
array_multisort($regions, SORT_ASC, $data);
}
/**
* 返回数组中指定的一列
* @param $input 需要取出数组列的多维数组(或结果集)
* @param $columnKey 需要返回值的列,它可以是索引数组的列索引,或者是关联数组的列的键。 也可以是NULL,此时将返回整个数组(配合index_key参数来重置数组键的时候,非常管用)
* @param null $indexKey 作为返回数组的索引/键的列,它可以是该列的整数索引,或者字符串键值。
* @return array 返回值
*/
function _array_column($input, $columnKey, $indexKey = null)
{
if (!function_exists('array_column')) {
$columnKeyIsNumber = (is_numeric($columnKey)) ? true : false;
$indexKeyIsNull = (is_null($indexKey)) ? true : false;
$indexKeyIsNumber = (is_numeric($indexKey)) ? true : false;
$result = array();
foreach ((array)$input as $key => $row) {
if ($columnKeyIsNumber) {
$tmp = array_slice($row, $columnKey, 1);
$tmp = (is_array($tmp) && !empty($tmp)) ? current($tmp) : null;
} else {
$tmp = isset($row[$columnKey]) ? $row[$columnKey] : null;
}
if (!$indexKeyIsNull) {
if ($indexKeyIsNumber) {
$key = array_slice($row, $indexKey, 1);
$key = (is_array($key) && !empty($key)) ? current($key) : null;
$key = is_null($key) ? 0 : $key;
} else {
$key = isset($row[$indexKey]) ? $row[$indexKey] : 0;
}
}
$result[$key] = $tmp;
}
return $result;
} else {
return array_column($input, $columnKey, $indexKey);
}
}
function answer_process($imgDomain,$ans_url)
{
if (strpos($ans_url,'http') !== false){ //有http
return $ans_url;
}else{
if($ans_url){
return $imgDomain.'/'.$ans_url;
}else{
return $ans_url;
}
}
}
//更新报告、成绩后发送通知
function sendZsystNotic($params=array())
{
$sendParam=Yii::app()->params['sendNoticeForUpdateScore'];
if($sendParam['status']==0 || !$params){
return false;
}
$params['type']=1;
$url=$sendParam['url'];
$authUsername=$sendParam['username'];
$authPassword=$sendParam['password'];
$curl = @curl_init();
if ($curl) {
if(empty($params)){
$data = '{}';
}else{
$data = json_encode($params);
}
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, $authUsername .':'. $authPassword);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl, CURLOPT_TIMEOUT, 5);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: '. strlen($data),
));
$response = curl_exec($curl);
curl_close($curl);
}
return $response;
}
/**
* 获取用户ip
* @return mixed|null|string
*/
function getClientIp()
{
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR']) {
$userIp = $_SERVER['HTTP_X_FORWARDED_FOR'];
} elseif (isset($_SERVER['HTTP_X_REAL_IP']) && $_SERVER['HTTP_X_REAL_IP']) {
$userIp = $_SERVER['HTTP_X_REAL_IP'];
} elseif (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR']) {
$userIp = $_SERVER['REMOTE_ADDR'];
}else{
$userIp = Yii::app()->request->userIP;
}
return $userIp;
}
//学管端记录所有操作的日志
function sendLog($params=array())
{
$sendUrl=Yii::app()->params['logApiUrl'];
$curl = @curl_init();
if ($curl) {
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl, CURLOPT_TIMEOUT, 3);
curl_setopt($curl, CURLOPT_URL, $sendUrl);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
$response = curl_exec($curl);
curl_close($curl);
}
return $response;
}
//学管记录关键操作日志
function writeFileLog($msg){
$cateGory=dirname(dirname(__FILE__)) .'/runtime/log-'.date('Y-m-d').'.log';
$msg.="\r\n";
@file_put_contents($cateGory,$msg,FILE_APPEND | LOCK_EX);
}
//发送kafka消息
function sendDataToKafka($key,$data,$json=true){
$conf = new RdKafka\Conf();
$conf->set('metadata.broker.list', Yii::app()->params['kafka']);
$producer = new RdKafka\Producer($conf);
$topic = $producer->newTopic($key);
if($json){
$topic->produce(RD_KAFKA_PARTITION_UA, 0, json_encode($data));
}else{
$topic->produce(RD_KAFKA_PARTITION_UA, 0, $data);
}
$producer->poll(0);
$result = $producer->flush(10000);
if($result===0){
return true;
}
}
function consuming($now,$time){
$return='';
$date=floor(($now-$time)/86400);
if($date){
$return.=$date.'天';
}
$hour=floor(($now-$time)%86400/3600);
if($hour){
$return.=$hour.'小时';
}
$minute=floor((($now-$time)%86400)%3600/60);
if($minute){
$return.=$minute.'分钟';
}
$second=floor(($now-$time)%86400%3600%60);
if($second){
$return.=$second.'秒';
}
return $return;
}
function replaceSpecialChar($strParam){
$str = "";
$regex = "/\ |\/|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\+|\{|\}|\:|\<|\>|\?|\[|\]|\,|\.|\/|\;|\'|\`|\=|\\\|\|/";
$newStr = preg_replace($regex,"",$strParam);
for($i=0;$iparams["student_cache_update_queue"]["servers"];
$redis = new Redis();
$redis->connect($server["host"], $server["port"]);
if(isset($server['password'])){
$redis->auth($server['password']);
}
$redis->select($server['database']);
$redis->lpush('zsy_student:student_cache_update_queue',json_encode($sendJsonArr));
}
//下载文件
function fileGetContents($url){
$ch = curl_init();
$timeout = 10; // set to zero for no timeout
curl_setopt ($ch, CURLOPT_URL,$url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
return curl_exec($ch);
}
function curlDownloadImage($url)
{
if (empty($url) || empty($fileName)) {
return false;
}
// 获取远程文件资源
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
$tempFile = curl_exec($ch);
curl_close($ch);
return $tempFile;
}
if (!function_exists('is_cli')) {
function is_cli(){
return preg_match("/cli/i", php_sapi_name()) ? true : false;
}
}
function get_basename($filename){
return preg_replace('/^.+[\\\\\\/]/', '', $filename);
}
function convertEncoding($string){
//根据系统进行配置
$encode = stristr(PHP_OS, 'WIN') ? 'GBK' : 'UTF-8';
//$string = iconv('UTF-8', $encode, $string);
$string = mb_convert_encoding($string, $encode, 'UTF-8');
return $string;
}
function getOnlineToolToken($schoolId)
{
//读取token
$onlineCardApi = Yii::app()->params['getOnlineToken'];
$url = $onlineCardApi['url'];
$tokenRs = http($url, 'POST', $onlineCardApi['username'], array('schoolId' => $schoolId), 'online');
$tokenData = json_decode($tokenRs, true);
if (isset($tokenData['status']) && $tokenData['status'] == 1) {
return $tokenData['data'];
} else {
return null;
}
}
//新版发送App推送消息
function sendAppNotify($data){
Yii::import('application.extensions.*');
require_once('api-notify/vendor/autoload.php');
$sendSmsConfig=Yii::app()->params['msgPushApi'];
$app_id = $sendSmsConfig['appId'];
$app_secret = $sendSmsConfig['appSecret'];
$authUsername = $sendSmsConfig['authUsername'];
$authPassword = $sendSmsConfig['authPassword'];
$notify_obj = new Notify\AppPush($app_id, $app_secret);
$notify_obj->setAuthUser($authUsername);
$notify_obj->setAuthPassword($authPassword);
$url = $sendSmsConfig['domain'].'notify/app/send-mass-msg';
$notify_obj->setApiUrl($url);
$rs = $notify_obj->send($data);
if(isset($rs['errCode']) && $rs['errCode']=='00'){
return true;
}
return false;
}
/**
* @param $data 分页数据
* @param $method 调整地址
* @param $params 参数
* @return string
* 格式页面
*/
function ajaxFormatPage($data, $className, $params){
$html = '';
if ($data && is_array($data)){
if($data['pages']>1){
$html.= '';
$html.= '';
$html.= '共'.$data['total'].'条记录, 第'.$data['pageNum'].'页,共'. $data['pages'].'页';
$html.= '';
//上一页
// $params['page'] = $data['prePage'];
//
// $propertyStr='';
// foreach ($params as $k => $v){
// $propertyStr.=" {$k}='".$v ."' ";
// }
// $html.= "上一页";
//中间页
$page = $data['pageNum']; //当前页
$count = $data['pages']; //总页数
$num = 10; //显示多少页
$num = min($count,$num); //处理显示的页码数大于总页数的情况
if($page > $count || $page < 1) return; //处理非法页号的情况
$end = $page + floor($num/2) <= $count ? $page + floor($num/2) : $count; //计算结束页号
$start = $end - $num + 1; //计算开始页号
if($start < 1) { //处理开始页号小于1的情况
$end -= $start - 1;
$start = 1;
}
for($i=$start; $i<=$end; $i++) { //输出分页条,请自行添加链接样式
$params['page'] = $i;
$propertyStr='';
foreach ($params as $k => $v){
$propertyStr.=" {$k}='".$v ."' ";
}
if ($i == $page) {
$html.= "{$i}";
} else {
$html.= "{$i}";
}
}
//下一页
// $params['page'] = $data['nextPage'];
// foreach ($params as $k => $v){
// $propertyStr.=" {$k}='".$v ."' ";
// }
// $html.= "下一页";
}
}
return $html;
}
//计算预计时间,排队非工作时间,周末(节假日暂不计算)
function expectTime($needHours,$now){
$taskTime=$needHours*3600;
//上下班时间。
$startWorkingTime=strtotime(date('Y-m-d 8:30',$now));
$endWorkingTime=strtotime(date('Y-m-d 18:00',$now));
$workingTimeEveryDay= $endWorkingTime-$startWorkingTime; //每天工作时长
$week=date('w',$now); //当天周几
$todaySurplusTime=0; //当天剩余工作时间
//要判断当前是否工作时间
if($week==6){
$now=strtotime(date('Y-m-d',$now))+86400*2;
$todaySurplusTime=$workingTimeEveryDay;
$week=1;
}elseif($week==0){
$now=strtotime(date('Y-m-d',$now))+86400*1;
$todaySurplusTime=$workingTimeEveryDay;
$week=1;
}elseif($now<$startWorkingTime){
//上班之前
$todaySurplusTime=$workingTimeEveryDay;
}elseif($now>$endWorkingTime){
//下班之后
$todaySurplusTime=0;
}else{
$todaySurplusTime=$endWorkingTime-$now;
}
$weekEnd=5-$week; //距周五剩余几天
if($taskTime-$todaySurplusTime<=0){
$estimate=$now+$taskTime; //预计时间为当天完成
}else{
$futureDays = floor(($taskTime-$todaySurplusTime)/$workingTimeEveryDay); //未来还需要几天
$futureSurplusTime= ($taskTime-$todaySurplusTime)%$workingTimeEveryDay; //扣除天数还剩余的时间
//判断是否有周末
if($futureDays>$weekEnd || ($futureDays==$weekEnd && $futureSurplusTime>0)){
$futureDays+=2; //有周末,增加两天周末时间
}
$estimate=strtotime(date('Y-m-d',$now))+($futureDays+1)*86400+$futureSurplusTime+8.5*3600;
}
return $estimate;
}
//修改考试名称,同步题库
function updateExamNameToTiku($examGroupId,$examName,$schoolId){
$rs = Curl::post(Yii::app()->params['get_api_url'].'/rest/task_exam/update_task_exam_name', array(
"schoolId" => $schoolId,
"examGroupId" => (string)$examGroupId,
"examName" => $examName
));
$rs=json_decode($rs,true);
if($rs['success']==1){
return true;
}else{
return false;
}
}
/*
* 校验匹配中文字母数字全半角圆括号-
* */
function matchStrChar($str){
if (preg_match("/^[\x{4e00}-\x{9fa5}a-zA-Z\d()()\-]+$/u", $str)) {
return true;
} else {
return false;
}
}