<?php
function dr_get_array_key($array, $value) {
if (!in_array($value, $array)) {
return false;
}
$new = array_flip($array);
return isset($new[$value]) ? $new[$value] : false;
}
function dr_site_info($name, $siteid = SITE_ID) {
return \Phpcmf\Service::C()->get_cache('site', $siteid, 'config', $name);
}
function dr_site_footer() {
$footer = '';
$wa = dr_site_info('SITE_WA');
if ($wa) {
$code = filter_var($wa, FILTER_SANITIZE_NUMBER_INT);
$footer .= ' <a href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=' . $code . '" rel="nofollow" target="_blank" style="color:#ccc">' . $wa . '</a>';
}
$scjd = dr_site_info('SITE_SCJD');
if ($scjd) {
$footer .= ' <a href="' . $scjd . '" rel="nofollow" target="_blank" style="color:#ccc"><img src="https://aimg8.dlssyht.cn/u/1669043/ueditor/image/835/1669043/1567162644445764.gif" style="width:1em;height:1em"/></a>';
}
return $footer;
}
function dr_get_ftable($id, $value, $class = '') {
$field = \Phpcmf\Service::C()->get_cache('table-field', $id);
if (!$field) {
return 'Ftable字段没有得到缓存数据';
}
!$class && $class = 'table table-nomargin table-bordered table-striped table-bordered table-advance';
$value = dr_string2array($value);
$width = \Phpcmf\Service::_is_mobile() ? '100%' : ($field['setting']['option']['width'] ? $field['setting']['option']['width'] : '100%');
$str = '<table id="dr_table_'.$field['fieldname'].'" class="'.$class.'" style="width:'.$width.(is_numeric($width) ? 'px' : '').';">';
$str.= ' <thead><tr>';
if ($field['setting']['option']['is_first_hang'] && !$field['setting']['option']['is_add']) {
$str .= ' <th> ' . $field['setting']['option']['first_cname'] . ' </th>';
}
if ($field['setting']['option']['field']) {
foreach ($field['setting']['option']['field'] as $t) {
if ($t['type']) {
$style = $t['width'] ? 'style="width:'.$t['width'].(is_numeric($t['width']) ? 'px' : '').';"' : '';
$str.= ' <th '.$style.'>'.$t['name'].'</th>';
}
}
}
$str.= ' </tr></thead>';
$str.= ' <tbody>';
for ($i = 1; $i <= count($value); $i++) {
$str.= ' <tr>';
if ($field['setting']['option']['is_first_hang'] && !$field['setting']['option']['is_add']) {
$hname = $field['setting']['option']['hang'][$i]['name'] ? $field['setting']['option']['hang'][$i]['name'] : '未命名';
$str .= ' <td> ' . $hname . ' </td>';
}
if ($field['setting']['option']['field']) {
foreach ($field['setting']['option']['field'] as $n => $t) {
if ($t['type']) {
$str.= ' <td>'.$value[$i][$n].'</td>';
}
}
}
$str.= ' </tr>';
}
$str.= ' </tbody>';
$str.= '</table>';
return $str;
}
function dr_is_double_search($param, $value) {
if (!$param) {
return 0;
}
$arr = explode('|', $param);
if (in_array($value, $arr)) {
return 1;
}
return 0;
}
function dr_get_double_search($param, $value) {
if (!$param) {
return $value;
}
$arr = explode('|', $param);
if (in_array($value, $arr)) {
$arr = array_merge(array_diff($arr, array($value)));
} else {
$arr[] = $value;
}
return $arr ? @implode('|', $arr) : '';
}
function dr_get_content_img($value, $num = 0) {
$rt = [];
$value = preg_replace('/\.(gif|jpg|jpeg|png)@(.*)(\'|")/iU', '.$1$3', $value);
if (preg_match_all("/(src)=([\"|']?)([^ \"'>]+\.(gif|jpg|jpeg|png))\\2/i", $value, $imgs)) {
$imgs[3] = array_unique($imgs[3]);
foreach ($imgs[3] as $i => $img) {
if ($num && $i+1 > $num) {
break;
}
$rt[] = dr_file(trim($img, '"'));
}
}
return $rt;
}
function dr_is_app($dir) {
return is_file(dr_get_app_dir($dir).'/install.lock');
}
function dr_is_module($dir, $siteid = SITE_ID) {
return \Phpcmf\Service::L('cache')->get('module-'.$siteid, $dir) ? 1 : 0;
}
function dr_rp($str, $o, $t) {
return str_replace($o, $t, $str);
}
function dr_qrcode($text, $thumb = '', $level = 'H', $size = 5) {
return ROOT_URL.'index.php?s=api&c=api&m=qrcode&thumb='.urlencode($thumb).'&text='.urlencode($text).'&size='.$size.'&level='.$level;
}
function dr_sec2time($times){
$result = '00:00:00';
if ($times > 0) {
$hour = floor($times/3600);
$minute = floor(($times-3600 * $hour)/60);
$second = floor((($times-3600 * $hour) - 60 * $minute) % 60);
strlen($hour) == 1 && $hour = '0'.$hour;
strlen($minute) == 1 && $minute = '0'.$minute;
strlen($second) == 1 && $second = '0'.$second;
$result = $hour.':'.$minute.':'.$second;
}
return $result;
}
function dr_get_files($value) {
$data = [];
$value = dr_string2array($value);
if (!$value) {
return $data;
} elseif (!isset($value['file'])) {
return $value;
}
foreach ($value['file'] as $i => $file) {
$data[] = [
'file' => $file, 'title' => $value['title'][$i], 'description' => $value['description'][$i], ];
}
return $data;
}
function dr_upload_temp_path() {
if (function_exists('ini_get')) {
$path = ini_get('upload_tmp_dir');
if ($path) {
return rtrim($path, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR;
}
}
return WRITEPATH.'temp/';
}
function dr_content_link($tags, $content, $num = 0) {
if (!$tags || !$content) {
return $content;
} elseif (!is_array($tags)) {
return $content;
}
foreach ($tags as $name => $url) {
if ($name && $url) {
$url = '<a href="'.$url.'" target="_blank">'.$name.'</a>';
$content = @preg_replace('\'(?!((<.*?)|(<a.*?)|(<strong.*?)))('.str_replace(["'", '-'], ["\'", '\-'], preg_quote($name)).')(?!(([^<>]*?)>)|([^>]*?</a>)|([^>]*?</strong>))\'si',
$url,
$content,
$num ? $num : -1
);
}
}
return $content;
}
function dr_neilian($content, $blank = 1, $num = 1) {
if (!$content) {
return '';
}
$tags = \Phpcmf\Service::L('cache')->get('tag-'.SITE_ID);
if ($tags) {
foreach ($tags as $t) {
$url = '<a href="'.$t['url'].'" '.($blank ? 'target="_blank"' : '').'>'.$t['name'].'</a>';
$content = @preg_replace('\'(?!((<.*?)|(<a.*?)|(<strong.*?)))('.str_replace(["'", '-'], ["\'", '\-'], preg_quote($t['name'])).')(?!(([^<>]*?)>)|([^>]*?</a>)|([^>]*?</strong>))\'si',
$url,
$content,
$num ? $num : -1
);
}
}
return $content;
}
function dr_star_level($num, $shifen = 0) {
$shifen && $num = $num/2;
$lv = 5;
$int = min(floor($num), $lv);
if (!$int) {
return '<i title="'.$num.'" class="fa fa-star-o"></i><i title="'.$num.'" class="fa fa-star-o"></i><i title="'.$num.'" class="fa fa-star-o"></i><i title="'.$num.'" class="fa fa-star-o"></i><i title="'.$num.'" class="fa fa-star-o"></i>';
}
$shi = [];
for ($i=0; $i<$int; $i++) {
$shi[] = '<i title="'.$num.'" class="fa fa-star"></i>';
}
if (dr_count($shi) >= $lv) {
return @implode('', $shi);
}
if ($num - $int > 0.5) {
$shi[]= '<i title="'.$num.'" class="fa fa-star-half-o"></i>';
} else {
$shi[] = '<i title="'.$num.'" class="fa fa-star-o"></i>';
}
$sx = $lv - dr_count($shi);
if ($sx > 0) {
for ($i=1; $i< $lv - $int; $i++) {
$shi[] = '<i title="'.$num.'" class="fa fa-star-o"></i>';
}
}
return @implode('', $shi);
}
if (!function_exists('dr_domain_301')) {
function dr_domain_301($domain, $uri = '') {
!$uri && $uri = (isset($_SERVER['HTTP_X_REWRITE_URL']) && trim($_SERVER['REQUEST_URI'], '/') == SELF ? trim($_SERVER['HTTP_X_REWRITE_URL'], '/') : ($_SERVER['REQUEST_URI'] ? trim($_SERVER['REQUEST_URI'], '/') : ''));
$url = rtrim($domain, '/').'/'.$uri;
if ($url == dr_now_url()) {
return;
}
if (IS_DEV) {
\Phpcmf\Service::C()->_admin_msg(1, '开发者模式:正在做自动识别终端(关闭开发者模式时即可自动跳转)', $url);exit;
}
dr_redirect($url, 'auto', 301);exit;
}
}
function dr_format_create_sql($sql) {
return trim(str_replace('ENGINE=MyISAM', 'ENGINE=InnoDB', $sql));
}
function dr_cms_domain_name($url) {
$param = parse_url($url);
if (isset($param['host']) && $param['host']) {
return $param['host'];
}
return $url;
}
function dr_lang(...$param) {
if (empty($param)) {
return null;
}
$string = $param[0];
unset($param[0]);
$string = \Phpcmf\Service::L('lang')->text($string);
return $param ? vsprintf($string, $param) : $string;
}
function dr_member_menu_show($t) {
if ($t['mark']) {
list($a, $b) = explode('-', $t['mark']);
switch ($a) {
case 'module':
if (!\Phpcmf\Service::C()->get_cache('module-'.SITE_ID.'-'.$b)) {
return 0;
}
break;
}
}
$is_site = 0;
if (!$t['site'] || in_array(SITE_ID, $t['site'])) {
$is_site = 1; }
if ($is_site && (!$t['group'] || array_intersect(\Phpcmf\Service::C()->member['groupid'], $t['group']))) {
return 1;
}
return 0;
}
function dr_navigator_id($type, $markid) {
return (int)\Phpcmf\Service::L('cache')->get('navigator-'.SITE_ID.'-url', $type, $markid);
}
function dr_cat_value(...$get) {
if (empty($get)) {
return '';
}
if (is_numeric($get[0]) && MOD_DIR) {
$name = 'module-'.SITE_ID.'-'.MOD_DIR;
} else {
$name = strpos($get[0], '-') ? 'module-'.$get[0] : 'module-'.SITE_ID.'-'.$get[0];
unset($get[0]);
}
$i = 0;
$param = [];
foreach ($get as $t) {
if ($i == 0) {
$param[] = $name;
$param[] = 'category';
}
$param[] = $t;
$i = 1;
}
return call_user_func_array([\Phpcmf\Service::C(), 'get_cache'], $param);
}
function dr_page_value($id, $field, $site = SITE_ID) {
if (empty($id)) {
return '';
}
return \Phpcmf\Service::C()->get_cache('page-'.$site, 'data', $id, $field);
}
function dr_share_cat_value($id, $field='') {
$get = func_get_args();
if (empty($get)) {
return NULL;
}
$i = 0;
$param = [];
foreach ($get as $t) {
if ($i == 0) {
$param[] = 'module-'.SITE_ID.'-share';
$param[] = 'category';
}
$param[] = $t;
$i = 1;
}
return call_user_func_array(array(\Phpcmf\Service::C(), 'get_cache'), $param);
}
function dr_get_domain_name($url) {
list($url) = explode(':', str_replace(['https://', 'http://', '/'], '', $url));
return $url;
}
function dr_save_bfb_data($data) {
$cache = [];
$count = dr_count($data);
if ($count > 100) {
$pagesize = ceil($count/100);
for ($i = 1; $i <= 100; $i ++) {
$cache[$i] = array_slice($data, ($i - 1) * $pagesize, $pagesize);
}
} else {
for ($i = 1; $i <= $count; $i ++) {
$cache[$i] = array_slice($data, ($i - 1), 1);
}
}
return $cache;
}
function dr_avatar_path() {
$config = \Phpcmf\Service::C()->get_cache('site', SITE_ID, 'image');
if (!$config['avatar_path'] || !$config['avatar_url']) {
return [ROOTPATH.'api/member/', ROOT_URL.'api/member/'];
}
if ((strpos($config['avatar_path'], '/') === 0 || strpos($config['avatar_path'], ':') !== false) && is_dir($config['avatar_path'])) {
return [rtrim($config['avatar_path'], DIRECTORY_SEPARATOR).'/', trim($config['avatar_url'], '/').'/'];
} else {
return [ROOTPATH.trim($config['avatar_path'], '/').'/', ROOT_URL.trim($config['avatar_path'], '/').'/'];
}
}
function dr_avatar($uid) {
if ($uid) {
if (defined('UCSSO_API')) {
return ucsso_get_avatar($uid);
}
list($cache_path, $cache_url) = dr_avatar_path();
if (is_file($cache_path.$uid.'.jpg')) {
return $cache_url.$uid.'.jpg';
}
}
return ROOT_THEME_PATH.'assets/images/avatar.png';
}
function dr_member_info($uid, $name = '', $cache = -1) {
$data = \Phpcmf\Service::L('cache')->get_data('member-info-'.$uid);
if (!$data) {
$data = \Phpcmf\Service::M('member')->get_member($uid);
SYS_CACHE && \Phpcmf\Service::L('cache')->set_data('member-info-'.$uid, $data, $cache > 0 ? $cache : SYS_CACHE_SHOW * 3600);
}
return $name ? $data[$name] : $data;
}
function dr_member_username_info($username, $name = '', $cache = -1) {
$data = \Phpcmf\Service::L('cache')->get_data('member-info-name-'.$username);
if (!$data) {
$data = \Phpcmf\Service::M('member')->get_member(0, $username);
SYS_CACHE && \Phpcmf\Service::L('cache')->set_data('member-info-name-'.$username, $data, $cache > 0 ? $cache : SYS_CACHE_SHOW * 3600);
}
return $name ? $data[$name] : $data;
}
function dr_member_invite($uid, $name = 'uid') {
$data = \Phpcmf\Service::M()->db->where('rid', $uid)->get('member_invite')->row_array();
return $data[$name] ? $data[$name] : '';
}
function dr_list_function($func, $value, $param = [], $data = []) {
if (!$func) {
return $value;
}
$obj = \Phpcmf\Service::L('Function_list');
if (method_exists($obj, $func)) {
return call_user_func_array([$obj, $func], ['value'=>$value, 'param' => $param, $data]);
} elseif (function_exists($func)) {
return call_user_func_array($func, ['value'=>$value, 'param' => $param, $data]);
} else {
log_message('error', '你没有定义字段列表回调函数:'.$func);
}
return $value;
}
function dr_catpos($catid, $symbol = ' > ', $url = true, $html= '', $dirname = MOD_DIR, $url_call_func = '') {
if (!$catid) {
return '';
}
$cat = \Phpcmf\Service::L('cache')->get('module-'.SITE_ID.'-'.(!$dirname || $dirname == 'MOD_DIR' ? 'share' : $dirname), 'category');
if (!isset($cat[$catid])) {
return '';
}
$name = [];
$array = explode(',', $cat[$catid]['pids']);
$array[] = $catid;
foreach ($array as $id) {
if ($id && $cat[$id]) {
if ($url_call_func && function_exists($url_call_func)) {
$murl = $url_call_func($cat[$id]);
} else {
$murl = $cat[$id]['url'];
}
$name[] = $url ? ($html ? str_replace(['[url]', '[name]'], [$murl, $cat[$id]['name']], $html): "<a href=\"{$murl}\">{$cat[$id]['name']}</a>") : $cat[$id]['name'];
}
}
return implode($symbol, array_unique($name));
}
function dr_linkagepos($code, $id, $symbol = ' > ', $url = '', $html = '') {
if (!$code || !$id) {
return '';
}
$url = $url ? urldecode($url) : '';
$link = \Phpcmf\Service::L('cache')->get('linkage-'.SITE_ID.'-'.$code);
$cids = \Phpcmf\Service::L('cache')->get('linkage-'.SITE_ID.'-'.$code.'-id');
if (is_numeric($id)) {
$id = $cids[$id];
$data = $link[$id];
} else {
$data = $link[$id];
}
$name = [];
$array = @explode(',', $data['pids']);
$array[] = $data['ii'];
foreach ($array as $ii) {
if ($ii) {
$name[] = $url ? ($html ? str_replace(['[url]', '[name]'], array(str_replace(['[linkage]', '{linkage}'], $cids[$ii], $url), $link[$cids[$ii]]['name']), $html) : "<a href=\"".str_replace(['[linkage]', '{linkage}'], $cids[$ii], $url)."\">{$link[$cids[$ii]]['name']}</a>") : $link[$cids[$ii]]['name'];
}
}
return implode($symbol, array_unique($name));
}
function dr_linkage($code, $id, $level = 0, $name = '') {
if (!$id) {
return false;
}
$link = \Phpcmf\Service::L('cache')->get('linkage-'.SITE_ID.'-'.$code);
$cids = \Phpcmf\Service::L('cache')->get('linkage-'.SITE_ID.'-'.$code.'-id');
if (is_numeric($id)) {
$id = $cids[$id];
$data = $link[$id];
} else {
$data = $link[$id];
}
$pids = @explode(',', $data['pids']);
if ($level == 0) {
return $name ? $data[$name] : $data;
}
if (!$pids) {
return $name ? $data[$name] : $data;
}
$i = 1;
foreach ($pids as $pid) {
if ($pid) {
$pid = $cids[$pid]; if ($i == $level) {
return $name ? $link[$pid][$name] : $link[$pid];
}
$i++;
}
}
return $name ? $data[$name] : $data;
}
function dr_page_catpos($id, $symbol = ' > ', $html = '') {
if (!$id) {
return '';
}
$page = \Phpcmf\Service::C()->get_cache('page-'.SITE_ID, 'data');
if (!isset($page[$id])) {
return '';
}
$name = [];
$array = explode(',', $page[$id]['pids']);
$array[] = $id;
foreach ($array as $i) {
if ($i && $page[$i]) {
$murl = $page[$i]['url'];
$name[] = $html ? str_replace(['[url]', '[name]'], [$murl, $page[$i]['name']], $html) : "<a href=\"{$murl}\">{$page[$i]['name']}</a>";
}
}
return implode($symbol, array_unique($name));
}
function dr_payform($mark, $value = 0, $title = '', $url = '', $remove_div = 1) {
return \Phpcmf\Service::M('Pay')->payform($mark, $value, $title, $url, $remove_div);
}
function dr_fieldform($field, $value = '', $remove_div = 1) {
if (!$field) {
return '字段数据不存在';
}
$field = dr_string2array($field);
if (!$field['fieldtype']) {
return '字段类别不存在';
}
$f = \Phpcmf\Service::L('Field')->get($field['fieldtype']);
$f->remove_div = $remove_div;
return $f->input($field, $value);
}
function dr_donation($id, $title = '', $dir = null, $remove_div = 1) {
!$dir && $dir = MOD_DIR;
return \Phpcmf\Service::M('Pay')->payform('donation-'.$dir.'-'.$id.'-'.SITE_ID, 0, $title, '/index.php?s='.$dir.'&c=show&id='.$id, $remove_div);
}
function dr_is_favorite($dir, $id, $uid = 0) {
!$uid && $uid = \Phpcmf\Service::C()->uid;
if (!$uid) {
return 0;
} elseif (!$dir) {
return 0;
}
return \Phpcmf\Service::M()->db->table(SITE_ID.'_'.$dir.'_favorite')->where('uid', $uid)->where('cid', $id)->countAllResults();
}
function dr_field_form($field, $value = '', $app = '', $remove_div = 1) {
if (!$field) {
return 'field字段信息为空';
}
$f = \Phpcmf\Service::L('Field')->get($field['fieldtype']);
if (!$f) {
return 'field对象('.$field['fieldtype'].')不存在';
}
$f->remove_div = $remove_div;
return $f->input($field, $value);
}
function dr_block($id, $type = 0, $site = 0) {
return \Phpcmf\Service::C()->get_cache('block-'.($site ? $site : SITE_ID), $id, $type);
}
function dr_is_weixin_app() {
return strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger');
}
function dr_var_value($name) {
return \Phpcmf\Service::C()->get_cache('var', $name);
}
function dr_get_dir_path($path) {
if ((strpos($path, '/') === 0 || strpos($path, ':') !== false)) {
return rtrim($path, DIRECTORY_SEPARATOR).'/';
} else {
return ROOTPATH.trim($path, '/').'/';
}
}
function dr_thumb_path() {
$config = \Phpcmf\Service::C()->get_cache('site', SITE_ID, 'image');
if (!$config['cache_path'] || !$config['cache_url']) {
return [ROOTPATH.'uploadfile/thumb/', ROOT_URL.'uploadfile/thumb/'];
}
if ((strpos($config['cache_path'], '/') === 0 || strpos($config['cache_path'], ':') !== false) && is_dir($config['cache_path'])) {
return [rtrim($config['cache_path'], DIRECTORY_SEPARATOR).'/', trim($config['cache_url'], '/').'/'];
} else {
return [ROOTPATH.trim($config['cache_path'], '/').'/', ROOT_URL.trim($config['cache_path'], '/').'/'];
}
}
function dr_thumb($img, $width = 0, $height = 0, $water = 0, $mode = 'auto') {
if (is_numeric($img)) {
list($cache_path, $cache_url) = dr_thumb_path();
$cache_file = md5($img).'/'.$width.'x'.$height.($water ? '_water' : '').'_'.$mode.'.jpg';
if (is_file($cache_path.$cache_file)) {
return $cache_url.$cache_file;
}
return \Phpcmf\Service::L('image')->thumb($img, $width, $height, $water, $mode);
}
$file = dr_file($img);
return $file ? $file : ROOT_THEME_PATH.'assets/images/nopic.gif';
}
function dr_get_file($id) {
if (!$id) {
return '';
}
if (is_numeric($id)) {
$info = \Phpcmf\Service::C()->get_attachment($id);
if ($info['url']) {
return $info['url'];
}
}
$file = dr_file($id);
return $file ? $file : $id;
}
function dr_down_file($id) {
if (!$id) {
return '文件参数不能为空';
}
return ROOT_URL."index.php?s=api&c=file&m=down&id=".urlencode($id);
}
function dr_get_file_url($data, $w = 0, $h = 0) {
if (!$data) {
return '文件信息不存在';
} elseif ($data['remote'] && ($info = \Phpcmf\Service::C()->get_cache('attachment', $data['remote']))) {
return $info['url'].$data['attachment'];
} elseif ($w && $h && in_array($data['fileext'], ['jpg', 'gif', 'png', 'jpeg'])) {
return dr_thumb($data['id'], $w, $h);
}
return SYS_UPLOAD_URL.$data['attachment'];
}
function dr_field_options($id) {
if (!$id) {
return NULL;
}
$data = \Phpcmf\Service::L('cache')->get_data('field-info-'.$id);
if (!$data) {
$field = \Phpcmf\Service::C()->get_cache('table-field', $id);
if (!$field) {
return NULL;
}
$data = dr_format_option_array($field['setting']['option']['options']);
if (!$data) {
return NULL;
}
\Phpcmf\Service::L('cache')->set_data('field-info-'.$id, $data, 10000);
}
return $data;
}
function dr_notice_info() {
return [
1 => [
'name' => dr_lang('系统'),
'icon' => '<i class="fa fa-bell-o"></i>',
],
2 => [
'name' => dr_lang('用户'),
'icon' => '<i class="fa fa-user"></i>',
],
3 => [
'name' => dr_lang('内容'),
'icon' => '<i class="fa fa-th-large"></i>',
],
4 => [
'name' => dr_lang('应用'),
'icon' => '<i class="fa fa-puzzle-piece"></i>',
],
5 => [
'name' => dr_lang('交易'),
'icon' => '<i class="fa fa-rmb"></i>',
],
6 => [
'name' => dr_lang('订单'),
'icon' => '<i class="fa fa-shopping-cart"></i>',
],
];
}
function dr_member_auth($my, $auth) {
if (!$auth) {
return 1;
}
$rt = 0;
!$my && $my = [0];
foreach ($my as $id) {
if (!in_array($id, $auth)) {
$rt = 1;
}
}
return $rt;
}
function dr_member_auth_id($authid, $postid) {
if (!$authid) {
return [];
} elseif (!$postid) {
return $authid;
} elseif (dr_count($authid) == dr_count($postid)) {
return [];
}
$rt = [];
foreach ($authid as $id) {
if (!in_array($id, $postid)) {
$rt[] = $id;
}
}
return $rt;
}
function dr_weixin_error_msg($code) {
$msg = array (
'-1' => '系统繁忙,此时请开发者稍候再试',
'0' => '请求成功',
'40001' => '获取access_token时AppSecret错误,或者access_token无效。',
'40002' => '不合法的凭证类型',
'40003' => '不合法的OpenID,请开发者确认OpenID(该用户)是否已关注公众号,或是否是其他公众号的OpenID',
'40004' => '不合法的媒体文件类型',
'40005' => '不合法的文件类型',
'40006' => '不合法的文件大小',
'40007' => '不合法的媒体文件id',
'40008' => '不合法的消息类型',
'40009' => '不合法的图片文件大小',
'40010' => '不合法的语音文件大小',
'40011' => '不合法的视频文件大小',
'40012' => '不合法的缩略图文件大小',
'40013' => '不合法的AppID,请开发者检查AppID的正确性,避免异常字符,注意大小写',
'40014' => '不合法的access_token,请开发者认真比对access_token的有效性(如是否过期),或查看是否正在为恰当的公众号调用接口',
'40015' => '不合法的菜单类型',
'40016' => '不合法的按钮个数',
'40017' => '不合法的按钮个数',
'40018' => '不合法的按钮名字长度',
'40019' => '不合法的按钮KEY长度',
'40020' => '不合法的按钮URL长度',
'40021' => '不合法的菜单版本号',
'40022' => '不合法的子菜单级数',
'40023' => '不合法的子菜单按钮个数',
'40024' => '不合法的子菜单按钮类型',
'40025' => '不合法的子菜单按钮名字长度',
'40026' => '不合法的子菜单按钮KEY长度',
'40027' => '不合法的子菜单按钮URL长度',
'40028' => '不合法的自定义菜单使用用户',
'40029' => '不合法的oauth_code',
'40030' => '不合法的refresh_token',
'40031' => '不合法的openid列表',
'40032' => '不合法的openid列表长度',
'40033' => '不合法的请求字符,不能包含\uxxxx格式的字符',
'40035' => '不合法的参数',
'40038' => '不合法的请求格式',
'40039' => '不合法的URL长度',
'40050' => '不合法的分组id',
'40051' => '分组名字不合法',
'40117' => '分组名字不合法',
'40118' => 'media_id大小不合法',
'40119' => 'button类型错误',
'40120' => 'button类型错误',
'40121' => '不合法的media_id类型',
'40132' => '微信号不合法',
'40137' => '不支持的图片格式',
'41001' => '缺少access_token参数',
'41002' => '缺少appid参数',
'41003' => '缺少refresh_token参数',
'41004' => '缺少secret参数',
'41005' => '缺少多媒体文件数据',
'41006' => '缺少media_id参数',
'41007' => '缺少子菜单数据',
'41008' => '缺少oauth code',
'41009' => '缺少openid',
'42001' => 'access_token超时,请检查access_token的有效期,请参考基础支持-获取access_token中,对access_token的详细机制说明',
'42002' => 'refresh_token超时',
'42003' => 'oauth_code超时',
'43001' => '需要GET请求',
'43002' => '需要POST请求',
'43003' => '需要HTTPS请求',
'43004' => '需要接收者关注',
'43005' => '需要好友关系',
'44001' => '多媒体文件为空',
'44002' => 'POST的数据包为空',
'44003' => '图文消息内容为空',
'44004' => '文本消息内容为空',
'45001' => '多媒体文件大小超过限制',
'45002' => '消息内容超过限制',
'45003' => '标题字段超过限制',
'45004' => '描述字段超过限制',
'45005' => '链接字段超过限制',
'45006' => '图片链接字段超过限制',
'45007' => '语音播放时间超过限制',
'45008' => '图文消息超过限制',
'45009' => '接口调用超过限制',
'45010' => '创建菜单个数超过限制',
'45015' => '回复时间超过限制',
'45016' => '系统分组,不允许修改',
'45017' => '分组名字过长',
'45018' => '分组数量超过上限',
'46001' => '不存在媒体数据',
'46002' => '不存在的菜单版本',
'46003' => '不存在的菜单数据',
'46004' => '不存在的用户',
'47001' => '解析JSON/XML内容错误',
'48001' => 'api功能未授权,请确认公众号已获得该接口,可以在公众平台官网-开发者中心页中查看接口权限',
'50001' => '用户未授权该api',
'50002' => '用户受限,可能是违规后接口被封禁',
'61451' => '参数错误(invalid parameter)',
'61452' => '无效客服账号(invalid kf_account)',
'61453' => '客服帐号已存在(kf_account exsited)',
'61454' => '客服帐号名长度超过限制(仅允许10个英文字符,不包括@及@后的公众号的微信号)(invalid kf_acount length)',
'61455' => '客服帐号名包含非法字符(仅允许英文+数字)(illegal character in kf_account)',
'61456' => '客服帐号个数超过限制(10个客服账号)(kf_account count exceeded)',
'61457' => '无效头像文件类型(invalid file type)',
'61450' => '系统错误(system error)',
'61500' => '日期格式错误',
'61501' => '日期范围错误',
'9001001' => 'POST数据参数不合法',
'9001002' => '远端服务不可用',
'9001003' => 'Ticket不合法',
'9001004' => '获取摇周边用户信息失败',
'9001005' => '获取商户信息失败',
'9001006' => '获取OpenID失败',
'9001007' => '上传文件缺失',
'9001008' => '上传素材的文件类型不合法',
'9001009' => '上传素材的文件尺寸不合法',
'9001010' => '上传失败',
'9001020' => '帐号不合法',
'9001021' => '已有设备激活率低于50%,不能新增设备',
'9001022' => '设备申请数不合法,必须为大于0的数字',
'9001023' => '已存在审核中的设备ID申请',
'9001024' => '一次查询设备ID数量不能超过50',
'9001025' => '设备ID不合法',
'9001026' => '页面ID不合法',
'9001027' => '页面参数不合法',
'9001028' => '一次删除页面ID数量不能超过10',
'9001029' => '页面已应用在设备中,请先解除应用关系再删除',
'9001030' => '一次查询页面ID数量不能超过50',
'9001031' => '时间区间不合法',
'9001032' => '保存设备与页面的绑定关系参数错误',
'9001033' => '门店ID不合法',
'9001034' => '设备备注信息过长',
'9001035' => '设备申请参数不合法',
'9001036' => '查询起始值begin不合法'
);
return $msg[$code] ? $msg[$code] : $code ;
}
function wx_get_https_json_data($url) {
if (!$url) {
return dr_return_data(0, 'url为空');
}
$response = file_get_contents($url);
if (!$response) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$response = curl_exec($ch);
if ($error=curl_error($ch)){
return dr_return_data(0, $error);
}
curl_close($ch);
}
$data = json_decode($response, true);
if (!$data) {
return dr_return_data(0, $response.' 不是一个有效的json数据');
} elseif (isset($data['errcode']) && $data['errcode']) {
return dr_return_data(0, '错误代码('.$data['errcode'].'):'.$data['errmsg']);
}
return dr_return_data(1, 'ok', $data);
}
function wx_post_https_json_data($url, $param = []) {
if (!$url) {
return dr_return_data(0, 'url为空');
}
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_URL, $url );
curl_setopt ( $ch, CURLOPT_CUSTOMREQUEST, "POST" );
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, FALSE );
curl_setopt ( $ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)' );
curl_setopt ( $ch, CURLOPT_FOLLOWLOCATION, 1 );
curl_setopt ( $ch, CURLOPT_AUTOREFERER, 1 );
curl_setopt ( $ch, CURLOPT_POSTFIELDS, json_encode($param, JSON_UNESCAPED_UNICODE));
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
$response = curl_exec ( $ch );
if ($error=curl_error($ch)){
return dr_return_data(0, $error);
}
curl_close($ch);
$data = json_decode($response, true);
if (!$data) {
return dr_return_data(0, $response);
} elseif (isset($data['errcode']) && $data['errcode']) {
return dr_return_data(0, '错误代码('.dr_weixin_error_msg($data['errcode']).'):'.$data['errmsg']);
}
return dr_return_data(1, 'ok', $data);
}
function dr_zhe_price($value, $zhe) {
return max(0, $value * ($zhe/100));
}
function dr_price_value($value, $num = 2) {
return number_format($value, $num);
}
function dr_sku_price($value, $number = 2, $join = ' - ', $zhe = 0) {
$value = dr_string2array($value);
if (!$value || !is_array($value['value'])) {
return 0;
}
$price = [];
foreach ($value['value'] as $t) {
$price[] = $t['price'];
}
$min = min($price);
$max = max($price);
if ($zhe) {
$min = dr_zhe_price($min, $zhe);
$max = dr_zhe_price($max, $zhe);
}
if ($min == $max) {
return number_format($min, $number);
} else {
return number_format($min, $number).$join.number_format($max, $number);
}
}
function dr_sku_name($key, $data, $type = 0) {
if (!$key || !is_array($data)) {
return $type ? ['', ''] : '';
}
$sku = [];
$arr = explode('_', $key);
foreach ($arr as $i => $t) {
$i%2 == 0 && isset($arr[$i+1]) && $sku[] = $t.'_'.$arr[$i+1];
}
$value = [];
$string = [];
foreach ($data['group'] as $gid => $gname) {
foreach ($data['name'][$gid] as $vid => $vname) {
if (in_array("{$gid}_{$vid}", $sku)) {
$value[$gname] = $vname;
$string[] = $gname.':'.$vname;
}
}
}
return $type ? [$value, implode(' ', $string)] : implode(' ', $string);
}
function dr_level_next_value($array, $id) {
if (!$array) {
return [];
}
if ($id && $array[$id] && !$array[$id]['apply']) {
return []; }
$next = 0;
foreach ($array as $i => $v) {
if (!$id) {
return $v;
}
if ($i == $id) {
$next = 1;
continue;
}
if ($next && $v['apply']) {
return $v;
}
}
return [];
}
function dr_html_auth($is = 0) {
$file = WRITEPATH.'authcode/'.md5($_SERVER['HTTP_USER_AGENT']).'.auth';
if ($is) {
return file_put_contents($file, SYS_TIME);
} else {
$time = (int)file_get_contents($file);
if (SYS_TIME - $time <= 10000) {
return 1; } else {
return 0;
}
}
}
function dr_notice_icon($type, $c = '') {
switch ($type) {
case 1:
return '<span class="label label-sm label-danger '.$c.'">
<i class="fa fa-bell-o"></i>
</span>';
break;
case 2:
return '<span class="label label-sm label-info '.$c.'">
<i class="fa fa-user"></i>
</span>';
break;
case 3:
return '<span class="label label-sm label-success '.$c.'">
<i class="fa fa-th-large"></i>
</span>';
break;
case 4:
return '<span class="label label-sm label-default '.$c.'">
<i class="fa fa-puzzle-piece"></i>
</span>';
break;
case 5:
return '<span class="label label-sm label-warning '.$c.'">
<i class="fa fa-rmb"></i>
</span>';
break;
case 6:
return '<span class="label label-sm label-success '.$c.'">
<i class="fa fa-shopping-cart"></i>
</span>';
break;
}
}
function dr_pay_type_html($name) {
return dr_pay_name($name);
}
function dr_pay_name($name) {
return \Phpcmf\Service::M('Pay')->payname($name);
}
function dr_pay_type($name) {
return dr_clearhtml(\Phpcmf\Service::M('Pay')->paytype($name));
}
function dr_pay_status($data) {
return dr_clearhtml(\Phpcmf\Service::M('Pay')->paystatus($data));
}
function dr_pay_money_html($data, $v = 2) {
$html = '<span class="fc-pay-money ';
if ($data > 0) {
$html.= ' fc-pay-z">+ '.number_format($data, $v);
} else {
$html.= ' fc-pay-j">- '.number_format(abs($data), $v);
}
$html.= '</span>';
return $html;
}
function dr_clear_empty($value) {
return str_replace([' ', ' '], '', trim($value));
}
function dr_list_field_order($field) {
if (!$field) {
return [];
}
$order = [];
foreach ($field as $name => $m) {
$m['order'] && $order[$m['order']] = $name;
}
ksort($order);
$rt = [];
foreach ($order as $name) {
$field[$name]['use'] && $rt[$name] = $field[$name];
}
return $rt;
}
function dr_get_keyword($s) {
return dr_safe_replace(str_replace(array('+', ' '), '%', urldecode($s)));
}
function dr_array2array($a1, $a2) {
$a = [];
$a = $a1 ? $a1 : $a;
if ($a2) {
foreach ($a2 as $t) {
$a[] = $t;
}
}
return $a;
}
function dr_array22array($a1, $a2) {
$a = [];
$a = $a1 ? $a1 : $a;
if ($a2) {
foreach ($a2 as $i => $t) {
$a[$i] = $t;
}
}
return $a;
}
function dr_module_table_prefix($dir, $siteid = SITE_ID) {
return $siteid.'_'.$dir;;
}
function dr_icon($value) {
return $value ? $value : 'fa fa-table';
}
function dr_file($url) {
if (!$url || strlen($url) == 1) {
return NULL;
} elseif (substr($url, 0, 7) == 'http://' || substr($url, 0, 8) == 'https://') {
return $url;
} elseif (substr($url, 0, 1) == '/') {
return ROOT_URL.substr($url, 1);
}
return SYS_UPLOAD_URL . $url;
}
function dr_file_preview_html($value, $target = 0) {
$ext = trim(strtolower(strrchr($value, '.')), '.');
if (in_array($ext, ['jpg', 'gif', 'png', 'jpeg'])) {
$url = $target ? $value.'" target="_blank' : 'javascript:dr_preview_image(\''.$value.'\');';
return '<a href="'.$url.'"><img src="'.$value.'"></a>';
} elseif (is_file(ROOTPATH.'static/assets/images/ext/'.$ext.'.png')) {
$file = ROOT_THEME_PATH.'assets/images/ext/'.$ext.'.png';
$url = $target ? $value.'" target="_blank' : 'javascript:dr_preview_url(\''.dr_file($value).'\');';
return '<a href="'.$url.'"><img src="'.$file.'"></a>';
} elseif (strpos($value, 'http://') === 0) {
$file = ROOT_THEME_PATH.'assets/images/ext/url.png';
$url = $target ? $value.'" target="_blank' : 'javascript:dr_preview_url(\''.$value.'\');';
return '<a href="'.$url.'"><img src="'.$file.'"></a>';
} else {
return $value;
}
}
function dr_is_image($value) {
return in_array(trim(strtolower(strrchr($value, '.')), '.'), ['jpg', 'gif', 'png', 'jpeg']);
}
function dr_get_page_pname($id, $symbol = '_', $page) {
if (!$page[$id]['pids']) {
return $page[$id]['name'];
}
$name = [];
$array = explode(',', $page[$id]['pids']);
foreach ($array as $i) {
$i && $page[$i] && $name[] = $page[$i]['name'];
}
$name[] = $page[$id]['name'];
$name = array_unique($name);
krsort($name);
return implode($symbol, $name);
}
function dr_to_html_file_error($url, $file, $msg) {
$error = '**************************************************************************'.PHP_EOL;
$error.= $msg.''.PHP_EOL;
$url && $error.= '地址: '.$url.''.PHP_EOL;
$file && $error.= '文件: '.$file.''.PHP_EOL;
$error.= '**************************************************************************'.PHP_EOL.PHP_EOL;
file_put_contents(WRITEPATH.'html/error.log', $error, FILE_APPEND);
}
function dr_to_html_file($url, $root = WEBPATH) {
if (strpos($url, 'http://') === 0 || strpos($url, 'https://') === 0) {
return '';
} elseif (strpos($url, 'index.php') !== false) {
return '';
}
return dr_format_html_file($url, $root);
}
function dr_format_option_array($value) {
$data = [];
if (!$value) {
return $data;
}
$options = explode(PHP_EOL, str_replace(array(chr(13), chr(10)), PHP_EOL, $value));
foreach ($options as $t) {
if (strlen($t)) {
$n = $v = '';
if (strpos($t, '|') !== FALSE) {
list($n, $v) = explode('|', $t);
$v = is_null($v) || !strlen($v) ? '' : trim($v);
} else {
$v = $n = trim($t);
}
$data[$v] = $n;
}
}
return $data;
}
function dr_field_input($name, $type, $option, $value = NULL, $id = 0) {
return '';
}
function dr_dir_map($source_dir, $directory_depth = 0, $hidden = FALSE) {
if ($fp = @opendir($source_dir)) {
$filedata = [];
$new_depth = $directory_depth - 1;
$source_dir = rtrim($source_dir, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR;
while (FALSE !== ($file = readdir($fp))) {
if ($file === '.' OR $file === '..'
OR ($hidden === FALSE && $file[0] === '.')
OR !@is_dir($source_dir.$file)) {
continue;
}
if (($directory_depth < 1 OR $new_depth > 0)
&& @is_dir($source_dir.$file)) {
$filedata[$file] = dr_dir_map($source_dir.DIRECTORY_SEPARATOR.$file, $new_depth, $hidden);
} else {
$filedata[] = $file;
}
}
closedir($fp);
return $filedata;
}
return FALSE;
}
function dr_file_map($source_dir) {
if ($fp = @opendir($source_dir)) {
$filedata = [];
$source_dir = rtrim($source_dir, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR;
while (FALSE !== ($file = readdir($fp))) {
if ($file === '.' OR $file === '..'
OR $file[0] === '.'
OR !@is_file($source_dir.$file)) {
continue;
}
$filedata[] = $file;
}
closedir($fp);
return $filedata;
}
return FALSE;
}
function show_error($msg, $code = '', $o = '') {
exit($msg);
}
function dr_return_data($code, $msg = '', $data = []) {
return array(
'code' => $code,
'msg' => $msg,
'data' => $data,
);
}
function dr_form_hidden($data = []) {
$form = '<input name="isform" type="hidden" value="1">'.PHP_EOL;
$form.= '<input name="'.csrf_token().'" type="hidden" value="'.csrf_hash().'">'.PHP_EOL;
if ($data) {
foreach ($data as $name => $value) {
$form.= '<input name="'.$name.'" id="dr_'.$name.'" type="hidden" value="'.$value.'">'.PHP_EOL;
}
}
return $form;
}
function dr_form_search_hidden($p = []) {
$form = '';
$_GET['app'] && $form.= '<input name="app" type="hidden" value="'.$_GET['app'].'">'.PHP_EOL;
$form.= '<input name="s" type="hidden" value="'.$_GET['s'].'">'.PHP_EOL;
$form.= '<input name="m" type="hidden" value="'.$_GET['m'].'">'.PHP_EOL;
$form.= '<input name="c" type="hidden" value="'.$_GET['c'].'">'.PHP_EOL;
if ($p) {
foreach ($p as $name => $value) {
$form.= '<input name="'.$name.'" type="hidden" value="'.$value.'">'.PHP_EOL;
}
}
return $form;
}
function dr_base64_encode($string) {
$data = base64_encode($string);
$data = str_replace(['+', '/', '='], ['-', '_', ''], $data);
return $data;
}
function dr_base64_decode($string) {
$data = str_replace(['-', '_'], ['+', '/'], $string);
$mod4 = strlen($data) % 4;
$mod4 && $data.= substr('====', $mod4);
return base64_decode($data);
}
function dr_get_theme() {
if (!function_exists('dr_dir_map')) {
return ['default'];
}
return array_diff(dr_dir_map(ROOTPATH.'static/', 1), ['assets', 'space']);
}
function dr_randcode() {
return rand(100000, 999999);
}
function dr_dir_delete($path, $del_dir = FALSE, $htdocs = FALSE, $_level = 0)
{
$path = rtrim($path, '/\\');
if ( ! $current_dir = @opendir($path))
{
return FALSE;
}
while (FALSE !== ($filename = @readdir($current_dir)))
{
if ($filename !== '.' && $filename !== '..')
{
$filepath = $path.DIRECTORY_SEPARATOR.$filename;
if (is_dir($filepath) && $filename[0] !== '.' && ! is_link($filepath))
{
dr_dir_delete($filepath, $del_dir, $htdocs, $_level + 1);
} else {
@unlink($filepath);
}
}
}
closedir($current_dir);
$_level > 0 && @rmdir($path);
return $del_dir && $_level == 0 ? @rmdir($path) : TRUE;
}
function dr_comment_emotion() {
$emotion = [];
if ($fp = @opendir(ROOTPATH.'static/assets/comment/emotions/')) {
while (FALSE !== ($file = readdir($fp))) {
$info = pathinfo($file);
@in_array($info['extension'], ['gif', 'png', 'jpg', 'jpeg']) && $emotion[$info['filename']] = ROOT_THEME_PATH.'assets/comment/emotions/'.$file;
}
}
return $emotion;
}
function dr_authcode($string, $operation = 'DECODE') {
if (!$string) {
return '';
}
is_array($string) && $string = dr_array2string($string);
$code_path = WRITEPATH.'authcode/';
dr_mkdirs($code_path);
if ($operation == 'DECODE') {
$code_file = $code_path.dr_safe_filename($string);
if (is_file($code_file)) {
$rt = file_get_contents($code_file);
if ($rt) {
return $rt;
}
}
return dr_dz_authcode($string, $operation);
} else {
dr_mkdirs($code_path);
$rt = file_put_contents($code_path.md5($string), $string, LOCK_EX);
if (!$rt) {
return dr_dz_authcode($string, $operation);
}
return md5($string);
}
}
function dr_dz_authcode($string, $operation = 'DECODE') {
$string = str_replace(' ', '+', $string);
$expiry = 3600;
$ckey_length = 4;
$key = md5(SYS_KEY);
$keya = md5(substr($key, 0, 16));
$keyb = md5(substr($key, 16, 16));
$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length) : substr(md5(microtime()), -$ckey_length)) : '';
$cryptkey = $keya . md5($keya . $keyc);
$key_length = strlen($cryptkey);
$string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0) . substr(md5($string . $keyb), 0, 16) . $string;
$string_length = strlen($string);
$result = '';
$box = range(0, 255);
$rndkey = [];
for ($i = 0; $i <= 255; $i++) {
$rndkey[$i] = ord($cryptkey[$i % $key_length]);
}
for ($j = $i = 0; $i < 256; $i++) {
$j = ($j + $box[$i] + $rndkey[$i]) % 256;
$tmp = $box[$i];
$box[$i] = $box[$j];
$box[$j] = $tmp;
}
for ($a = $j = $i = 0; $i < $string_length; $i++) {
$a = ($a + 1) % 256;
$j = ($j + $box[$a]) % 256;
$tmp = $box[$a];
$box[$a] = $box[$j];
$box[$j] = $tmp;
$result.= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
}
if ($operation == 'DECODE') {
if ((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26) . $keyb), 0, 16)) {
return substr($result, 26);
} else {
return '';
}
} else {
return $keyc . str_replace('=', '', base64_encode($result));
}
}
function dr_now_url() {
return FC_NOW_URL;
}
function dr_code($width, $height, $url = '') {
$url = '/index.php?s=api&c=api&m=captcha&width='.$width.'&height='.$height;
return '<img align="absmiddle" style="cursor:pointer;" onclick="this.src=\''.$url.'&\'+Math.random();" src="'.$url.'" />';
}
function dr_sorting($name) {
$value = $_GET['order'] ? $_GET['order'] : '';
if (!$value) {
return 'order_sorting';
}
if (strpos($value, $name) === 0 && strpos($value, 'asc') !== FALSE) {
return 'order_sorting_asc';
} elseif (strpos($value, $name) === 0 && strpos($value, 'desc') !== FALSE) {
return 'order_sorting_desc';
}
return 'order_sorting';
}
function dr_member_order($url) {
$data = @explode('&', $url);
if ($data) {
foreach ($data as $t) {
if (strpos($t, 'order=') === 0) {
$url = str_replace('&' . $t, '', $url);
} elseif (strpos($t, 'action=') === 0) {
$url = str_replace('&' . $t, '', $url);
}
}
}
return $url;
}
function dr_baidu_position_js($ak = SYS_BDMAP_API) {
$code = \Phpcmf\Service::V()->load_js((strpos(FC_NOW_URL, 'https') === 0 ? 'https' : 'http').'://api.map.baidu.com/api?v=2.0&ak='.$ak);
$code.= '<script type="text/javascript">';
$code.= var geolocation = new BMap.Geolocation();
geolocation.getCurrentPosition(function(r){
if(this.getStatus() == BMAP_STATUS_SUCCESS){
$.ajax({type: "GET", url: "/index.php?s=api&c=api&m=baidu_position&value="+r.point.lng+\',\'+r.point.lat, dataType:"jsonp"});
} else {
alert(\'定位失败:\'+this.getStatus());
}
},{enableHighAccuracy: true});';
$code.= '</script>';
return $code;
}
function dr_baidu_map_form_hidden($field, $ak = SYS_BDMAP_API) {
$code = \Phpcmf\Service::V()->load_js((strpos(FC_NOW_URL, 'https') === 0 ? 'https' : 'http').'://api.map.baidu.com/api?v=2.0&ak='.$ak);
$code.= '<input type="hidden" id="dr_'.$field.'" name="data['.$field.']" value=""><script type="text/javascript">';
$code.= '<script type="text/javascript">';
$code.= var geolocation = new BMap.Geolocation();
geolocation.getCurrentPosition(function(r){
if(this.getStatus() == BMAP_STATUS_SUCCESS){
$("#dr_'.$field.'").val(r.point.lng+\',\'+r.point.lat);
$.ajax({type: "GET", url: "/index.php?s=api&c=api&m=baidu_position&value="+r.point.lng+\',\'+r.point.lat, dataType:"jsonp"});
} else {
alert(\'定位失败:\'+this.getStatus());
}
},{enableHighAccuracy: true});';
$code.= '</script>';
return $code;
}
function dr_baidu_map_js($ak = SYS_BDMAP_API) {
return \Phpcmf\Service::V()->load_js((strpos(FC_NOW_URL, 'https') === 0 ? 'https' : 'http').'://api.map.baidu.com/api?v=2.0&ak='.$ak);
}
function dr_baidu_map($value, $zoom = 15, $width = 600, $height = 400, $ak = SYS_BDMAP_API, $class= '', $tips = '') {
if (!$value) {
return '没有坐标值';
}
$id = 'dr_map_'.rand(0, 99);
!$ak && $ak = SYS_BDMAP_API;
$width = $width ? $width : '100%';
list($lngX, $latY) = explode(',', $value);
$js = \Phpcmf\Service::V()->load_js((strpos(FC_NOW_URL, 'https') === 0 ? 'https' : 'http').'://api.map.baidu.com/api?v=2.0&ak='.$ak);
return $js.'<div class="'.$class.'" id="' . $id . '" style="width:' . $width . 'px; height:' . $height . 'px; overflow:hidden"></div>
<script type="text/javascript">
var mapObj=null;
lngX = "' . $lngX . '";
latY = "' . $latY . '";
zoom = "' . $zoom . '";
var mapObj = new BMap.Map("'.$id.'");
var ctrl_nav = new BMap.NavigationControl({anchor:BMAP_ANCHOR_TOP_LEFT,type:BMAP_NAVIGATION_CONTROL_LARGE});
mapObj.addControl(ctrl_nav);
mapObj.enableDragging();
mapObj.enableScrollWheelZoom();
mapObj.enableDoubleClickZoom();
mapObj.enableKeyboard() mapObj.centerAndZoom(new BMap.Point(lngX,latY),zoom);
drawPoints();
function drawPoints(){
var myIcon = new BMap.Icon("' . ROOT_THEME_PATH . 'assets/images/mak.png", new BMap.Size(27, 45));
var center = mapObj.getCenter();
var point = new BMap.Point(lngX,latY);
var marker = new BMap.Marker(point, {icon: myIcon});
mapObj.addOverlay(marker);
'.($tips ? 'mapObj.openInfoWindow(new BMap.InfoWindow("'.str_replace('"', '\'', $tips).'",{offset:new BMap.Size(0,-17)}),point);' : '').'
}
</script>';
}
function dr_qq_map($value, $zoom = 10, $width = 600, $height = 400, $ui = 0, $class = '') {
if (!$value) {
return '没有坐标值';
}
$ui = !$ui ? 'false' : 'true';
$id = 'dr_qq_map_'.rand(0, 99);
$width = $width ? $width : '100%';
list($lngX, $latY) = explode(',', $value);
$js = \Phpcmf\Service::V()->load_js('http://map.qq.com/api/js?v=2.exp');
return $js.'<div class="'.$class.'" id="' . $id . '" style="width:' . $width . 'px; height:' . $height . 'px; overflow:hidden"></div>
<script type="text/javascript">
var center = new qq.maps.LatLng('.$latY.','.$lngX.');
var map = new qq.maps.Map(document.getElementById(\''.$id.'\'),{
center: center,
disableDefaultUI: '.$ui.',
zoom: '.$zoom.'
});
var anchor = new qq.maps.Point(6, 6),
size = new qq.maps.Size(27, 45),
origin = new qq.maps.Point(0, 0),
icon = new qq.maps.MarkerImage(\'' . ROOT_THEME_PATH . 'assets/images/mak.png\', size, origin, anchor);
var marker = new qq.maps.Marker({
icon: icon,
map: map,
position:map.getCenter()});
</script>';
}
function dr_show_stars($num, $starthreshold = 4) {
$str = '';
$alt = 'alt="Rank: '.$num.'"';
for ($i = 3; $i > 0; $i--) {
$numlevel = intval($num / pow($starthreshold, ($i - 1)));
$num = ($num % pow($starthreshold, ($i - 1)));
for ($j = 0; $j < $numlevel; $j++) {
$str.= '<img align="absmiddle" src="'.ROOT_THEME_PATH.'assets/images/star_level'.$i.'.gif" '.$alt.' />';
}
}
return $str;
}
function dr_module_comment($dir, $id) {
$url = "/index.php?s=".$dir."&c=comment&m=index&id={$id}";
return "<div id=\"dr_module_comment_{$id}\"></div><script type=\"text/javascript\">
function dr_ajax_module_comment_{$id}(type, page) {
var index = layer.load(2, { time: 10000 });
$.ajax({type: \"GET\", url: \"{$url}&type=\"+type+\"&page=\"+page+\"&\"+Math.random(), dataType:\"jsonp\",
success: function (data) {
layer.close(index);
if (data.code) {
$(\"#dr_module_comment_{$id}\").html(data.msg);
} else {
dr_tips(0, data.msg);
}
},
error: function(HttpRequest, ajaxOptions, thrownError) {
layer.closeAll();
alert(\"评论调用函数返回错误:\"+HttpRequest.responseText);
}
});
}
dr_ajax_module_comment_{$id}(0, 1);
</script>";
}
function dr_ajax_template($id, $filename) {
return "<script type=\"text/javascript\">
$.ajax({
type: \"GET\",
url:\"".ROOT_URL."index.php?s=api&c=api&m=template&name={$filename}\",
dataType: \"jsonp\",
success: function(data){
$(\"#{$id}\").html(data.msg);
}
});
</script>";
}
function dr_show_hits($id, $dom = "") {
$is = $dom;
!$dom && $dom = "dr_show_hits_{$id}";
$html = $is ? "" : "<span id=\"{$dom}\">0</span>";
return $html."<script type=\"text/javascript\">
$.ajax({
type: \"GET\",
url:\"".ROOT_URL."index.php?s=api&c=module&siteid=".SITE_ID."&app=".MOD_DIR."&m=hits&id={$id}\",
dataType: \"jsonp\",
success: function(data){
if (data.code) {
$(\"#{$dom}\").html(data.msg);
} else {
dr_tips(0, data.msg);
}
}
});
</script>";
}
function dr_show_module_total($name, $id, $dom) {
return "<script type=\"text/javascript\">
$.ajax({
type: \"GET\",
url:\"".ROOT_URL."index.php?s=api&c=module&siteid=".SITE_ID."&app=".MOD_DIR."&m=mcount&name={$name}&id={$id}\",
dataType: \"jsonp\",
success: function(data){
if (data.code) {
$(\"#{$dom}\").html(data.msg);
} else {
dr_tips(0, data.msg);
}
}
});
</script>";
}
function dr_catcher_data($url) {
$data = @file_get_contents($url);
if ($data !== FALSE) {
return $data;
}
if (function_exists('curl_init') && function_exists('curl_exec')) {
$ch = curl_init($url);
if (substr($url, 0, 8) == "https://") {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); }
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
return '';
}
function dr_search_rewrite_encode($params, $search) {
if (!$params) {
return '';
}
$join = $search['param_join'];
!$join && $join = '-';
if ($search['param_rule']) {
$url = '';
$default = $search['param_join_default_value'] ? $search['param_join_default_value'] : 0;
foreach ($search['param_join_field'] as $i => $name) {
if (!$name) {
break;
}
$v = isset($params[$name]) ? $params[$name] : $default;
$url.= $join.urlencode($v);
}
return trim($url, $join);
} else {
return dr_rewrite_encode($params, $join, $search['param_field']);
}
}
function dr_search_rewrite_decode($params, $search) {
if (!$params) {
return [];
}
$join = $search['param_join'];
!$join && $join = '-';
if ($search['param_rule']) {
$rt = [];
$array = explode($join, $params);
$default = $search['param_join_default_value'] ? $search['param_join_default_value'] : 0;
foreach ($search['param_join_field'] as $i => $name) {
if (!$name) {
break;
}
$rt[$name] = !strcasecmp($array[$i], $default) ? '' : $array[$i];
}
return $rt;
} else {
return dr_rewrite_decode($params, $join, $search['param_field']);
}
}
function dr_rewrite_encode($params, $join = '-', $field = []) {
if (!$params) {
return '';
}
!$join && $join = '-';
$field = array_flip(dr_format_option_array($field));
$url = '';
foreach ($params as $i => $t) {
$i = isset($field[$i]) && $field[$i] ? $field[$i] : $i;
$url.= $join.$i.$join.urlencode($t);
}
return trim($url, $join);
}
function dr_rewrite_decode($params, $join = '-', $field = []) {
if (!$params) {
return [];
}
$field = dr_format_option_array($field);
!$join && $join = '-';
$i = 0;
$array = explode($join, $params);
$return = [];
foreach ($array as $k => $t) {
$name = str_replace('$', '_', $t);
$name = isset($field[$name]) && $field[$name] ? $field[$name] : $name;
$i%2 == 0 && $return[$name] = isset($array[$k+1]) ? $array[$k+1] : '';
$i ++;
}
return $return;
}
function dr_safe_replace($string, $diy = null) {
$replace = ['%20', '%27', '%2527', '*', "'", '"', ';', '<', '>', "{", '}'];
$diy && is_array($diy) && $replace = dr_array2array($replace, $diy);
$diy && !is_array($diy) && $replace[] = $diy;
return str_replace($replace, '', $string);
}
function dr_safe_filename($string) {
return str_replace(
['..', "/", '\\', ' ', '<', '>', "{", '}', ';', '[', ']', '\'', '"', '*', '?'],
'',
$string
);
}
function dr_safe_username($string) {
return str_replace(
['..', "/", '\\', ' ', "#",'\'', '"'],
'',
$string
);
}
function dr_safe_password($string) {
return trim(str_replace(["'", '"', '&', '?'], '',$string));
}
function dr_safe_replace_path($path) {
return str_replace(
[
WRITEPATH,
WEBPATH,
APPSPATH,
TPLPATH,
FCPATH,
MYPATH,
],
[
'WRITEPATH/',
'WEBPATH/',
'APPSPATH/',
'TPLPATH/',
'FCPATH/',
'MYPATH/',
],
$path
);
}
function dr_strcut($string, $length = 100, $dot = '...') {
if (!$string || strlen($string) <= $length || !$length) {
return $string;
}
if (function_exists('mb_substr')) {
$strcut = mb_substr($string, 0, $length);
} else {
$n = $tn = $noc = 0;
$string = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string);
while ($n < strlen($string)) {
$t = ord($string[$n]);
if ($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
$tn = 1;
$n++;
$noc++;
} elseif (194 <= $t && $t <= 223) {
$tn = 2;
$n += 2;
$noc += 2;
} elseif (224 <= $t && $t <= 239) {
$tn = 3;
$n += 3;
$noc += 2;
} elseif (240 <= $t && $t <= 247) {
$tn = 4;
$n += 4;
$noc += 2;
} elseif (248 <= $t && $t <= 251) {
$tn = 5;
$n += 5;
$noc += 2;
} elseif ($t == 252 || $t == 253) {
$tn = 6;
$n += 6;
$noc += 2;
} else {
$n++;
}
if ($noc >= $length) {
break;
}
}
if ($noc > $length) {
$n -= $tn;
}
$strcut = substr($string, 0, $n);
$strcut = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $strcut);
}
$strcut == $string && $dot = '';
return $strcut . $dot;
}
function dr_clearhtml($str) {
$str = str_replace(
array(' ', '&', '"', ''', '“', '”', '—', '<', '>', '·', '…'), array(' ', '&', '"', "'", '“', '”', '—', '<', '>', '·', '…'), $str
);
$str = preg_replace("/\<[a-z]+(.*)\>/iU", "", $str);
$str = preg_replace("/\<\/[a-z]+\>/iU", "", $str);
$str = str_replace(array(PHP_EOL, chr(13), chr(10), ' '), '', $str);
$str = strip_tags($str);
return trim($str);
}
function dr_random_color() {
$str = '#';
for ($i = 0; $i < 6; $i++) {
$randNum = rand(0, 15);
switch ($randNum) {
case 10: $randNum = 'A';
break;
case 11: $randNum = 'B';
break;
case 12: $randNum = 'C';
break;
case 13: $randNum = 'D';
break;
case 14: $randNum = 'E';
break;
case 15: $randNum = 'F';
break;
}
$str.= $randNum;
}
return $str;
}
function dr_fdate($sTime, $formt = 'Y-m-d') {
if (!$sTime) {
return '';
}
$cTime = time();
$dTime = $cTime - $sTime;
$dDay = intval(date('z',$cTime)) - intval(date('z',$sTime));
$dYear = intval(date('Y',$cTime)) - intval(date('Y',$sTime));
if ($dYear > 0) {
return date($formt, $sTime);
}
if ($dTime < 60 ) {
if ($dTime < 10) {
return '刚刚';
} else {
return intval(floor($dTime / 10) * 10).'秒前';
}
} elseif ($dTime < 3600 ) {
return intval($dTime/60).'分钟前';
} elseif( $dTime >= 3600 && $dDay == 0 ){
return intval($dTime/3600).'小时前';
} elseif( $dDay > 0 && $dDay<=7 ){
return intval($dDay).'天前';
} elseif( $dDay > 7 && $dDay <= 30 ){
return intval($dDay/7).'周前';
} elseif( $dDay > 30 && $dDay < 180){
return intval($dDay/30).'个月前';
} elseif( $dDay >= 180 && $dDay < 360){
return '半年前';
} elseif ($dYear==0) {
return date('m月d日', $sTime);
} else {
return date($formt, $sTime);
}
}
function dr_date($time = NULL, $format = SITE_TIME_FORMAT, $color = NULL) {
$time = (int) $time;
if (!$time) {
return '';
}
!$format && $format = SITE_TIME_FORMAT;
!$format && $format = 'Y-m-d H:i:s';
$string = date($format, $time);
if (strpos($string, '1970') !== FALSE) {
return '';
}
return $color && $time >= strtotime(date('Y-m-d 00:00:00')) && $time <= strtotime(date('Y-m-d 23:59:59')) ? '<font color="' . $color . '">' . $string . '</font>' : $string;
}
function dr_object2array($obj) {
$_arr = is_object($obj) ? get_object_vars($obj) : $obj;
if ($_arr && is_array($_arr)) {
foreach ($_arr as $key => $val) {
$val = (is_array($val) || is_object($val)) ? dr_object2array($val) : $val;
$arr[$key] = $val;
}
}
return $arr;
}
function dr_string2array($data) {
if (is_array($data)) {
return $data;
} elseif (!$data) {
return [];
}
$rt = json_decode($data, true);
if ($rt) {
return $rt;
}
return unserialize(stripslashes($data));
}
function dr_array2string($data) {
return $data ? json_encode($data, JSON_UNESCAPED_UNICODE) : '';
}
function dr_mkdirs($dir, $null = true) {
if (!$dir) {
return FALSE;
}
if (!is_dir($dir)) {
dr_mkdirs(dirname($dir));
if (!is_dir($dir)) {
mkdir($dir, 0777, true);
}
}
}
function dr_format_file_size($fileSize, $round = 2) {
if (!$fileSize) {
return 0;
}
$i = 0;
$inv = 1 / 1024;
$unit = array(' Bytes', ' KB', ' MB', ' GB', ' TB', ' PB', ' EB', ' ZB', ' YB');
while ($fileSize >= 1024 && $i < 8) {
$fileSize *= $inv;
++$i;
}
$temp = sprintf("%.2f", $fileSize);
$value = $temp - (int) $temp ? $temp : $fileSize;
return round($value, $round) . $unit[$i];
}
function dr_keyword_highlight($string, $keyword, $rule = '') {
if (!$keyword) {
return $string;
}
$arr = explode(' ', trim(str_replace('%', ' ', urldecode($keyword)), '%'));
if (!$arr) {
return $string;
}
!$rule && $rule = '<font color=red><strong>[value]</strong></font>';
foreach ($arr as $t) {
$string = str_ireplace($t, str_replace('[value]', $t, $rule), $string);
}
return $string;
}
function dollar($value, $include_cents = TRUE) {
if (!$include_cents) {
return "$" . number_format($value);
} else {
return "$" . number_format($value, 2, '.', ',');
}
}
function dr_preg_html($html){
$p = array("/<[a|A][^>]+(topic=\"true\")+[^>]*+>#([^<]+)#<\/[a|A]>/",
"/<[a|A][^>]+(data=\")+([^\"]+)\"[^>]*+>[^<]*+<\/[a|A]>/",
"/<[img|IMG][^>]+(src=\")+([^\"]+)\"[^>]*+>/");
$t = array('topic{data=$2}','$2','img{data=$2}');
$html = preg_replace($p, $t, $html);
$html = strip_tags($html, "<br/>");
return $html;
}
function _format_feed_content_url_length($match) {
return '<a href="'.$match[1].'" target="_blank">'.$match[1].'</a>';
}
function dr_replace_emotion($content) {
$content = htmlspecialchars_decode($content);
if (preg_match_all('/\[([a-z0-9]+)\]/Ui', $content, $match)) {
foreach ($match[1] as $t) {
is_file(ROOTPATH.'static/assets/comment/emotions/'.$t.'.gif') && $content = str_replace('['.$t.']', '<img src="'.SITE_URL.'static/assets/comment/emotions/'.$t.'.gif" />', $content);
}
}
return $content;
}
function dr_qrcode_url($text, $uid = 0, $level = 'L', $size = 5) {
return ROOT_URL.'index.php?c=api&m=qrcode&uid='.urlencode($uid).'&text='.urlencode($text).'&size='.$size.'&level='.$level;
}
function dr_get_order_string($str, $order) {
if (substr_count($str, ' ') >= 2
|| strpos($str, '(') !== FALSE
|| strpos($str, 'undefined') === 0
|| strpos($str, ')') !== FALSE ) {
return $order;
}
return $str ? $str : ($order ? $order : 'id desc');
}
function dr_discount($price, $nowprice) {
if ($nowprice <= 0) {
return 0;
}
return round(10 / ($price / $nowprice), 1);
}
function dr_distance($new, $to, $mark = '米,千米') {
list($lng1, $lat1) = explode(',', $new);
list($lng2, $lat2) = explode(',', $to);
list($lat1) = explode('|', $lat1);
list($lat2) = explode('|', $lat2);
$lat1 = ($lat1 * pi() ) / 180;
$lng1 = ($lng1 * pi() ) / 180;
$lat2 = ($lat2 * pi() ) / 180;
$lng2 = ($lng2 * pi() ) / 180;
$calcLongitude = $lng2 - $lng1;
$calcLatitude = $lat2 - $lat1;
$stepOne = pow(sin($calcLatitude / 2), 2) + cos($lat1) * cos($lat2) * pow(sin($calcLongitude / 2), 2); $stepTwo = 2 * asin(min(1, sqrt($stepOne)));
$earthRadius = 6367000; $calculatedDistance = $earthRadius * $stepTwo;
$value = round($calculatedDistance);
if (!$mark) {
return $value;
}
$dw = '';
$mark = @explode(',', $mark);
if ($value < 1000) {
$dw = isset($mark[0]) ? $mark[0] : '';
} elseif ($value >= 1000) {
$dw = isset($mark[1]) ? $mark[1] : '';
$dw && $value = $value / 1000;
}
return $value.$dw;
}
function dr_square_point($lng, $lat, $distance = 0.5){
$r = 6371; $distance = $distance ? $distance : 1;
$dlng = 2 * asin(sin($distance / (2 * $r)) / cos(deg2rad($lat)));
$dlng = rad2deg($dlng);
$dlat = $distance/$r;
$dlat = rad2deg($dlat);
return array(
'left-top'=>array('lat'=> round($lat + $dlat, 6),'lng'=> round($lng-$dlng, 6)),
'right-top'=>array('lat'=> round($lat + $dlat, 6), 'lng'=> round($lng + $dlng, 6)),
'left-bottom'=>array('lat'=> round($lat - $dlat, 6), 'lng'=> round($lng - $dlng, 6)),
'right-bottom'=>array('lat'=> round($lat - $dlat, 6), 'lng'=> round($lng + $dlng, 6))
);
}
function dr_format_html_file($file, $root = WEBPATH) {
if (strpos($file, 'http://') !== false) {
return '';
}
$dir = dirname($file);
$nfile = basename($file);
if ($dir != '.' && !is_dir($root.$dir)) {
dr_mkdirs($root.$dir, TRUE);
}
$hfile = str_replace('./', '', $root.$dir.'/'.$nfile);
$hfile = str_replace( $hfile = str_replace( $hfile = str_replace(
if (strpos($nfile, '.html') === FALSE
&& strpos($nfile, '.htm') === FALSE
&& strpos($nfile, '.shtml') === FALSE) {
$hfile = rtrim($hfile, '/').'/';
mkdir ($hfile,0777,true);
}
if (is_dir($hfile)) {
$dir.= '/'.$nfile;
$nfile = 'index.html';
$hfile = str_replace('./', '', $root.$dir.'/'.$nfile);
}
return $hfile;
}
function dr_delete_html_file($url, $root = WEBPATH) {
$file = dr_format_html_file($url, $root);
if (is_file($file)) {
unlink($file);
}
}
function dr_tpl_path($is_member = IS_MEMBER) {
$tpl = dr_get_app_tpl(APP_DIR && APP_DIR != 'member' ? APP_DIR : '');
$path = $is_member ? $tpl.(\Phpcmf\Service::IS_MOBILE() && is_dir($tpl.'mobile/'.SITE_TEMPLATE.'/') ? 'mobile' : 'pc').'/'.SITE_TEMPLATE.'/member/' : $tpl.(\Phpcmf\Service::IS_MOBILE() && is_dir($tpl.'mobile/'.SITE_TEMPLATE.'/') ? 'mobile' : 'pc').'/'.SITE_TEMPLATE.'/home/';
APP_DIR && APP_DIR != 'member' && $path.= APP_DIR.'/';
return $path;
}
function dr_get_form_post_value($table) {
$rt = [
'form' => dr_form_hidden(),
];
$form = \Phpcmf\Service::L('cache')->get('form-'.SITE_ID, $table);
if (!$form) {
return $rt;
}
$rt['form_name'] = $form['name'];
$rt['form_table'] = $form['table'];
$rt['is_post_code'] = dr_member_auth(
\Phpcmf\Service::C()->member_authid,
\Phpcmf\Service::C()->member_cache['auth_site'][SITE_ID]['form'][$form['table']]['code']
);
$rt['rt_url'] = $form['setting']['rt_url'] ? $form['setting']['rt_url'] : dr_now_url();
$field = $form['field'];
$my_field = $sys_field = $diy_field = [];
uasort($field, function($a, $b){
if($a['displayorder'] == $b['displayorder']){
return 0;
}
return($a['displayorder']<$b['displayorder']) ? -1 : 1;
});
foreach ($field as $i => $t) {
if ($t['setting']['is_right'] == 1) {
if (IS_ADMIN) {
$sys_field[$i] = $t;
} else {
$my_field[$i] = $t;
}
} elseif ($t['setting']['is_right'] == 2) {
$diy_field[$i] = $t;
} else {
$my_field[$i] = $t;
}
}
$rt['myfield'] = \Phpcmf\Service::L('Field')->toform(0, $my_field, []);
$rt['sysfield'] = \Phpcmf\Service::L('Field')->toform(0, $sys_field, []);
$rt['diyfield'] = \Phpcmf\Service::L('Field')->toform(0, $diy_field, []);
$rt['post_url'] = dr_url('form/'.$table.'/post');
return $rt;
}
function dr_get_mform_post_value($mid, $table, $cid) {
$rt = [
'form' => dr_form_hidden(),
];
$module = \Phpcmf\Service::L('cache')->get('module-'.SITE_ID.'-'.$mid);
if (!$module) {
return $rt;
}
$form = $module['form'][$table];
if (!$form) {
return $rt;
}
$rt['form_name'] = $form['name'];
$rt['form_table'] = $form['table'];
$rt['is_post_code'] = dr_member_auth(
\Phpcmf\Service::C()->member_authid,
\Phpcmf\Service::C()->member_cache['auth_module'][SITE_ID][$mid]['form'][$form['table']]['code']
);
$rt['rt_url'] = $form['setting']['rt_url'] ? $form['setting']['rt_url'] : dr_now_url();
$field = $form['field'];
$my_field = $sys_field = $diy_field = [];
uasort($field, function($a, $b){
if($a['displayorder'] == $b['displayorder']){
return 0;
}
return($a['displayorder']<$b['displayorder']) ? -1 : 1;
});
foreach ($field as $i => $t) {
if ($t['setting']['is_right'] == 1) {
if (IS_ADMIN) {
$sys_field[$i] = $t;
} else {
$my_field[$i] = $t;
}
} elseif ($t['setting']['is_right'] == 2) {
$diy_field[$i] = $t;
} else {
$my_field[$i] = $t;
}
}
$rt['myfield'] = \Phpcmf\Service::L('Field')->toform(0, $my_field, []);
$rt['sysfield'] = \Phpcmf\Service::L('Field')->toform(0, $sys_field, []);
$rt['diyfield'] = \Phpcmf\Service::L('Field')->toform(0, $diy_field, []);
$rt['post_url'] = dr_url($mid.'/'.$table.'/post', ['cid' => $cid]);
return $rt;
}
function dr_tpl_file($file) {
return dr_tpl_path().$file;
}
function dr_count($array_or_countable, $mode = COUNT_NORMAL){
return is_array($array_or_countable) || is_object($array_or_countable) ? count($array_or_countable, $mode) : 0;
}
function dr_http_prefix($url) {
return (defined('SYS_HTTPS') && SYS_HTTPS ? 'https://' : 'http://').$url;
}
function dr_url_prefix($url, $domain = '', $siteid = SITE_ID, $is_mobile = '') {
if ($url && strpos($url, 'http') === 0) {
return $url;
}
strlen($is_mobile) == 0 && $is_mobile = \Phpcmf\Service::IS_MOBILE();
if (is_array($domain) && isset($domain['setting']['html_domain']) && $domain['setting']['html_domain']) {
$domain = $is_mobile && $domain['setting']['html_domain'] ? $domain['setting']['html_domain'] : $domain['setting']['html_domain'];
$domain = dr_http_prefix($domain);
}
in_array($domain, ['MOD_DIR', 'share']) && $domain = '';
if ($domain && strpos($url, 'http') === false) {
if (is_dir(APPSPATH.ucfirst($domain))) {
$mod = \Phpcmf\Service::L('cache')->get('module-'.$siteid.'-'.$domain);
$domain = $mod && $mod['domain'] ? (\Phpcmf\Service::IS_MOBILE() && $mod['mobile_domain'] ? $mod['mobile_domain'] : $mod['domain']) : '';
}
if (strpos($domain, 'http') === false) {
$domain = '';
}
}
if (!$domain) {
if (defined('IS_CLIENT')) {
$domain = CLIENT_URL;
} elseif ($siteid > 1 && \Phpcmf\Service::C()->site_info[$siteid]['SITE_URL']) {
$domain = $is_mobile ? \Phpcmf\Service::C()->site_info[$siteid]['SITE_MURL'] : \Phpcmf\Service::C()->site_info[$siteid]['SITE_URL'];
} else {
$domain = $is_mobile ? SITE_MURL : SITE_URL;
}
}
return strpos($url, 'http') === 0 ? $url : rtrim($domain, '/').'/'.ltrim($url, '/');
}
function dr_member_group_etime($days) {
if (!$days) {
return 0;
}
return SYS_TIME + $days * 3600 * 24;
}
function dr_html2emoji($msg){
$txt = json_decode(str_replace('|', '\\', $msg));
if ($txt !== null) {
$msg = $txt;
}
return trim($msg, '"');
}
function dr_emoji2html($msg) {
return str_replace('\\', '|', json_encode($msg));;
}
function dr_clear_emoji($str){
preg_match_all("#(\|ud[0-9a-f]{3})#ie", $str, $match) && $str = str_replace($match[1], '', $str);
return dr_clear_empty(dr_html2emoji($str));
}
function dr_comment_is_reply($reply, $member, $cuid) {
if ($reply == 1) {
return 1;
} elseif ($reply == 2) {
if ($member['uid'] == $cuid) {
return 1;
} elseif ($member['is_admin']) {
return 1; } else {
return 0;
}
} else {
return 0;
}
}
function dr_member_sync_url($string) {
if (preg_match_all('/src="(.+)"/iU', $string, $match)) {
return $match[1];
}
return [];
}
function dr_check_put_path($dir) {
if (!$dir) {
return 0;
} elseif (!is_dir($dir)) {
return 0;
}
$size = file_put_contents($dir.'test.html', 'test');
if ($size === false) {
return 0;
} else {
@unlink($dir.'test.html');
return 1;
}
}
function dr_related_cat($data, $catid) {
if (!$data) {
return [[], []];
}
$my = $data[$catid];
$related = $parent = [];
if ($my['child']) {
$parent = $my;
foreach ($data as $t) {
if (!$t['show']) {
continue;
}
$t['pid'] == $my['id'] && $related[$t['id']] = $t;
}
} elseif ($my['pid']) {
foreach ($data as $t) {
if (!$t['show']) {
continue;
}
if ($t['pid'] == $my['pid']) {
$related[$t['id']] = $t;
$parent = $my['child'] ? $my : $data[$t['pid']];
}
}
} else {
if (!$data) {
return [[], []];
}
$parent = $my;
foreach ($data as $t) {
if (!$t['show']) {
continue;
}
$t['pid'] == 0 && $related[$t['id']] = $t;
}
}
return [$parent, $related];
}
function dr_get_cat_pname($mod, $catid, $symbol = '_') {
$cat = $mod['category'][$catid];
if (!$cat['pids']) {
return $cat['name'];
}
$name = [];
$array = explode(',', $cat['pids']);
foreach ($array as $id) {
$id && $mod['category'][$id] && $name[] = $mod['category'][$id]['name'];
}
$name[] = $cat['name'];
$name = array_unique($name);
krsort($name);
return implode($symbol, $name);
}
class php5replace {
private $data;
function __construct($data) {
$this->data = $data;
}
function php55_replace_var($value) {
$v = '';
$val = (defined($value[1]) ? $value[1] : \Phpcmf\Service::C()->get_cache('site', SITE_ID, 'config', $value[1]));
@eval('$v = '.($val ? $val : '""').';');
return $v;
}
function php55_replace_data($value) {
return $this->data[$value[1]];
}
function php55_replace_function($value) {
if (function_exists($value[1])) {
$param = $value[2] == '$data' ? $this->data : $value[2];
return call_user_func_array(
$value[1],
is_array($param) ? ['data' => $param] : @explode(',', $param)
);
} else {
return '函数['.$value[1].']未定义';
}
return $value[0];
}
}
function dr_module_url($dir) {
if ($dir == MOD_DIR) {
return MODULE_URL;
}
return \Phpcmf\Service::L('cache')->get('module-'.SITE_ID.'-'.$dir, 'url');
}
function dr_mobile_url($url = SITE_MURL) {
$a = parse_url($url);
$host = $a['host'];
$domain = require WRITEPATH.'config/domain_client.php';
if (!$domain) {
return $url;
} elseif (!isset($domain[$host])) {
return $url;
}
return str_replace($host, $domain[$host], $url);
}
if (!function_exists('gethostbyname')) {
function gethostbyname($domain) {
return $domain;
}
}
if (!function_exists('ctype_digit')) {
function ctype_digit($num) {
if (strpos($num, '.') !== FALSE) {
return false;
}
return is_numeric($num);
}
}
if (!function_exists('ctype_alpha')) {
function ctype_alpha($num) {
if (strpos($num, '.') !== FALSE) {
return false;
}
return is_numeric($num);
}
}
if (!function_exists('is_php')) {
function is_php($version)
{
static $_is_php;
$version = (string) $version;
if ( ! isset($_is_php[$version]))
{
$_is_php[$version] = version_compare(PHP_VERSION, $version, '>=');
}
return $_is_php[$version];
}
}
if (! function_exists('dr_get_keywords')) {
function dr_get_keywords($kw, $siteid = SITE_ID)
{
if (!$kw) {
return '';
}
$rt = [];
$tags = \Phpcmf\Service::L('cache')->get('tag-' . $siteid);
if ($tags) {
foreach ($tags as $t) {
if (strpos($kw, $t['name']) !== false) {
$rt[] = $t['tags']; }
}
}
if (!$rt && function_exists('mb_convert_encoding')) {
$kw = dr_strcut($kw, 30);
$data = [
'title' => $kw,
'content' => $kw,
];
$data = mb_convert_encoding(json_encode($data), 'GBK', 'UTF8');
$baidu = \Phpcmf\ThirdParty\BaiduApi::get_data('https://aip.baidubce.com/rpc/2.0/nlp/v1/keyword', $data, 1);
if (!$baidu['code']) {
CI_DEBUG && log_message('error', $baidu['msg']);
} elseif ($baidu && $baidu['data']['items']) {
foreach ($baidu['data']['items'] as $t) {
$rt[] = $t['tag']; }
}
}
return @implode(',', $rt);;
}
}
if (! function_exists('dr_redirect'))
{
function dr_redirect($url = '', $method = 'auto', $code = NULL) {
switch ($method) {
case 'refresh':
header('Refresh:0;url='.$url);
break;
default:
header('Location: '.$url, TRUE, $code);
break;
}
exit;
}
}
if ( ! function_exists('dr_directory_map'))
{
function dr_directory_map($source_dir, $directory_depth = 0, $hidden = FALSE)
{
if ($fp = @opendir($source_dir))
{
$filedata = [];
$new_depth = $directory_depth - 1;
$source_dir = rtrim($source_dir, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR;
while (FALSE !== ($file = readdir($fp)))
{
if ($file === '.' OR $file === '..' OR ($hidden === FALSE && $file[0] === '.'))
{
continue;
}
is_dir($source_dir.$file) && $file .= DIRECTORY_SEPARATOR;
if (($directory_depth < 1 OR $new_depth > 0) && is_dir($source_dir.$file))
{
$filedata[$file] = directory_map($source_dir.$file, $new_depth, $hidden);
}
else
{
$filedata[] = $file;
}
}
closedir($fp);
return $filedata;
}
return FALSE;
}
}
if (!function_exists('dr_is_buy')) {
function dr_is_buy($fid, $id, $uid = 0, $sku = '') {
$field = \Phpcmf\Service::C()->get_cache('table-field', $fid);
if (!$field) {
return 0;
}
$data = \Phpcmf\Service::C()->get_cache('table-pay-'.SITE_ID, $field['relatedname'].'-'.$field['relatedid']);
if (!$data) {
return 0;
}
!$uid && $uid = (int)\Phpcmf\Service::C()->uid;
$mid = $sku ? 'buy-'.$data['table'].'-'.$id.'-'.$field['id'].'-%-'.$sku : 'buy-'.$data['table'].'-'.$id.'-'.$field['id'].'%';
return \Phpcmf\Service::M()->db->table('member_paylog')->where('uid', $uid)->where('status', 1)->like('mid', $mid)->countAllResults();
}
}
if(!function_exists('mime_content_type')) {
function mime_content_type($filename) {
$mime_types = array(
'txt' => 'text/plain',
'htm' => 'text/html',
'html' => 'text/html',
'php' => 'text/html',
'css' => 'text/css',
'js' => 'application/javascript',
'json' => 'application/json',
'xml' => 'application/xml',
'swf' => 'application/x-shockwave-flash',
'flv' => 'video/x-flv',
'png' => 'image/png',
'jpe' => 'image/jpeg',
'jpeg' => 'image/jpeg',
'jpg' => 'image/jpeg',
'gif' => 'image/gif',
'bmp' => 'image/bmp',
'ico' => 'image/vnd.microsoft.icon',
'tiff' => 'image/tiff',
'tif' => 'image/tiff',
'svg' => 'image/svg+xml',
'svgz' => 'image/svg+xml',
'zip' => 'application/zip',
'rar' => 'application/x-rar-compressed',
'exe' => 'application/x-msdownload',
'msi' => 'application/x-msdownload',
'cab' => 'application/vnd.ms-cab-compressed',
'mp3' => 'audio/mpeg',
'qt' => 'video/quicktime',
'mov' => 'video/quicktime',
'pdf' => 'application/pdf',
'psd' => 'image/vnd.adobe.photoshop',
'ai' => 'application/postscript',
'eps' => 'application/postscript',
'ps' => 'application/postscript',
'doc' => 'application/msword',
'rtf' => 'application/rtf',
'xls' => 'application/vnd.ms-excel',
'ppt' => 'application/vnd.ms-powerpoint',
'odt' => 'application/vnd.oasis.opendocument.text',
'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
);
$ext = strtolower(array_pop(explode('.',$filename)));
if (array_key_exists($ext, $mime_types)) {
return $mime_types[$ext];
}
elseif (function_exists('finfo_open')) {
$finfo = finfo_open(FILEINFO_MIME);
$mimetype = finfo_file($finfo, $filename);
finfo_close($finfo);
return $mimetype;
}
else {
return 'application/octet-stream';
}
}
}
if (!function_exists('array_key_first')) {
function array_key_first(array $arr) {
foreach($arr as $key => $unused) {
return $key;
}
return NULL;
}
}
function dr_url($url, $query = [], $self = SELF) {
return \Phpcmf\Service::L('router')->url($url, $query, $self);
}
function dr_furl($name) {
return \Phpcmf\Service::L('router')->furl($name);
}
function dr_get_tag_url($name, $mid = '') {
return \Phpcmf\Service::L('router')->get_tag_url($name, $mid);
}
function dr_comment_url($id, $moddir = '') {
return \Phpcmf\Service::L('router')->comment_url($id, $moddir);
}
function dr_form_show_url($table, $id, $page = 0) {
return \Phpcmf\Service::L('router')->form_show_url($table, $id, $page);
}
function dr_oauth_url($name, $type, $gourl = '') {
return \Phpcmf\Service::L('router')->oauth_url($name, $type, $gourl);
}
function dr_member_url($url, $query = [], $self = 'index.php') {
return \Phpcmf\Service::L('router')->member_url($url, $query, $self);
}
function dr_search_url($params = [], $name = '', $value = '', $moddir = '') {
return \Phpcmf\Service::L('router')->search_url($params, $name, $value, $moddir);
}