<?php<liu21st@gmail.com>
use think\Db;
use think\Response;
use think\Session;
use think\exception\HttpResponseException;
use app\common\logic\File as LogicFile;
function is_login()
{
$member = session('sys_user_auth');
if (empty($member)) {
return DATA_DISABLE;
} else {
return session('sys_user_auth_sign') == data_auth_sign($member) ? $member['sys_user_id'] : DATA_DISABLE;
}
}
function is_org_id()
{
$member = session('sys_user_info');
$org = session('sys_org_info');
if (empty($member)) {
return DATA_DISABLE;
} else {
$rtn=($member['username']==$org['username'])?$member['id']:DATA_DISABLE ;
return $rtn;
}
}
function get_org_id()
{
$member = session('sys_user_auth');
if (empty($member)) {
return DATA_DISABLE;
} else {
return session('sys_user_auth_sign') == data_auth_sign($member) ? $member['sys_org_id'] : DATA_DISABLE;
}
}
function get_org_info()
{
$org = session('sys_org_info');
return $org;
}
function data_md5($str, $key = 'lingqifei')
{
return '' === $str ? '' : md5(sha1($str) . $key);
}
function data_md5_key($str, $key = '')
{
if (is_array($str)) {
ksort($str);
$data = http_build_query($str);
} else {
$data = (string)$str;
}
return empty($key) ? data_md5($data, SYS_ENCRYPT_KEY) : data_md5($data, $key);
}
function data_auth_sign($data)
{
if (!is_array($data)) {
$data = (array)$data;
}
ksort($data);
$code = http_build_query($data);
$sign = sha1($code);
return $sign;
}
function is_administrator($sys_user_id = null)
{
$return_id = is_null($sys_user_id) ? is_login() : $sys_user_id;
return $return_id && (intval($return_id) === SYS_ADMINISTRATOR_ID);
}
function get_sington_object($object_name = '', $class = null)
{
$request = request();
$request->__isset($object_name) ?: $request->bind($object_name, new $class());
return $request->__get($object_name);
}
function get_addon_class($name = '')
{
$lower_name = strtolower($name);
$class = SYS_ADDON_DIR_NAME . SYS_DS_CONS . $lower_name . SYS_DS_CONS . $name;
return $class;
}
function hook($tag = '', $params = [])
{
\think\Hook::listen($tag, $params);
}
function addons_url($url, $param = array())
{
$parse_url = parse_url($url);
$addons = $parse_url['scheme'];
$controller = $parse_url['host'];
$action = $parse_url['path'];
if(empty($param['addons_model'])){
$model='admin';
}else{
$model=$param['addons_model'];
}
$params_array = array(
'addon_name' => $addons,
'controller_name' => $controller,
'action_name' => substr($action, 1),
);
$params = array_merge($params_array, $param);
return url($model.'/addon/execute', $params);
}
function addon_ioc($this_class, $name, $layer)
{
!str_prefix($name, $layer) && exception('逻辑与模型层引用需前缀:' . $layer);
$class_arr = explode(SYS_DS_CONS, get_class($this_class));
$sr_name = sr($name, $layer);
$class_logic = SYS_ADDON_DIR_NAME . SYS_DS_CONS . $class_arr[DATA_NORMAL] . SYS_DS_CONS . $layer . SYS_DS_CONS . $sr_name;
return get_sington_object(SYS_ADDON_DIR_NAME . '_' . $layer . '_' . $sr_name, $class_logic);
}
function throw_response_exception($data = [], $type = 'json')
{
$response = Response::create($data, $type);
throw new HttpResponseException($response);
}
function get_access_token()
{
return md5('LingQiFei' . API_KEY);
}
function format_bytes($size, $delimiter = '')
{
$units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB');
for ($i = 0; $size >= 1024 && $i < 5; $i++) {
$size /= 1024;
}
return round($size, 2) . $delimiter . $units[$i];
}
function list_to_tree($list, $pk = 'id', $pid = 'pid', $child = '_child', $root = 0)
{
$tree = [];
if (!is_array($list)) {
return false;
}
$refer = [];
foreach ($list as $key => $data) {
$refer[$data[$pk]] =& $list[$key];
}
foreach ($list as $key => $data) {
$parentId = $data[$pid];
if ($root == $parentId) {
$tree[] =& $list[$key];
} else if (isset($refer[$parentId])) {
is_object($refer[$parentId]) && $refer[$parentId] = $refer[$parentId]->toArray();
$parent =& $refer[$parentId];
$parent[$child][] =& $list[$key];
}
}
return $tree;
}
if (!function_exists("list2select")) {
function list2select($list, $pId = 0, $level = 0, $pk = 'id', $pidk = 'pid', $name = 'name', $data = [])
{
foreach ($list as $k => $v) {
$v['treename'] = str_repeat(' ', $level) . '|--' . $v[$name];
if ($v[$pidk] == $pId) { $data[] = $v;
$data = list2select($list, $v[$pk], $level + 1, $pk, $pidk, $name, $data);
}
}
return $data;
}
}
function parse_config_attr($string)
{
$array = preg_split('/[,;\r\n]+/', trim($string, ",;\r\n"));
if (strpos($string, ':')) {
$value = [];
foreach ($array as $val) {
list($k, $v) = explode(':', $val);
$value[$k] = $v;
}
} else {
$value = $array;
}
return $value;
}
function parse_config_array($name = '')
{
return parse_config_attr(config($name));
}
function array_extract($array = [], $key = 'id')
{
$count = count($array);
$new_arr = [];
for ($i = 0; $i < $count; $i++) {
if (!empty($array) && !empty($array[$i][$key])) {
$new_arr[] = $array[$i][$key];
}
}
return $new_arr;
}
function array_extract_map($array = [], $key = 'id')
{
$count = count($array);
$new_arr = [];
for ($i = 0; $i < $count; $i++) {
$new_arr[$array[$i][$key]] = $array[$i];
}
return $new_arr;
}
function transform_array($array)
{
$new_array = array();
$key_array = array();
foreach ($array as $key => $val) {
$key_array[] = $key;
}
$key_count = count($key_array);
foreach ($array[$key_array[0]] as $i => $val) {
$temp_array = array();
for ($j = 0; $j < $key_count; $j++) {
$key = $key_array[$j];
$temp_array[$key] = $array[$key][$i];
}
$new_array[] = $temp_array;
}
return $new_array;
}
function transform_array_to_json($array)
{
return json_encode(transform_array($array));
}
function relevance_arr_to_index_arr($array)
{
$new_array = [];
foreach ($array as $v) {
$temp_array = [];
foreach ($v as $vv) {
$temp_array[] = $vv;
}
$new_array[] = $temp_array;
}
return $new_array;
}
function arr2str($arr, $glue = ',')
{
return implode($glue, $arr);
}
function arr22str($arr)
{
$t = '';
$temp = [];
foreach ($arr as $v) {
$v = join(",", $v);
$temp[] = $v;
}
foreach ($temp as $v) {
$t .= $v . ",";
}
$t = substr($t, 0, -1);
return $t;
}
if (!function_exists('get_arr_column')) {
function get_arr_column($arr, $key_name)
{
if (function_exists('array_column')) {
return array_column($arr, $key_name);
}
$arr2 = array();
foreach ($arr as $key => $val) {
$arr2[] = $val[$key_name];
}
return $arr2;
}
}
function str2arr($str, $glue = ',')
{
return explode($glue, $str);
}
function sr($str = '', $target = '', $content = '')
{
return str_replace($target, $content, $str);
}
function str_prefix($str, $prefix)
{
return strpos($str, $prefix) === DATA_DISABLE ? true : false;
}
function file_list($path = '')
{
$file = scandir($path);
foreach ($file as $k => $v) {
if (is_dir($path . SYS_DS_PROS . $v)) {
unset($file[$k]);
}
}
return array_values($file);
}
function get_dir($dir_name)
{
$dir_array = [];
if (false != ($handle = opendir($dir_name))) {
$i = 0;
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != ".." && !strpos($file, ".")) {
$dir_array[$i] = $file;
$i++;
}
}
closedir($handle);
}
return $dir_array;
}
function get_file_root_path()
{
$root_arr = explode(SYS_DS_PROS, URL_ROOT);
array_pop($root_arr);
$root_url = arr2str($root_arr, SYS_DS_PROS);
return $root_url . SYS_DS_PROS;
}
function get_picture_url($id = 0,$member='picture')
{
$fileLogic = get_sington_object('fileLogic', LogicFile::class);
return $fileLogic->getPictureUrl($id,$member);
}
function get_picture_url2($path='')
{
$fileLogic = get_sington_object('fileLogic', LogicFile::class);
return $fileLogic->getPictureWebUrl($path);
}
function get_file_url($id = 0)
{
$fileLogic = get_sington_object('fileLogic', LogicFile::class);
return $fileLogic->getFileUrl($id);
}
function get_file_url2($path='')
{
$fileLogic = get_sington_object('fileLogic', LogicFile::class);
return $fileLogic->getFileWebUrl($path);
}
function get_picture_body($body = '')
{
$fileLogic = get_sington_object('fileLogic', LogicFile::class);
return $fileLogic->pictureDown($body);
}
function rm_empty_dir($path)
{
if (!(is_dir($path) && ($handle = opendir($path)) !== false)) {
return false;
}
while (($file = readdir($handle)) !== false) {
if (!($file != '.' && $file != '..')) {
continue;
}
$curfile = $path . SYS_DS_PROS . $file
if (!is_dir($curfile)) {
continue;
}
rm_empty_dir($curfile);
if (count(scandir($curfile)) == 2) {
rmdir($curfile);
}
}
closedir($handle);
}
function format_time($time = null, $format = 'Y-m-d H:i:s')
{
if (null === $time) {
$time = TIME_NOW;
}
return date($format, intval($time));
}
function get_date_from_range($startdate, $enddate)
{
$stimestamp = strtotime($startdate);
$etimestamp = strtotime($enddate);
$days = ($etimestamp - $stimestamp) / 86400 + 1;
$date = [];
for ($i = 0; $i < $days; $i++) {
$date[] = date('Y-m-d', $stimestamp + (86400 * $i));
}
return $date;
}
function sf($arr = [], $fpath = './test.php')
{
$data = "<?php\nreturn " . var_export($arr, true) . ";\n?>";
file_put_contents($fpath, $data);
}
function d($arr = [])
{
dump($arr);
}
function dd($arr = [])
{
dump($arr);
die;
}
function create_closure($object = null, $method_name = '', $parameter = [])
{
$func = function () use ($object, $method_name, $parameter) {
return call_user_func_array([$object, $method_name], $parameter);
};
return $func;
}
function auto_cache($key = '', $func = null, $time = 3)
{
$result = cache($key);
if (empty($result)) {
$result = $func();
!empty($result) && cache($key, $result, $time);
}
return $result;
}
function closure_list_exe($list = [])
{
Db::startTrans();
try {
foreach ($list as $closure) {
$closure();
}
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
throw $e;
}
}
function trans($parameter = [], $callback = null)
{
try {
Db::startTrans();
$backtrace = debug_backtrace(false, 2);
array_shift($backtrace);
$class = $backtrace[0]['class'];
$result = (new $class())->$callback($parameter);
Db::commit();
return $result;
} catch (Exception $ex) {
Db::rollback();
throw new Exception($ex->getMessage());
}
}
function update_cache_version($obj = null)
{
$lqf_auto_cache = cache('lqf_auto_cache');
is_string($obj) ? $lqf_auto_cache[$obj]['version']++ : $lqf_auto_cache[$obj->getTable()]['version']++;
cache('lqf_auto_cache', $lqf_auto_cache);
}