|
|
<?php
|
|
|
// +----------------------------------------------------------------------
|
|
|
// | OneThink [ WE CAN DO IT JUST THINK IT ]
|
|
|
// +----------------------------------------------------------------------
|
|
|
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
|
|
|
// +----------------------------------------------------------------------
|
|
|
// | Author: 麦当苗儿 <zuojiazi@vip.qq.com> <http://www.zjzit.cn>
|
|
|
// +----------------------------------------------------------------------
|
|
|
|
|
|
/**
|
|
|
* 后台公共文件
|
|
|
* 主要定义后台公共函数库
|
|
|
*/
|
|
|
|
|
|
/* 解析列表定义规则*/
|
|
|
|
|
|
function get_list_field($data, $grid)
|
|
|
{
|
|
|
// 获取当前字段数据
|
|
|
foreach ($grid['field'] as $field) {
|
|
|
$array = explode('|', $field);
|
|
|
$temp = $data[$array[0]];
|
|
|
$twotemp = $data[$array[2]];//新加
|
|
|
// 函数支持
|
|
|
if (isset($array[1])) {
|
|
|
if (isset($twotemp)) {//新加
|
|
|
$param = explode('*', $array[1]);
|
|
|
$temp = isset($param[1]) ? call_user_func($param[0], $temp, $param[1]) : call_user_func($array[1], $twotemp, $temp);
|
|
|
} else {
|
|
|
$param = explode('*', $array[1]);
|
|
|
$temp = isset($param[1]) ? call_user_func($param[0], $temp, $param[1]) : call_user_func($array[1], $temp);
|
|
|
}
|
|
|
}
|
|
|
$data2[$array[0]] = $temp;
|
|
|
}
|
|
|
if (!empty($grid['format'])) {
|
|
|
$value = preg_replace_callback('/\[([a-z_]+)\]/', function ($match) use ($data2) {
|
|
|
return $data2[$match[1]];
|
|
|
}, $grid['format']);
|
|
|
} else {
|
|
|
$value = implode(' ', $data2);
|
|
|
}
|
|
|
|
|
|
// 链接支持
|
|
|
if ('title' == $grid['field'][0] && '目录' == $data['type']) {
|
|
|
// 目录类型自动设置子文档列表链接
|
|
|
$grid['href'] = '[LIST]';
|
|
|
}
|
|
|
if (!empty($grid['href'])) {
|
|
|
$links = explode(',', $grid['href']);
|
|
|
foreach ($links as $link) {
|
|
|
$array = explode('|', $link);
|
|
|
$href = $array[0];
|
|
|
if (preg_match('/^\[([a-z_]+)\]$/', $href, $matches)) {
|
|
|
$val[] = $data2[$matches[1]];
|
|
|
} else {
|
|
|
$show = isset($array[1]) ? $array[1] : $value;
|
|
|
// 替换系统特殊字符串
|
|
|
$href = str_replace(
|
|
|
array('[DELETE]', '[EDIT]', '[LIST]'),
|
|
|
array('setstatus?status=-1&ids=[id]',
|
|
|
'edit?id=[id]&model=[model_id]&cate_id=[category_id]',
|
|
|
'index?pid=[id]&model=[model_id]&cate_id=[category_id]'),
|
|
|
$href);
|
|
|
|
|
|
// 替换数据变量
|
|
|
$href = preg_replace_callback('/\[([a-z_]+)\]/', function ($match) use ($data) {
|
|
|
return $data[$match[1]];
|
|
|
}, $href);
|
|
|
switch ($show) {
|
|
|
case '删除':
|
|
|
$val[] = '<a href="' . U($href) . '" class="ajax-get confirm" target-form="ids" >' . $show . '</a>';
|
|
|
break;
|
|
|
default:
|
|
|
$val[] = '<a href="' . U($href) . '">' . $show . '</a>';
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
$value = implode(' ', $val);
|
|
|
}
|
|
|
return $value;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* [every_day 获取日期]
|
|
|
* @param integer $m [description]
|
|
|
* @return [type] [array]
|
|
|
*/
|
|
|
function every_day($m = 7)
|
|
|
{
|
|
|
$time = array();
|
|
|
for ($i = $m - 1; $i >= 0; $i--) {
|
|
|
$time[] = date('Y-m-d', mktime(0, 0, 0, date('m'), date('d') - $i, date('Y')));
|
|
|
}
|
|
|
return $time;
|
|
|
}
|
|
|
|
|
|
// 两个日期之间的所有日期
|
|
|
function prDates($start, $end)
|
|
|
{
|
|
|
$dt_start = strtotime($start);
|
|
|
$dt_end = strtotime($end);
|
|
|
while ($dt_start <= $dt_end) {
|
|
|
$tt[] = date('Y-m-d', $dt_start);
|
|
|
$dt_start = strtotime('+1 day', $dt_start);
|
|
|
}
|
|
|
return $tt;
|
|
|
}
|
|
|
|
|
|
/* 解析插件数据列表定义规则*/
|
|
|
|
|
|
function get_addonlist_field($data, $grid, $addon)
|
|
|
{
|
|
|
// 获取当前字段数据
|
|
|
foreach ($grid['field'] as $field) {
|
|
|
$array = explode('|', $field);
|
|
|
$temp = $data[$array[0]];
|
|
|
// 函数支持
|
|
|
if (isset($array[1])) {
|
|
|
$temp = call_user_func($array[1], $temp);
|
|
|
}
|
|
|
$data2[$array[0]] = $temp;
|
|
|
}
|
|
|
if (!empty($grid['format'])) {
|
|
|
$value = preg_replace_callback('/\[([a-z_]+)\]/', function ($match) use ($data2) {
|
|
|
return $data2[$match[1]];
|
|
|
}, $grid['format']);
|
|
|
} else {
|
|
|
$value = implode(' ', $data2);
|
|
|
}
|
|
|
|
|
|
// 链接支持
|
|
|
if (!empty($grid['href'])) {
|
|
|
$links = explode(',', $grid['href']);
|
|
|
foreach ($links as $link) {
|
|
|
$array = explode('|', $link);
|
|
|
$href = $array[0];
|
|
|
if (preg_match('/^\[([a-z_]+)\]$/', $href, $matches)) {
|
|
|
$val[] = $data2[$matches[1]];
|
|
|
} else {
|
|
|
$show = isset($array[1]) ? $array[1] : $value;
|
|
|
// 替换系统特殊字符串
|
|
|
$href = str_replace(
|
|
|
array('[DELETE]', '[EDIT]', '[ADDON]'),
|
|
|
array('del?ids=[id]&name=[ADDON]', 'edit?id=[id]&name=[ADDON]', $addon),
|
|
|
$href);
|
|
|
|
|
|
// 替换数据变量
|
|
|
$href = preg_replace_callback('/\[([a-z_]+)\]/', function ($match) use ($data) {
|
|
|
return $data[$match[1]];
|
|
|
}, $href);
|
|
|
|
|
|
$val[] = '<a href="' . U($href) . '">' . $show . '</a>';
|
|
|
}
|
|
|
}
|
|
|
$value = implode(' ', $val);
|
|
|
}
|
|
|
return $value;
|
|
|
}
|
|
|
|
|
|
// 获取模型名称
|
|
|
function get_model_by_id($id)
|
|
|
{
|
|
|
return $model = M('Model')->getFieldById($id, 'title');
|
|
|
}
|
|
|
|
|
|
// 获取属性类型信息
|
|
|
function get_attribute_type($type = '')
|
|
|
{
|
|
|
// TODO 可以加入系统配置
|
|
|
static $_type = array(
|
|
|
'num' => array('数字', 'int(10) UNSIGNED NOT NULL'),
|
|
|
'string' => array('字符串', 'varchar(255) NOT NULL'),
|
|
|
'textarea' => array('文本框', 'text NOT NULL'),
|
|
|
'date' => array('日期', 'int(10) NOT NULL'),
|
|
|
'datetime' => array('时间', 'int(10) NOT NULL'),
|
|
|
'bool' => array('布尔', 'tinyint(2) NOT NULL'),
|
|
|
'select' => array('枚举', 'char(50) NOT NULL'),
|
|
|
'radio' => array('单选', 'char(10) NOT NULL'),
|
|
|
'checkbox' => array('多选', 'varchar(100) NOT NULL'),
|
|
|
'editor' => array('编辑器', 'text NOT NULL'),
|
|
|
'picture' => array('上传图片', 'int(10) UNSIGNED NOT NULL'),
|
|
|
'file' => array('上传附件', 'int(10) UNSIGNED NOT NULL'),
|
|
|
);
|
|
|
return $type ? $_type[$type][0] : $_type;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取对应状态的文字信息
|
|
|
* @param int $status
|
|
|
* @return string 状态文字 ,false 未获取到
|
|
|
* @author huajie <banhuajie@163.com>
|
|
|
*/
|
|
|
function get_status_title($status = null)
|
|
|
{
|
|
|
if (!isset($status)) {
|
|
|
return false;
|
|
|
}
|
|
|
switch ($status) {
|
|
|
case -1 :
|
|
|
return "已删除";
|
|
|
break;
|
|
|
case 0 :
|
|
|
return "禁用";
|
|
|
break;
|
|
|
case 1 :
|
|
|
return "正常";
|
|
|
break;
|
|
|
case 2 :
|
|
|
return "待审核";
|
|
|
break;
|
|
|
default :
|
|
|
return false;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 获取数据的状态操作
|
|
|
function show_status_op($status)
|
|
|
{
|
|
|
switch ($status) {
|
|
|
case 0 :
|
|
|
return "正常";
|
|
|
break;
|
|
|
case 1 :
|
|
|
return "禁用";
|
|
|
break;
|
|
|
case 2 :
|
|
|
return "待审核";
|
|
|
break;
|
|
|
default :
|
|
|
return false;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取文档的类型文字
|
|
|
* @param string $type
|
|
|
* @return string 状态文字 ,false 未获取到
|
|
|
* @author huajie <banhuajie@163.com>
|
|
|
*/
|
|
|
function get_document_type($type = null)
|
|
|
{
|
|
|
if (!isset($type)) {
|
|
|
return false;
|
|
|
}
|
|
|
switch ($type) {
|
|
|
case 1 :
|
|
|
return '目录';
|
|
|
break;
|
|
|
case 2 :
|
|
|
return '主题';
|
|
|
break;
|
|
|
case 3 :
|
|
|
return '段落';
|
|
|
break;
|
|
|
default :
|
|
|
return false;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取配置的类型
|
|
|
* @param string $type 配置类型
|
|
|
* @return string
|
|
|
*/
|
|
|
function get_config_type($type = 0)
|
|
|
{
|
|
|
$list = C('CONFIG_TYPE_LIST');
|
|
|
return $list[$type];
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取配置的分组
|
|
|
* @param string $group 配置分组
|
|
|
* @return string
|
|
|
*/
|
|
|
function get_config_group($group = 0)
|
|
|
{
|
|
|
$list = C('CONFIG_GROUP_LIST');
|
|
|
return $group ? $list[$group] : '';
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* select返回的数组进行整数映射转换
|
|
|
*
|
|
|
* @param array $map 映射关系二维数组 array(
|
|
|
* '字段名1'=>array(映射关系数组),
|
|
|
* '字段名2'=>array(映射关系数组),
|
|
|
* ......
|
|
|
* )
|
|
|
* @return array
|
|
|
*
|
|
|
* array(
|
|
|
* array('id'=>1,'title'=>'标题','status'=>'1','status_text'=>'正常')
|
|
|
* ....
|
|
|
* )
|
|
|
*
|
|
|
* @author 朱亚杰 <zhuyajie@topthink.net>
|
|
|
*/
|
|
|
function int_to_string(&$data, $map = array('status' => array(1 => '正常', -1 => '删除', 0 => '锁定', 2 => '未审核', 3 => '草稿')))
|
|
|
{
|
|
|
if ($data === false || $data === null) {
|
|
|
return $data;
|
|
|
}
|
|
|
$data = (array)$data;
|
|
|
foreach ($data as $key => $row) {
|
|
|
foreach ($map as $col => $pair) {
|
|
|
if (isset($row[$col]) && isset($pair[$row[$col]])) {
|
|
|
$data[$key][$col . '_text'] = $pair[$row[$col]];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return $data;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 动态扩展左侧菜单,base.html里用到
|
|
|
* @author 朱亚杰 <zhuyajie@topthink.net>
|
|
|
*/
|
|
|
function extra_menu($extra_menu, &$base_menu)
|
|
|
{
|
|
|
foreach ($extra_menu as $key => $group) {
|
|
|
if (isset($base_menu['child'][$key])) {
|
|
|
$base_menu['child'][$key] = array_merge($base_menu['child'][$key], $group);
|
|
|
} else {
|
|
|
$base_menu['child'][$key] = $group;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取参数的所有父级分类
|
|
|
* @param int $cid 分类id
|
|
|
* @return array 参数分类和父类的信息集合
|
|
|
* @author huajie <banhuajie@163.com>
|
|
|
*/
|
|
|
function get_parent_category($cid)
|
|
|
{
|
|
|
if (empty($cid)) {
|
|
|
return false;
|
|
|
}
|
|
|
$cates = M('Category')->where(array('status' => 1))->field('id,title,pid')->order('sort')->select();
|
|
|
$child = get_category($cid); //获取参数分类的信息
|
|
|
$pid = $child['pid'];
|
|
|
$temp = array();
|
|
|
$res[] = $child;
|
|
|
while (true) {
|
|
|
foreach ($cates as $key => $cate) {
|
|
|
if ($cate['id'] == $pid) {
|
|
|
$pid = $cate['pid'];
|
|
|
array_unshift($res, $cate); //将父分类插入到数组第一个元素前
|
|
|
}
|
|
|
}
|
|
|
if ($pid == 0) {
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
return $res;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 检测验证码
|
|
|
* @param integer $id 验证码ID
|
|
|
* @return boolean 检测结果
|
|
|
* @author 麦当苗儿 <zuojiazi@vip.qq.com>
|
|
|
*/
|
|
|
function check_verify($code, $id = 1)
|
|
|
{
|
|
|
$verify = new \Think\Verify();
|
|
|
return $verify->check($code, $id);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取当前分类的文档类型
|
|
|
* @param int $id
|
|
|
* @return array 文档类型数组
|
|
|
* @author huajie <banhuajie@163.com>
|
|
|
*/
|
|
|
function get_type_bycate($id = null)
|
|
|
{
|
|
|
if (empty($id)) {
|
|
|
return false;
|
|
|
}
|
|
|
$type_list = C('DOCUMENT_MODEL_TYPE');
|
|
|
$model_type = M('Category')->getFieldById($id, 'type');
|
|
|
$model_type = explode(',', $model_type);
|
|
|
foreach ($type_list as $key => $value) {
|
|
|
if (!in_array($key, $model_type)) {
|
|
|
unset($type_list[$key]);
|
|
|
}
|
|
|
}
|
|
|
return $type_list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取当前文档的分类
|
|
|
* @param int $id
|
|
|
* @return array 文档类型数组
|
|
|
* @author huajie <banhuajie@163.com>
|
|
|
*/
|
|
|
function get_cate($cate_id = null)
|
|
|
{
|
|
|
if (empty($cate_id)) {
|
|
|
return false;
|
|
|
}
|
|
|
$cate = M('Category')->where('id=' . $cate_id)->getField('title');
|
|
|
return $cate;
|
|
|
}
|
|
|
|
|
|
// 分析枚举类型配置值 格式 a:名称1,b:名称2
|
|
|
function parse_config_attr($string)
|
|
|
{
|
|
|
$array = preg_split('/[,;\r\n]+/', trim($string, ",;\r\n"));
|
|
|
if (strpos($string, ':')) {
|
|
|
$value = array();
|
|
|
foreach ($array as $val) {
|
|
|
list($k, $v) = explode(':', $val);
|
|
|
$value[$k] = $v;
|
|
|
}
|
|
|
} else {
|
|
|
$value = $array;
|
|
|
}
|
|
|
return $value;
|
|
|
}
|
|
|
|
|
|
// 获取子文档数目
|
|
|
function get_subdocument_count($id = 0)
|
|
|
{
|
|
|
return M('Document')->where('pid=' . $id)->count();
|
|
|
}
|
|
|
|
|
|
|
|
|
// 分析枚举类型字段值 格式 a:名称1,b:名称2
|
|
|
// 暂时和 parse_config_attr功能相同
|
|
|
// 但请不要互相使用,后期会调整
|
|
|
function parse_field_attr($string)
|
|
|
{
|
|
|
if (0 === strpos($string, ':')) {
|
|
|
// 采用函数定义
|
|
|
return eval('return ' . substr($string, 1) . ';');
|
|
|
} elseif (0 === strpos($string, '[')) {
|
|
|
// 支持读取配置参数(必须是数组类型)
|
|
|
return C(substr($string, 1, -1));
|
|
|
}
|
|
|
|
|
|
$array = preg_split('/[,;\r\n]+/', trim($string, ",;\r\n"));
|
|
|
if (strpos($string, ':')) {
|
|
|
$value = array();
|
|
|
foreach ($array as $val) {
|
|
|
list($k, $v) = explode(':', $val);
|
|
|
$value[$k] = $v;
|
|
|
}
|
|
|
} else {
|
|
|
$value = $array;
|
|
|
}
|
|
|
return $value;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取行为数据
|
|
|
* @param string $id 行为id
|
|
|
* @param string $field 需要获取的字段
|
|
|
* @author huajie <banhuajie@163.com>
|
|
|
*/
|
|
|
function get_action($id = null, $field = null)
|
|
|
{
|
|
|
if (empty($id) && !is_numeric($id)) {
|
|
|
return false;
|
|
|
}
|
|
|
$list = S('action_list');
|
|
|
if (empty($list[$id])) {
|
|
|
$map = array('status' => array('gt', -1), 'id' => $id);
|
|
|
$list[$id] = M('Action')->where($map)->field(true)->find();
|
|
|
}
|
|
|
return empty($field) ? $list[$id] : $list[$id][$field];
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 根据条件字段获取数据
|
|
|
* @param mixed $value 条件,可用常量或者数组
|
|
|
* @param string $condition 条件字段
|
|
|
* @param string $field 需要返回的字段,不传则返回整个数据
|
|
|
* @author huajie <banhuajie@163.com>
|
|
|
*/
|
|
|
function get_document_field($value = null, $condition = 'id', $field = null)
|
|
|
{
|
|
|
if (empty($value)) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
//拼接参数
|
|
|
$map[$condition] = $value;
|
|
|
$info = M('Model')->where($map);
|
|
|
if (empty($field)) {
|
|
|
$info = $info->field(true)->find();
|
|
|
} else {
|
|
|
$info = $info->getField($field);
|
|
|
}
|
|
|
return $info;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取行为类型
|
|
|
* @param intger $type 类型
|
|
|
* @param bool $all 是否返回全部类型
|
|
|
* @author huajie <banhuajie@163.com>
|
|
|
*/
|
|
|
function get_action_type($type, $all = false)
|
|
|
{
|
|
|
$list = array(
|
|
|
1 => '系统',
|
|
|
2 => '用户',
|
|
|
);
|
|
|
if ($all) {
|
|
|
return $list;
|
|
|
}
|
|
|
return $list[$type];
|
|
|
}
|
|
|
|
|
|
//获取服务器类型
|
|
|
function getServerType($serverType)
|
|
|
{
|
|
|
return (($serverType == 1) ? '专服' : '混服');
|
|
|
}
|
|
|
|
|
|
//获取合作方
|
|
|
function getPartnerList($id = 0)
|
|
|
{
|
|
|
if ($id > 0) {
|
|
|
return M('Partner', 'tab_')->field('id,partner')->find($id);
|
|
|
} else {
|
|
|
return M('Partner', 'tab_')->field('id,partner')->where(array('status' => 1))->select();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function getPartnerName($id = 0)
|
|
|
{
|
|
|
return M('Partner', 'tab_')->where(array('id' => intval($id)))->getField('partner');
|
|
|
}
|
|
|
|
|
|
function getGameByName($game_name=null, $sdk_version=null)
|
|
|
{
|
|
|
$map = [];
|
|
|
if ($game_name) {
|
|
|
$map['relation_game_name'] = $game_name;
|
|
|
}
|
|
|
if ($sdk_version) {
|
|
|
$map['sdk_version'] = $sdk_version;
|
|
|
}
|
|
|
$result = D("Game")->field('id')->where($map)->select();
|
|
|
if(empty($result)) {
|
|
|
return [['id' => -1]];
|
|
|
}else
|
|
|
{
|
|
|
return $result;
|
|
|
}
|
|
|
}
|
|
|
//根据游戏公司,游戏名称,游戏类型
|
|
|
function getGameidByPartnerNameType($partner_id=null,$game_name=null, $sdk_version=null)
|
|
|
{
|
|
|
$map = [];
|
|
|
if($partner_id){
|
|
|
$map['partner_id'] = $partner_id;
|
|
|
}
|
|
|
if ($game_name) {
|
|
|
$map['relation_game_name'] = $game_name;
|
|
|
}
|
|
|
if ($sdk_version) {
|
|
|
$map['sdk_version'] = $sdk_version;
|
|
|
}
|
|
|
$result = D("Game")->field('id')->where($map)->select();
|
|
|
if(empty($result)) {
|
|
|
return [['id' => -1]];
|
|
|
}else
|
|
|
{
|
|
|
return $result;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function getTopPromote($promote_id)
|
|
|
{
|
|
|
$promoter = M('promote', 'tab_')->where(['id' => $promote_id])->find();
|
|
|
if (!$promoter) {
|
|
|
return [];
|
|
|
}
|
|
|
$chain = trim($promoter['chain'], '/');
|
|
|
if ($chain == '') {
|
|
|
return $promoter;
|
|
|
} else {
|
|
|
$topPromoteId = explode('/', $chain)[0];
|
|
|
return M('promote', 'tab_')->where(['id' => $topPromoteId])->find();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function arrayPromoteWithdrawStatus($status, $param, $array = array()) {
|
|
|
foreach ($array as $key => $value) {
|
|
|
if($value[$status] == -1){
|
|
|
unset($array[$key]);
|
|
|
}
|
|
|
}
|
|
|
return $array;
|
|
|
}
|
|
|
|
|
|
function getAllGame()
|
|
|
{
|
|
|
$list = M("game", 'tab_')->field('relation_game_name as game_name, relation_game_id as game_id')->group('relation_game_name')->select();
|
|
|
return $list;
|
|
|
}
|
|
|
/**
|
|
|
* 获取合作公司
|
|
|
* @author chenzhi
|
|
|
*/
|
|
|
function getPromoteCompany()
|
|
|
{
|
|
|
$list = M("PromoteCompany", 'tab_')
|
|
|
->field('id,company_name')
|
|
|
->where("status = 1")
|
|
|
->select();
|
|
|
array_unshift($list,array("id"=>0,"company_name"=>C(DEFAULT_COMPANY)));//默认0
|
|
|
return $list;
|
|
|
}
|
|
|
|
|
|
function getAllIosGame()
|
|
|
{
|
|
|
$list = M("game", 'tab_')->field('relation_game_name as game_name,id')->where(['sdk_version' => 2])->group('relation_game_name')->select();
|
|
|
return $list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 中间加密 替换字符串的子串
|
|
|
*/
|
|
|
function encryptStr($str) {
|
|
|
$length = strlen($str);
|
|
|
$stars_str = "";
|
|
|
for ($x=0; $x<=$length-6; $x++) {
|
|
|
$stars_str = $stars_str."*";
|
|
|
}
|
|
|
return substr_replace($str, $stars_str, 3, $length-6);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 身份证加密
|
|
|
*
|
|
|
* @param $str
|
|
|
* @return mixed
|
|
|
*/
|
|
|
function encryptIdCard($str) {
|
|
|
$length = strlen($str);
|
|
|
$stars_str = "";
|
|
|
if($length>=4){
|
|
|
$stars_str = "****";
|
|
|
}
|
|
|
return substr_replace($str, $stars_str, $length-4, 4);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 真实名字加密
|
|
|
*
|
|
|
* @param $str
|
|
|
* @return mixed
|
|
|
*/
|
|
|
function encryptRealName($str) {
|
|
|
$length = strlen($str);
|
|
|
$stars_str = "";
|
|
|
if($length>=4){
|
|
|
$stars_str = "****";
|
|
|
}
|
|
|
return substr_replace($str, "**", 3, $length);
|
|
|
}
|
|
|
|
|
|
//获取推广员资质审核状态 $type 1-获取数组 2-获取文本
|
|
|
function getPromoteVerStatus($status, $type = 1)
|
|
|
{
|
|
|
$statusList = [
|
|
|
0 => '未认证',
|
|
|
1 => '审核成功',
|
|
|
2 => '审核失败',
|
|
|
3 => '审核中',
|
|
|
4 => '修改审核中',
|
|
|
];
|
|
|
|
|
|
$records = null;
|
|
|
switch ($type) {
|
|
|
case 1:
|
|
|
$records = $status;
|
|
|
break;
|
|
|
case 2:
|
|
|
$records = $statusList[$status] ?? '未知';
|
|
|
break;
|
|
|
default:
|
|
|
$records = false;
|
|
|
break;
|
|
|
}
|
|
|
return $records;
|
|
|
}
|
|
|
|
|
|
//获取推广员账号
|
|
|
function getPromoteAccount($promoteId)
|
|
|
{
|
|
|
$map['id'] = intval($promoteId);
|
|
|
return M('promote', 'tab_')->where($map)->getField('account');
|
|
|
}
|
|
|
|
|
|
//获取推广员列表 $level 0-全部 $companyId 推广公司 0-全部
|
|
|
function getPromoteByLevel($level = 0, $companyId = 0)
|
|
|
{
|
|
|
$field = 'id, account, real_name';
|
|
|
$map['_string'] = '1 = 1';
|
|
|
if ($level > 0) {
|
|
|
$map['level'] = $level;
|
|
|
}
|
|
|
if ($companyId > 0) {
|
|
|
$map['company_id'] = $companyId;
|
|
|
}
|
|
|
|
|
|
$promotes = M('promote', 'tab_')->field($field)->where($map)->select();
|
|
|
|
|
|
return $promotes;
|
|
|
}
|
|
|
|
|
|
//获取游戏列表
|
|
|
function getAllGameList($groupByRelation = false)
|
|
|
{
|
|
|
$field = 'id, game_name, relation_game_id, relation_game_name';
|
|
|
if ($groupByRelation) {
|
|
|
$games = M('game', 'tab_')->field($field)->where('id = relation_game_id')->group('relation_game_id')->select();
|
|
|
} else {
|
|
|
$games = M('game', 'tab_')->field($field)->select();
|
|
|
}
|
|
|
return $games;
|
|
|
}
|
|
|
|
|
|
//获取管理员权限列表
|
|
|
function getAdminRules($adminId)
|
|
|
{
|
|
|
$rules = [];
|
|
|
if ($adminId) {
|
|
|
$groupId = M('auth_group_access')->where(array('uid' => intval($adminId)))->getField('group_id');
|
|
|
if ($groupId) {
|
|
|
$rules = M('auth_group')->where(array('id' => $groupId))->getField('rules');
|
|
|
$rules = explode(',', $rules);
|
|
|
}
|
|
|
}
|
|
|
return $rules;
|
|
|
}
|
|
|
|
|
|
//获取权限id
|
|
|
function getRule($name, $module)
|
|
|
{
|
|
|
$ruleId = 0;
|
|
|
if ($name) {
|
|
|
if ($module) {
|
|
|
$map['module'] = $module;
|
|
|
}
|
|
|
$map['name'] = trim($name);
|
|
|
$ruleId = M('auth_rule')->where($map)->getField('id');
|
|
|
}
|
|
|
return $ruleId;
|
|
|
}
|
|
|
|
|
|
//下划线转驼峰 $littleHump 是否转换成小驼峰
|
|
|
function camelize($str, $separator = '_', $littleHump = false)
|
|
|
{
|
|
|
if ($littleHump) {
|
|
|
$str = $separator . str_replace($separator, " ", strtolower($str));
|
|
|
} else {
|
|
|
$str = str_replace($separator, " ", strtolower($str));
|
|
|
}
|
|
|
|
|
|
return ltrim(str_replace(" ", "", ucwords($str)), $separator );
|
|
|
}
|
|
|
|
|
|
//驼峰转下划线
|
|
|
function unCamelize($str, $separator = '_')
|
|
|
{
|
|
|
return strtolower(preg_replace('/([a-z])([A-Z])/', "$1" . $separator . "$2", $str));
|
|
|
}
|
|
|
|
|
|
function convertAmountToCn($num) {
|
|
|
//判断$num是否存在
|
|
|
if(!$num) return '零圆';
|
|
|
if($num-0+1 == 1){
|
|
|
return '零圆';
|
|
|
}
|
|
|
//保留小数点后两位
|
|
|
$num = round($num, 2);
|
|
|
//将浮点转换为整数
|
|
|
$tem_num = $num * 100;
|
|
|
//判断数字长度
|
|
|
$tem_num_len = strlen($tem_num);
|
|
|
if($tem_num_len > 14) {
|
|
|
return '数值过大';
|
|
|
}
|
|
|
|
|
|
//大写数字
|
|
|
$dint = array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');
|
|
|
//大写金额单位
|
|
|
$danwei = array('仟', '佰', '拾', '亿', '仟', '佰', '拾', '万', '仟', '佰', '拾', '圆');
|
|
|
$danwei1 = array('角', '分');
|
|
|
|
|
|
//空的变量用来保存转换字符串
|
|
|
$daxie = '';
|
|
|
if($num < 0){
|
|
|
$daxie .= "负";
|
|
|
}
|
|
|
|
|
|
//分割数字,区分圆角分
|
|
|
list($left_num, $right_num) = explode('.', $num);
|
|
|
|
|
|
//计算单位长度
|
|
|
$danwei_len = count($danwei);
|
|
|
//计算分割后的字符串长度
|
|
|
$left_num_len = strlen($left_num);
|
|
|
$right_num_len = strlen($right_num);
|
|
|
|
|
|
//循环计算亿万元等
|
|
|
for($i = 0; $i < $left_num_len; $i++) {
|
|
|
//循环单个文字
|
|
|
$key_ = substr($left_num, $i, 1);
|
|
|
|
|
|
//判断数字不等于0或数字等于0与金额单位为亿、万、圆,就返回完整单位的字符串
|
|
|
if($key_ !== '0' || ($key_ == '0' && ($danwei[$danwei_len - $left_num_len + $i] == '亿' || $danwei[$danwei_len - $left_num_len + $i] == '万' || $danwei[$danwei_len - $left_num_len + $i] == '圆'))) {
|
|
|
$daxie = $daxie . $dint[$key_] . $danwei[$danwei_len - $left_num_len + $i];
|
|
|
} else {
|
|
|
//否则就不含单位
|
|
|
$daxie = $daxie . $dint[$key_];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//循环计算角分
|
|
|
for($i = 0; $i < $right_num_len; $i++) {
|
|
|
$key_ = substr($right_num, $i, 1);
|
|
|
if($key_ > 0) {
|
|
|
$daxie = $daxie . $dint[$key_] . $danwei1[$i];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//计算转换后的长度
|
|
|
$daxie_len = strlen($daxie);
|
|
|
//设置文字切片从0开始,utf-8汉字占3个字符
|
|
|
$j = 0;
|
|
|
while($daxie_len > 0) {
|
|
|
//每次切片两个汉字
|
|
|
$str = substr($daxie, $j, 6);
|
|
|
//判断切片后的文字不等于零万、零圆、零亿、零零
|
|
|
if($str == '零万' || $str == '零圆' || $str == '零亿' || $str == '零零') {
|
|
|
//重新切片
|
|
|
$left = substr($daxie, 0, $j);
|
|
|
$right = substr($daxie, $j + 3);
|
|
|
$daxie = $left . $right;
|
|
|
}
|
|
|
$j += 3;
|
|
|
$daxie_len -= 3;
|
|
|
}
|
|
|
|
|
|
return $daxie . '整';
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @param $phone
|
|
|
* @return false|int
|
|
|
*/
|
|
|
function checkPhone($phone) {
|
|
|
return preg_match("/^1[3456789]\d{9}$/",$phone);
|
|
|
}
|
|
|
/**
|
|
|
* @param $num
|
|
|
* @return false|int
|
|
|
*/
|
|
|
function checkNumber($num) {
|
|
|
return preg_match("/^([0-9]*)+(.[0-9]{1,3})?$/",$num);
|
|
|
}
|
|
|
|
|
|
//获取sdk类型名称
|
|
|
function getSDKTypeName($sdkType, $chinese = false)
|
|
|
{
|
|
|
$android = 'Android';
|
|
|
|
|
|
if ($chinese) {
|
|
|
$android = '安卓';
|
|
|
}
|
|
|
|
|
|
switch ($sdkType) {
|
|
|
case 0:
|
|
|
$sdkName = $android . '+ios';
|
|
|
break;
|
|
|
case 1:
|
|
|
$sdkName = $android;
|
|
|
break;
|
|
|
case 2:
|
|
|
$sdkName = 'ios';
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
return $sdkName;
|
|
|
}
|
|
|
//游戏名称取消 (安卓版),(苹果版)
|
|
|
function clearGameNameType($game_name)
|
|
|
{
|
|
|
return preg_replace("/\(.*\)/","",$game_name);
|
|
|
}
|
|
|
//设备名称词典
|
|
|
function getGameTypeName($id,$chinese=true)
|
|
|
{
|
|
|
if(empty($id)){
|
|
|
return '无';
|
|
|
}
|
|
|
$android = 'Android';
|
|
|
$ios = 'ios';
|
|
|
if($chinese){
|
|
|
$android = '安卓';
|
|
|
$ios = '苹果';
|
|
|
}
|
|
|
$data = array(
|
|
|
["id"=>0,'name'=>"{$android}+{$ios}"],
|
|
|
["id"=>1,'name'=>$android],
|
|
|
["id"=>2,'name'=> $ios]
|
|
|
);
|
|
|
if($id > -1){
|
|
|
foreach($data as $k=>$v){
|
|
|
if($v['id'] == $id){
|
|
|
return $v['name'];
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}else{
|
|
|
return $data;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 权限检测
|
|
|
* @param string $rule 检测的规则
|
|
|
* @param string $mode check模式
|
|
|
* @return boolean
|
|
|
* @author 朱亚杰 <xcoolcc@gmail.com>
|
|
|
*/
|
|
|
use Admin\Model\AuthRuleModel;
|
|
|
function checkRule($rule, $type=AuthRuleModel::RULE_URL, $mode='url'){
|
|
|
static $Auth = null;
|
|
|
if (!$Auth) {
|
|
|
$Auth = new \Think\Auth();
|
|
|
}
|
|
|
|
|
|
if(!$Auth->check($rule,is_login(),$type,$mode)){
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
/**
|
|
|
* 验证导出账号权限是否加密
|
|
|
* @param [type] $type 0:"_list_check",1:"_count_check"
|
|
|
* @return void
|
|
|
*/
|
|
|
function checkEncryptionAuth(&$value,$string){
|
|
|
//验证count
|
|
|
if(is_administrator()){
|
|
|
return true;
|
|
|
}else{
|
|
|
$exportRule = strtolower(MODULE_NAME.'/'.CONTROLLER_NAME.'/'.$string."_encryption_check");
|
|
|
|
|
|
if (!checkRule($exportRule,array('in','1,2'))) {
|
|
|
// dump(1);die();
|
|
|
$value = encryption($value);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取控制器得自操作权限
|
|
|
*/
|
|
|
function getModuleControllerAuth()
|
|
|
{
|
|
|
$group = $_SESSION['onethink_admin']['user_group_id'];
|
|
|
//获取全部权限列表
|
|
|
$ruleList = SM("AuthGroup","sys_")->field("rules")->where("id='{$group}'")->find()['rules'];
|
|
|
|
|
|
//获取所有含有规则的数据
|
|
|
$mc = MODULE_NAME."/".CONTROLLER_NAME;
|
|
|
$authlist = M("AuthRule")->field('name')->where("name like '{$mc}%' AND id in ($ruleList)")->select();
|
|
|
$Auth = [];
|
|
|
foreach ($authlist as $k => $v) {
|
|
|
$a = str_replace("{$mc}/","",$v['name']);
|
|
|
$Auth[] = $a;
|
|
|
}
|
|
|
return $Auth;
|
|
|
}
|
|
|
|
|
|
function PromoteStatistics($orderNo) {
|
|
|
|
|
|
$spend = M("spend","tab_")
|
|
|
->field("promote_id,promote_account,pay_time,pay_amount")
|
|
|
->where(array('pay_order_number'=>$orderNo))
|
|
|
->find();
|
|
|
|
|
|
$start = strtotime(date("Ymd",$spend['pay_time']));
|
|
|
|
|
|
$statisticsData = M("promote_statistics","tab_")
|
|
|
->where(['promote_id'=>$spend['promote_id'],'time'=>$start])
|
|
|
->find();
|
|
|
|
|
|
$statisticsData['count']?$statisticsData['count']:$statisticsData['count']=0;
|
|
|
|
|
|
$insert['promote_id'] = $spend['promote_id'];
|
|
|
$insert['promote_account'] = $spend['promote_account'];
|
|
|
$insert['count'] = $spend['pay_amount']?(($spend['pay_amount']*100)+$statisticsData['count']):0;
|
|
|
$insert['time'] = $start;
|
|
|
|
|
|
if ($statisticsData) {
|
|
|
|
|
|
M("promote_statistics","tab_")
|
|
|
->where(['promote_id'=>$spend['promote_id'],'time'=>$start])
|
|
|
->save($insert);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
M("promote_statistics","tab_")->add($insert);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
function showPercent($num)
|
|
|
{
|
|
|
if($num-0 > 0){
|
|
|
if(strpos($num,"%")){
|
|
|
return $num;
|
|
|
}else{
|
|
|
return $num."%";
|
|
|
}
|
|
|
|
|
|
}else{
|
|
|
return $num ?? "--";
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
function showNumPercent($num)
|
|
|
{
|
|
|
$num -= 0;
|
|
|
if($num >= 0){
|
|
|
if(strpos($num,"%")){
|
|
|
return $num;
|
|
|
}else{
|
|
|
return $num."%";
|
|
|
}
|
|
|
|
|
|
}else{
|
|
|
return $num ?? "--";
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//优化子站点实例化方法
|
|
|
function SM($name='', $tablePrefix='tab_',$is_subsiteTable=false)
|
|
|
{
|
|
|
if(empty($name)){
|
|
|
if(IS_SUBSITE){
|
|
|
return M($name, $tablePrefix,SUBSITE_DB);
|
|
|
}
|
|
|
}else{
|
|
|
$tableName = strtolower($tablePrefix.unCamelize($name));
|
|
|
if(is_subsiteTable($tableName) || $is_subsiteTable){
|
|
|
return M($name, $tablePrefix,SUBSITE_DB);
|
|
|
}
|
|
|
}
|
|
|
return M($name, $tablePrefix);
|
|
|
}
|
|
|
//判断是否有子站点表格
|
|
|
function is_subsiteTable($tableName,$is_subsiteTable=false)
|
|
|
{
|
|
|
if(IS_SUBSITE && ($is_subsiteTable || in_array($tableName,C('SUBSITE_TABLE')))){
|
|
|
return true;
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
/**
|
|
|
* 添加子站点条件
|
|
|
* @param [arrary] $map
|
|
|
* @param string $field 数据库查询字段
|
|
|
* @return void
|
|
|
*/
|
|
|
function addSubsiteWhere(&$map,$field){
|
|
|
if(IS_SUBSITE){
|
|
|
$map[$field] = ["in",[0,PARTNER_TYPE]];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取商务专员
|
|
|
*/
|
|
|
function getAffairMember() {
|
|
|
|
|
|
$data = M("member")
|
|
|
->field("access.uid admin_id,real_name")
|
|
|
->join("left join sys_auth_group_access access on sys_member.uid = access.uid")
|
|
|
->join("left join sys_auth_group auth on access.group_id=auth.id")
|
|
|
->where(['title' => ['like', '%商务%']])
|
|
|
->select();
|
|
|
|
|
|
return $data;
|
|
|
|
|
|
}
|
|
|
|