bnbweb/includes/lib_common.php
2022-11-14 23:49:28 +08:00

1882 lines
54 KiB
PHP
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
if (!defined('IN_ECS'))
{
die('Hacking attempt');
}
/**
* 创建像这样的查询: "IN('a','b')";
*
* @access public
* @param mix $item_list 列表数组或字符串
* @param string $field_name 字段名称
*
* @return void
*/
function db_create_in($item_list, $field_name = '')
{
if (empty($item_list))
{
return $field_name . " IN ('') ";
}
else
{
if (!is_array($item_list))
{
$item_list = explode(',', $item_list);
}
$item_list = array_unique($item_list);
$item_list_tmp = '';
foreach ($item_list AS $item)
{
if ($item !== '')
{
$item_list_tmp .= $item_list_tmp ? ",'$item'" : "'$item'";
}
}
if (empty($item_list_tmp))
{
return $field_name . " IN ('') ";
}
else
{
return $field_name . ' IN (' . $item_list_tmp . ') ';
}
}
}
/**
* 验证输入的邮件地址是否合法
*
* @access public
* @param string $email 需要验证的邮件地址
*
* @return bool
*/
function is_email($user_email)
{
$chars = "/^([a-z0-9+_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,6}\$/i";
if (strpos($user_email, '@') !== false && strpos($user_email, '.') !== false)
{
if (preg_match($chars, $user_email))
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
/**
* 验证输入的手机号码是否合法
*
* @access public
* @param string $mobile_phone
* 需要验证的手机号码
*
* @return bool
*/
function is_mobile ($mobile_phone)
{
$chars = "/^09[0-9]{8}$/";
if(preg_match($chars, $mobile_phone))
{
return true;
}
return false;
}
/**
* 检查是否为一个合法的时间格式
*
* @access public
* @param string $time
* @return void
*/
function is_time($time)
{
$pattern = '/[\d]{4}-[\d]{1,2}-[\d]{1,2}\s[\d]{1,2}:[\d]{1,2}:[\d]{1,2}/';
return preg_match($pattern, $time);
}
/**
* 获得查询时间和次数并赋值给smarty
*
* @access public
* @return void
*/
function assign_query_info()
{
if ($GLOBALS['db']->queryTime == '')
{
$query_time = 0;
}
else
{
if (PHP_VERSION >= '5.0.0')
{
$query_time = number_format(microtime(true) - $GLOBALS['db']->queryTime, 6);
}
else
{
list($now_usec, $now_sec) = explode(' ', microtime());
list($start_usec, $start_sec) = explode(' ', $GLOBALS['db']->queryTime);
$query_time = number_format(($now_sec - $start_sec) + ($now_usec - $start_usec), 6);
}
}
$GLOBALS['smarty']->assign('query_info', sprintf($GLOBALS['_LANG']['query_info'], $GLOBALS['db']->queryCount, $query_time));
/* 内存占用情况 */
if ($GLOBALS['_LANG']['memory_info'] && function_exists('memory_get_usage'))
{
$GLOBALS['smarty']->assign('memory_info', sprintf($GLOBALS['_LANG']['memory_info'], memory_get_usage() / 1048576));
}
/* 是否启用了 gzip */
$gzip_enabled = gzip_enabled() ? $GLOBALS['_LANG']['gzip_enabled'] : $GLOBALS['_LANG']['gzip_disabled'];
$GLOBALS['smarty']->assign('gzip_enabled', $gzip_enabled);
}
function assign_menu_info()
{
global $_LANG;
include_once('includes/inc_menu.php');
include_once('includes/inc_priv.php');
foreach ($modules AS $key => $value)
{
ksort($modules[$key]);
}
ksort($modules);
foreach ($modules AS $key => $val)
{
$menus[$key]['label'] = $_LANG[$key];
if (is_array($val))
{
foreach ($val AS $k => $v)
{
if ( isset($purview[$k]))
{
if (is_array($purview[$k]))
{
$boole = false;
foreach ($purview[$k] as $action)
{
$boole = $boole || admin_priv($action, '', false);
}
if (!$boole)
{
continue;
}
}
else
{
if (! admin_priv($purview[$k], '', false))
{
continue;
}
}
}
if ($k == 'ucenter_setup' && $_CFG['integrate_code'] != 'ucenter')
{
continue;
}
$menus[$key]['children'][$k]['label'] = $_LANG[$k];
$menus[$key]['children'][$k]['action'] = $v;
}
}
else
{
$menus[$key]['action'] = $val;
}
// 如果children的子元素长度为0则删除该组
if(empty($menus[$key]['children']))
{
unset($menus[$key]);
}
}
$GLOBALS['smarty']->assign('menus', $menus);
$GLOBALS['smarty']->assign('no_help', $_LANG['no_help']);
$GLOBALS['smarty']->assign('help_lang', $_CFG['lang']);
$GLOBALS['smarty']->assign('charset', EC_CHARSET);
$GLOBALS['smarty']->assign('admin_id', $_SESSION['admin_id']);
}
/**
* 创建地区的返回信息
*
* @access public
* @param array $arr 地区数组 *
* @return void
*/
function region_result($parent, $sel_name, $type)
{
global $cp;
$arr = get_regions($type, $parent);
foreach ($arr AS $v)
{
$region =& $cp->add_node('region');
$region_id =& $region->add_node('id');
$region_name =& $region->add_node('name');
$region_id->set_data($v['region_id']);
$region_name->set_data($v['region_name']);
}
$select_obj =& $cp->add_node('select');
$select_obj->set_data($sel_name);
}
/**
* 获得指定国家的所有省份
*
* @access public
* @param int country 国家的编号
* @return array
*/
function get_regions($type = 0, $parent = 0)
{
$sql = 'SELECT region_id, region_name FROM ' . $GLOBALS['ecs']->table('region') .
" WHERE region_type = '$type' AND parent_id = '$parent'";
return $GLOBALS['db']->GetAll($sql);
}
function get_banks($parent = 0)
{
$sql = 'SELECT bank_code, bank_name FROM ' . $GLOBALS['ecs']->table('bank') .
" WHERE parent_id = '$parent' order by bank_code";
return $GLOBALS['db']->GetAll($sql);
}
function get_gamename_by_id($id = 0)
{
if($id>0){
$sql = 'SELECT games_name FROM ' . $GLOBALS['ecs']->table('games') .
" WHERE games_id = '$id'";
return $GLOBALS['db']->GetOne($sql);
}else{
return '電子錢包';
}
}
/**
* 初始化会员数据整合类
*
* @access public
* @return object
*/
function &init_users()
{
$set_modules = false;
static $cls = null;
if ($cls != null)
{
return $cls;
}
include_once(ROOT_PATH . 'includes/modules/integrates/' . $GLOBALS['_CFG']['integrate_code'] . '.php');
$cfg = unserialize($GLOBALS['_CFG']['integrate_config']);
$cls = new $GLOBALS['_CFG']['integrate_code']($cfg);
return $cls;
}
/**
* 获得指定分类下的子分类的数组
*
* @access public
* @param int $cat_id 分类的ID
* @param int $selected 当前选中分类的ID
* @param boolean $re_type 返回的类型: 值为真时返回下拉列表,否则返回数组
* @param int $level 限定返回的级数。为0时返回所有级数
* @param int $is_show_all 如果为true显示所有分类如果为false隐藏不可见分类。
* @return mix
*/
function cat_list($cat_id = 0, $selected = 0, $re_type = true, $level = 0, $is_show_all = true)
{
static $res = NULL;
if ($res === NULL)
{
$data = read_static_cache('cat_pid_releate');
if ($data === false)
{
$sql = "SELECT c.cat_id, c.cat_name, c.measure_unit, c.parent_id, c.is_show, c.show_in_nav, c.grade, c.sort_order, COUNT(s.cat_id) AS has_children ".
'FROM ' . $GLOBALS['ecs']->table('category') . " AS c ".
"LEFT JOIN " . $GLOBALS['ecs']->table('category') . " AS s ON s.parent_id=c.cat_id ".
"GROUP BY c.cat_id ".
'ORDER BY c.parent_id, c.sort_order ASC';
$res = $GLOBALS['db']->getAll($sql);
$sql = "SELECT cat_id, COUNT(*) AS games_num " .
" FROM " . $GLOBALS['ecs']->table('games') .
" WHERE is_delete = 0 AND is_on_sale = 1 " .
" GROUP BY cat_id";
$res2 = $GLOBALS['db']->getAll($sql);
$sql = "SELECT gc.cat_id, COUNT(*) AS goods_num " .
" FROM " . $GLOBALS['ecs']->table('games_cat') . " AS gc , " . $GLOBALS['ecs']->table('games') . " AS g " .
" WHERE g.games_id = gc.games_id AND g.is_delete = 0 AND g.is_on_sale = 1 " .
" GROUP BY gc.cat_id";
$res3 = $GLOBALS['db']->getAll($sql);
$newres = array();
foreach($res2 as $k=>$v)
{
$newres[$v['cat_id']] = $v['games_num'];
foreach($res3 as $ks=>$vs)
{
if($v['cat_id'] == $vs['cat_id'])
{
$newres[$v['cat_id']] = $v['games_num'] + $vs['games_num'];
}
}
}
foreach($res as $k=>$v)
{
$res[$k]['games_num'] = !empty($newres[$v['cat_id']]) ? $newres[$v['cat_id']] : 0;
}
//如果数组过大,不采用静态缓存方式
if (count($res) <= 1000)
{
write_static_cache('cat_pid_releate', $res);
}
}
else
{
$res = $data;
}
}
if (empty($res) == true)
{
return $re_type ? '' : array();
}
$options = cat_options($cat_id, $res); // 获得指定分类下的子分类的数组
$children_level = 99999; //大于这个分类的将被删除
if ($is_show_all == false)
{
foreach ($options as $key => $val)
{
if ($val['level'] > $children_level)
{
unset($options[$key]);
}
else
{
if ($val['is_show'] == 0)
{
unset($options[$key]);
if ($children_level > $val['level'])
{
$children_level = $val['level']; //标记一下,这样子分类也能删除
}
}
else
{
$children_level = 99999; //恢复初始值
}
}
}
}
/* 截取到指定的缩减级别 */
if ($level > 0)
{
if ($cat_id == 0)
{
$end_level = $level;
}
else
{
$first_item = reset($options); // 获取第一个元素
$end_level = $first_item['level'] + $level;
}
/* 保留level小于end_level的部分 */
foreach ($options AS $key => $val)
{
if ($val['level'] >= $end_level)
{
unset($options[$key]);
}
}
}
if ($re_type == true)
{
$select = '';
foreach ($options AS $var)
{
$select .= '<option value="' . $var['cat_id'] . '" ';
$select .= ($selected == $var['cat_id']) ? "selected='ture'" : '';
$select .= '>';
if ($var['level'] > 0)
{
$select .= str_repeat('&nbsp;', $var['level'] * 4);
}
$select .= htmlspecialchars(addslashes($var['cat_name']), ENT_QUOTES) . '</option>';
}
return $select;
}
else
{
foreach ($options AS $key => $value)
{
$options[$key]['url'] = build_uri('category', array('cid' => $value['cat_id']), $value['cat_name']);
}
return $options;
}
}
/**
* 过滤和排序所有分类,返回一个带有缩进级别的数组
*
* @access private
* @param int $cat_id 上级分类ID
* @param array $arr 含有所有分类的数组
* @param int $level 级别
* @return void
*/
function cat_options($spec_cat_id, $arr)
{
static $cat_options = array();
if (isset($cat_options[$spec_cat_id]))
{
return $cat_options[$spec_cat_id];
}
if (!isset($cat_options[0]))
{
$level = $last_cat_id = 0;
$options = $cat_id_array = $level_array = array();
$data = read_static_cache('cat_option_static');
if ($data === false)
{
while (!empty($arr))
{
foreach ($arr AS $key => $value)
{
$cat_id = $value['cat_id'];
if ($level == 0 && $last_cat_id == 0)
{
if ($value['parent_id'] > 0)
{
break;
}
$options[$cat_id] = $value;
$options[$cat_id]['level'] = $level;
$options[$cat_id]['id'] = $cat_id;
$options[$cat_id]['name'] = $value['cat_name'];
unset($arr[$key]);
if ($value['has_children'] == 0)
{
continue;
}
$last_cat_id = $cat_id;
$cat_id_array = array($cat_id);
$level_array[$last_cat_id] = ++$level;
continue;
}
if ($value['parent_id'] == $last_cat_id)
{
$options[$cat_id] = $value;
$options[$cat_id]['level'] = $level;
$options[$cat_id]['id'] = $cat_id;
$options[$cat_id]['name'] = $value['cat_name'];
unset($arr[$key]);
if ($value['has_children'] > 0)
{
if (end($cat_id_array) != $last_cat_id)
{
$cat_id_array[] = $last_cat_id;
}
$last_cat_id = $cat_id;
$cat_id_array[] = $cat_id;
$level_array[$last_cat_id] = ++$level;
}
}
elseif ($value['parent_id'] > $last_cat_id)
{
break;
}
}
$count = count($cat_id_array);
if ($count > 1)
{
$last_cat_id = array_pop($cat_id_array);
}
elseif ($count == 1)
{
if ($last_cat_id != end($cat_id_array))
{
$last_cat_id = end($cat_id_array);
}
else
{
$level = 0;
$last_cat_id = 0;
$cat_id_array = array();
continue;
}
}
if ($last_cat_id && isset($level_array[$last_cat_id]))
{
$level = $level_array[$last_cat_id];
}
else
{
$level = 0;
}
}
//如果数组过大,不采用静态缓存方式
if (count($options) <= 2000)
{
write_static_cache('cat_option_static', $options);
}
}
else
{
$options = $data;
}
$cat_options[0] = $options;
}
else
{
$options = $cat_options[0];
}
if (!$spec_cat_id)
{
return $options;
}
else
{
if (empty($options[$spec_cat_id]))
{
return array();
}
$spec_cat_id_level = $options[$spec_cat_id]['level'];
foreach ($options AS $key => $value)
{
if ($key != $spec_cat_id)
{
unset($options[$key]);
}
else
{
break;
}
}
$spec_cat_id_array = array();
foreach ($options AS $key => $value)
{
if (($spec_cat_id_level == $value['level'] && $value['cat_id'] != $spec_cat_id) ||
($spec_cat_id_level > $value['level']))
{
break;
}
else
{
$spec_cat_id_array[$key] = $value;
}
}
$cat_options[$spec_cat_id] = $spec_cat_id_array;
return $spec_cat_id_array;
}
}
/**
* 载入配置信息
*
* @access public
* @return array
*/
function load_config()
{
$arr = array();
$data = read_static_cache('shop_config');
if ($data === false)
{
$sql = 'SELECT code, value FROM ' . $GLOBALS['ecs']->table('shop_config') . ' WHERE parent_id > 0';
$res = $GLOBALS['db']->getAll($sql);
foreach ($res AS $row)
{
$arr[$row['code']] = $row['value'];
}
/* 对数值型设置处理 */
if (!isset($GLOBALS['_CFG']['ecs_version']))
{
/* 如果没有版本号则默认为2.0.5 */
$GLOBALS['_CFG']['ecs_version'] = 'v1.0.0';
}
//限定语言项
$lang_array = array('zh_cn', 'zh_tw', 'en_us');
if (empty($arr['lang']) || !in_array($arr['lang'], $lang_array))
{
$arr['lang'] = 'zh_tw'; // 默认语言为简体中文
}
if (empty($arr['integrate_code']))
{
$arr['integrate_code'] = 'ecshop'; // 默认的会员整合插件为 ecshop
}
write_static_cache('shop_config', $arr);
}
else
{
$arr = $data;
}
return $arr;
}
/**
* 获得指定分类下所有底层分类的ID
*
* @access public
* @param integer $cat 指定的分类ID
* @return string
*/
function get_children($cat = 0)
{
return 'g.cat_id ' . db_create_in(array_unique(array_merge(array($cat), array_keys(cat_list($cat, 0, false)))));
}
/**
* 获得指定文章分类下所有底层分类的ID
*
* @access public
* @param integer $cat 指定的分类ID
*
* @return void
*/
function get_article_children ($cat = 0)
{
return db_create_in(array_unique(array_merge(array($cat), array_keys(article_cat_list($cat, 0, false)))), 'cat_id');
}
/**
* 获取邮件模板
*
* @access public
* @param: $tpl_name[string] 模板代码
*
* @return array
*/
function get_mail_template($tpl_name)
{
$sql = 'SELECT template_subject, is_html, template_content FROM ' . $GLOBALS['ecs']->table('mail_templates') . " WHERE template_code = '$tpl_name'";
return $GLOBALS['db']->GetRow($sql);
}
/**
* 记录订单操作记录
*
* @access public
* @param string $order_sn 订单编号
* @param integer $order_status 订单状态
* @param integer $shipping_status 配送状态
* @param integer $pay_status 付款状态
* @param string $note 备注
* @param string $username 用户名,用户自己的操作则为 buyer
* @return void
*/
function order_action($order_sn, $order_status, $shipping_status, $pay_status, $note = '', $username = null, $place = 0)
{
if (is_null($username))
{
$username = $_SESSION['admin_name'];
}
$sql = 'INSERT INTO ' . $GLOBALS['ecs']->table('order_action') .
' (order_id, action_user, order_status, shipping_status, pay_status, action_place, action_note, log_time) ' .
'SELECT ' .
"order_id, '$username', '$order_status', '$shipping_status', '$pay_status', '$place', '$note', '" .gmtime() . "' " .
'FROM ' . $GLOBALS['ecs']->table('order_info') . " WHERE order_sn = '$order_sn'";
$GLOBALS['db']->query($sql);
}
/**
* 格式化商品价格
*
* @access public
* @param float $price 商品价格
* @return string
*/
function price_format($price, $change_price = true)
{
if($price==='')
{
$price=0;
}
if ($change_price && defined('ECS_ADMIN') === false)
{
switch ($GLOBALS['_CFG']['price_format'])
{
case 0:
$price = number_format($price, 2, '.', '');
break;
case 1: // 保留不为 0 的尾数
$price = preg_replace('/(.*)(\\.)([0-9]*?)0+$/', '\1\2\3', number_format($price, 2, '.', ''));
if (substr($price, -1) == '.')
{
$price = substr($price, 0, -1);
}
break;
case 2: // 不四舍五入保留1位
$price = substr(number_format($price, 2, '.', ''), 0, -1);
break;
case 3: // 直接取整
$price = intval($price);
break;
case 4: // 四舍五入,保留 1 位
$price = number_format($price, 1, '.', '');
break;
case 5: // 先四舍五入,不保留小数
$price = round($price);
break;
}
}
else
{
$price = number_format($price, 2, '.', '');
}
return sprintf($GLOBALS['_CFG']['currency_format'], $price);
}
/**
* 获取指定 id snatch 活动的结果
*
* @access public
* @param int $id snatch_id
*
* @return array array(user_name, bie_price, bid_time, num)
* num通常为1如果为2表示有2个用户取到最小值但结果只返回最早出价用户。
*/
function get_snatch_result($id)
{
$sql = 'SELECT u.user_id, u.user_name, lg.bid_price, lg.bid_time, count(*) as num' .
' FROM ' . $GLOBALS['ecs']->table('snatch_log') . ' AS lg '.
' LEFT JOIN ' . $GLOBALS['ecs']->table('users') . ' AS u ON lg.user_id = u.user_id'.
" WHERE lg.snatch_id = '$id'".
' GROUP BY lg.bid_price' .
' ORDER BY num ASC, lg.bid_price ASC, lg.bid_time ASC LIMIT 1';
$rec = $GLOBALS['db']->GetRow($sql);
if ($rec)
{
$rec['bid_time'] = local_date($GLOBALS['_CFG']['time_format'], $rec['bid_time']);
$rec['formated_bid_price'] = price_format($rec['bid_price'], false);
/* 活动信息 */
$sql = 'SELECT ext_info " .
" FROM ' . $GLOBALS['ecs']->table('goods_activity') .
" WHERE act_id= '$id' AND act_type=" . GAT_SNATCH.
" LIMIT 1";
$row = $GLOBALS['db']->getOne($sql);
$info = unserialize($row);
if (!empty($info['max_price']))
{
$rec['buy_price'] = ($rec['bid_price'] > $info['max_price']) ? $info['max_price'] : $rec['bid_price'];
}
else
{
$rec['buy_price'] = $rec['bid_price'];
}
/* 检查订单 */
$sql = "SELECT COUNT(*)" .
" FROM " . $GLOBALS['ecs']->table('order_info') .
" WHERE extension_code = 'snatch'" .
" AND extension_id = '$id'" .
" AND order_status " . db_create_in(array(OS_CONFIRMED, OS_UNCONFIRMED));
$rec['order_count'] = $GLOBALS['db']->getOne($sql);
}
return $rec;
}
/**
* 清除指定后缀的模板缓存或编译文件
*
* @access public
* @param bool $is_cache 是否清除缓存还是清出编译文件
* @param string $ext 需要删除的文件名,不包含后缀
*
* @return int 返回清除的文件个数
*/
function clear_tpl_files($is_cache = true, $ext = '')
{
$dirs = array();
if (isset($GLOBALS['shop_id']) && $GLOBALS['shop_id'] > 0)
{
$tmp_dir = DATA_DIR ;
}
else
{
$tmp_dir = 'temp';
}
if ($is_cache)
{
$cache_dir = ROOT_PATH . $tmp_dir . '/caches/';
$dirs[] = ROOT_PATH . $tmp_dir . '/query_caches/';
$dirs[] = ROOT_PATH . $tmp_dir . '/static_caches/';
for($i = 0; $i < 16; $i++)
{
$hash_dir = $cache_dir . dechex($i);
$dirs[] = $hash_dir . '/';
}
}
else
{
$dirs[] = ROOT_PATH . $tmp_dir . '/compiled/';
$dirs[] = ROOT_PATH . $tmp_dir . '/compiled/admin/';
}
$str_len = strlen($ext);
$count = 0;
foreach ($dirs AS $dir)
{
$folder = @opendir($dir);
if ($folder === false)
{
continue;
}
while ($file = readdir($folder))
{
if ($file == '.' || $file == '..' || $file == 'index.htm' || $file == 'index.html')
{
continue;
}
if (is_file($dir . $file))
{
/* 如果有文件名则判断是否匹配 */
$pos = ($is_cache) ? strrpos($file, '_') : strrpos($file, '.');
if ($str_len > 0 && $pos !== false)
{
$ext_str = substr($file, 0, $pos);
if ($ext_str == $ext)
{
if (@unlink($dir . $file))
{
$count++;
}
}
}
else
{
if (@unlink($dir . $file))
{
$count++;
}
}
}
}
closedir($folder);
}
return $count;
}
/**
* 清除模版编译文件
*
* @access public
* @param mix $ext 模版文件名, 不包含后缀
* @return void
*/
function clear_compiled_files($ext = '')
{
return clear_tpl_files(false, $ext);
}
/**
* 清除缓存文件
*
* @access public
* @param mix $ext 模版文件名, 不包含后缀
* @return void
*/
function clear_cache_files($ext = '')
{
return clear_tpl_files(true, $ext);
}
/**
* 清除模版编译和缓存文件
*
* @access public
* @param mix $ext 模版文件名后缀
* @return void
*/
function clear_all_files($ext = '')
{
return clear_tpl_files(false, $ext) + clear_tpl_files(true, $ext);
}
/**
* 页面上调用的js文件
*
* @access public
* @param string $files
* @return void
*/
function smarty_insert_scripts($args)
{
static $scripts = array();
$arr = explode(',', str_replace(' ','',$args['files']));
$str = '';
foreach ($arr AS $val)
{
if (in_array($val, $scripts) == false)
{
$scripts[] = $val;
if ($val{0} == '.')
{
$str .= '<script type="text/javascript" src="' . $val . '"></script>';
}
else
{
$str .= '<script type="text/javascript" src="js/' . $val . '"></script>';
}
}
}
return $str;
}
/**
* 创建分页的列表
*
* @access public
* @param integer $count
* @return string
*/
function smarty_create_pages($params)
{
extract($params);
$str = '';
$len = 10;
if (empty($page))
{
$page = 1;
}
if (!empty($count))
{
$step = 1;
$str .= "<option value='1'>1</option>";
for ($i = 2; $i < $count; $i += $step)
{
$step = ($i >= $page + $len - 1 || $i <= $page - $len + 1) ? $len : 1;
$str .= "<option value='$i'";
$str .= $page == $i ? " selected='true'" : '';
$str .= ">$i</option>";
}
if ($count > 1)
{
$str .= "<option value='$count'";
$str .= $page == $count ? " selected='true'" : '';
$str .= ">$count</option>";
}
}
return $str;
}
/**
* 重写 URL 地址
*
* @access public
* @param string $app 执行程序
* @param array $params 参数数组
* @param string $append 附加字串
* @param integer $page 页数
* @param string $keywords 搜索关键词字符串
* @return void
*/
function build_uri($app, $params, $append = '', $page = 0, $keywords = '', $size = 0)
{
static $rewrite = NULL;
if ($rewrite === NULL)
{
$rewrite = intval($GLOBALS['_CFG']['rewrite']);
}
$args = array('cid' => 0,
'gid' => 0,
'bid' => 0,
'acid' => 0,
'aid' => 0,
'sid' => 0,
'gbid' => 0,
'auid' => 0,
'sort' => '',
'order' => '',
);
extract(array_merge($args, $params));
$uri = '';
switch ($app)
{
case 'category':
if (empty($cid))
{
return false;
}
else
{
if ($rewrite)
{
$uri = 'category-' . $cid;
if (isset($bid))
{
$uri .= '-b' . $bid;
}
if (isset($price_min))
{
$uri .= '-min'.$price_min;
}
if (isset($price_max))
{
$uri .= '-max'.$price_max;
}
if (isset($filter_attr))
{
$uri .= '-attr' . $filter_attr;
}
if (!empty($page))
{
$uri .= '-' . $page;
}
if (!empty($sort))
{
$uri .= '-' . $sort;
}
if (!empty($order))
{
$uri .= '-' . $order;
}
}
else
{
$uri = 'category.php?id=' . $cid;
if (!empty($bid))
{
$uri .= '&amp;brand=' . $bid;
}
if (isset($price_min))
{
$uri .= '&amp;price_min=' . $price_min;
}
if (isset($price_max))
{
$uri .= '&amp;price_max=' . $price_max;
}
if (!empty($filter_attr))
{
$uri .='&amp;filter_attr=' . $filter_attr;
}
if (!empty($page))
{
$uri .= '&amp;page=' . $page;
}
if (!empty($sort))
{
$uri .= '&amp;sort=' . $sort;
}
if (!empty($order))
{
$uri .= '&amp;order=' . $order;
}
}
}
break;
case 'goods':
if (empty($gid))
{
return false;
}
else
{
$uri = $rewrite ? 'goods-' . $gid : 'goods.php?id=' . $gid;
}
break;
case 'brand':
if (empty($bid))
{
return false;
}
else
{
if ($rewrite)
{
$uri = 'brand-' . $bid;
if (isset($cid))
{
$uri .= '-c' . $cid;
}
if (!empty($page))
{
$uri .= '-' . $page;
}
if (!empty($sort))
{
$uri .= '-' . $sort;
}
if (!empty($order))
{
$uri .= '-' . $order;
}
}
else
{
$uri = 'brand.php?id=' . $bid;
if (!empty($cid))
{
$uri .= '&amp;cat=' . $cid;
}
if (!empty($page))
{
$uri .= '&amp;page=' . $page;
}
if (!empty($sort))
{
$uri .= '&amp;sort=' . $sort;
}
if (!empty($order))
{
$uri .= '&amp;order=' . $order;
}
}
}
break;
case 'article_cat':
if (empty($acid))
{
return false;
}
else
{
if ($rewrite)
{
$uri = 'article_cat-' . $acid;
if (!empty($page))
{
$uri .= '-' . $page;
}
if (!empty($sort))
{
$uri .= '-' . $sort;
}
if (!empty($order))
{
$uri .= '-' . $order;
}
if (!empty($keywords))
{
$uri .= '-' . $keywords;
}
}
else
{
$uri = 'article_cat.php?id=' . $acid;
if (!empty($page))
{
$uri .= '&amp;page=' . $page;
}
if (!empty($sort))
{
$uri .= '&amp;sort=' . $sort;
}
if (!empty($order))
{
$uri .= '&amp;order=' . $order;
}
if (!empty($keywords))
{
$uri .= '&amp;keywords=' . $keywords;
}
}
}
break;
case 'article':
if (empty($aid))
{
return false;
}
else
{
$uri = $rewrite ? 'article-' . $aid : 'article.php?id=' . $aid;
}
break;
case 'group_buy':
if (empty($gbid))
{
return false;
}
else
{
$uri = $rewrite ? 'group_buy-' . $gbid : 'group_buy.php?act=view&amp;id=' . $gbid;
}
break;
case 'auction':
if (empty($auid))
{
return false;
}
else
{
$uri = $rewrite ? 'auction-' . $auid : 'auction.php?act=view&amp;id=' . $auid;
}
break;
case 'snatch':
if (empty($sid))
{
return false;
}
else
{
$uri = $rewrite ? 'snatch-' . $sid : 'snatch.php?id=' . $sid;
}
break;
case 'search':
break;
case 'exchange':
if ($rewrite)
{
$uri = 'exchange-' . $cid;
if (isset($price_min))
{
$uri .= '-min'.$price_min;
}
if (isset($price_max))
{
$uri .= '-max'.$price_max;
}
if (!empty($page))
{
$uri .= '-' . $page;
}
if (!empty($sort))
{
$uri .= '-' . $sort;
}
if (!empty($order))
{
$uri .= '-' . $order;
}
}
else
{
$uri = 'exchange.php?cat_id=' . $cid;
if (isset($price_min))
{
$uri .= '&amp;integral_min=' . $price_min;
}
if (isset($price_max))
{
$uri .= '&amp;integral_max=' . $price_max;
}
if (!empty($page))
{
$uri .= '&amp;page=' . $page;
}
if (!empty($sort))
{
$uri .= '&amp;sort=' . $sort;
}
if (!empty($order))
{
$uri .= '&amp;order=' . $order;
}
}
break;
case 'exchange_goods':
if (empty($gid))
{
return false;
}
else
{
$uri = $rewrite ? 'exchange-id' . $gid : 'exchange.php?id=' . $gid . '&amp;act=view';
}
break;
default:
return false;
break;
}
if ($rewrite)
{
if ($rewrite == 2 && !empty($append))
{
$uri .= '-' . urlencode(preg_replace('/[\.|\/|\?|&|\+|\\\|\'|"|,]+/', '', $append));
}
$uri .= '.html';
}
if (($rewrite == 2) && (strpos(strtolower(EC_CHARSET), 'utf') !== 0))
{
$uri = urlencode($uri);
}
return $uri;
}
/**
* 格式化重量小于1千克用克表示否则用千克表示
* @param float $weight 重量
* @return string 格式化后的重量
*/
function formated_weight($weight)
{
$weight = round(floatval($weight), 3);
if ($weight > 0)
{
if ($weight < 1)
{
/* 小于1千克用克表示 */
return intval($weight * 1000) . $GLOBALS['_LANG']['gram'];
}
else
{
/* 大于1千克用千克表示 */
return $weight . $GLOBALS['_LANG']['kilogram'];
}
}
else
{
return 0;
}
}
/**
* 记录帐户变动
* @param int $user_id 用户id
* @param float $user_money 可用余额变动
* @param float $frozen_money 冻结余额变动
* @param int $rank_points 等级积分变动
* @param int $pay_points 消费积分变动
* @param string $change_desc 变动说明
* @param int $change_type 变动类型:参见常量文件
* @return void
*/
function log_account_change($user_id, $user_money = 0, $frozen_money = 0, $rank_points = 0, $pay_points = 0, $change_desc = '', $change_type = ACT_OTHER, $token='')
{
/* 插入帐户变动记录 */
$account_log = array(
'user_id' => $user_id,
'user_money' => $user_money,
'frozen_money' => $frozen_money,
'rank_points' => $rank_points,
'pay_points' => $pay_points,
'change_time' => gmtime(),
'change_desc' => $change_desc,
'change_type' => $change_type,
'token' => $token
);
$GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('account_log'), $account_log, 'INSERT');
if($user_money!=0 && ($change_type==0 || $change_type==1)){
$uniqid=$change_type.uniqid();
$sql="INSERT INTO ".$GLOBALS['ecs']->table('bet_log')." (user_id,game_id,gameType,game_num,bet_num,bet_time,cal_time,bet_amount,valid_amount,win_or_loss,comm_amount,state,table_id,bet_type,other) ".
"VALUES ('".$user_id."', '1','0','0','".$uniqid."','".time()."','".time()."','0','0','0','0','0','0','0','') ";
$GLOBALS['db']->query($sql);
}
if($user_money!=0 && $change_type==0){
$sql="update ".$GLOBALS['ecs']->table('users')." set sdeposit=sdeposit+".abs($user_money).",deposit=deposit+1 where user_id=".$user_id;
$GLOBALS['db']->query($sql);
}
/* 更新用户信息 */
$sql = "UPDATE " . $GLOBALS['ecs']->table('users') .
" SET user_money = user_money + ('$user_money')," .
" frozen_money = frozen_money + ('$frozen_money')," .
" rank_points = rank_points + ('$rank_points'),";
$sql.= " pay_points = pay_points + ('$pay_points')" .
" WHERE user_id = '$user_id' LIMIT 1";
$GLOBALS['db']->query($sql);
}
/**
* 获得指定分类下的子分类的数组
*
* @access public
* @param int $cat_id 分类的ID
* @param int $selected 当前选中分类的ID
* @param boolean $re_type 返回的类型: 值为真时返回下拉列表,否则返回数组
* @param int $level 限定返回的级数。为0时返回所有级数
* @return mix
*/
function article_cat_list($cat_id = 0, $selected = 0, $re_type = true, $level = 0)
{
static $res = NULL;
if ($res === NULL)
{
$data = read_static_cache('art_cat_pid_releate');
if ($data === false)
{
$sql = "SELECT c.*, COUNT(s.cat_id) AS has_children, COUNT(a.article_id) AS aricle_num ".
' FROM ' . $GLOBALS['ecs']->table('article_cat') . " AS c".
" LEFT JOIN " . $GLOBALS['ecs']->table('article_cat') . " AS s ON s.parent_id=c.cat_id".
" LEFT JOIN " . $GLOBALS['ecs']->table('article') . " AS a ON a.cat_id=c.cat_id".
" GROUP BY c.cat_id ".
" ORDER BY parent_id, sort_order ASC";
$res = $GLOBALS['db']->getAll($sql);
write_static_cache('art_cat_pid_releate', $res);
}
else
{
$res = $data;
}
}
if (empty($res) == true)
{
return $re_type ? '' : array();
}
$options = article_cat_options($cat_id, $res); // 获得指定分类下的子分类的数组
/* 截取到指定的缩减级别 */
if ($level > 0)
{
if ($cat_id == 0)
{
$end_level = $level;
}
else
{
$first_item = reset($options); // 获取第一个元素
$end_level = $first_item['level'] + $level;
}
/* 保留level小于end_level的部分 */
foreach ($options AS $key => $val)
{
if ($val['level'] >= $end_level)
{
unset($options[$key]);
}
}
}
$pre_key = 0;
foreach ($options AS $key => $value)
{
$options[$key]['has_children'] = 1;
if ($pre_key > 0)
{
if ($options[$pre_key]['cat_id'] == $options[$key]['parent_id'])
{
$options[$pre_key]['has_children'] = 1;
}
}
$pre_key = $key;
}
if ($re_type == true)
{
$select = '';
foreach ($options AS $var)
{
$select .= '<option value="' . $var['cat_id'] . '" ';
$select .= ' cat_type="' . $var['cat_type'] . '" ';
$select .= ($selected == $var['cat_id']) ? "selected='ture'" : '';
$select .= '>';
if ($var['level'] > 0)
{
$select .= str_repeat('&nbsp;', $var['level'] * 4);
}
$select .= htmlspecialchars(addslashes($var['cat_name'])) . '</option>';
}
return $select;
}
else
{
foreach ($options AS $key => $value)
{
$options[$key]['url'] = build_uri('article_cat', array('acid' => $value['cat_id']), $value['cat_name']);
}
return $options;
}
}
/**
* 过滤和排序所有文章分类,返回一个带有缩进级别的数组
*
* @access private
* @param int $cat_id 上级分类ID
* @param array $arr 含有所有分类的数组
* @param int $level 级别
* @return void
*/
function article_cat_options($spec_cat_id, $arr)
{
static $cat_options = array();
if (isset($cat_options[$spec_cat_id]))
{
return $cat_options[$spec_cat_id];
}
if (!isset($cat_options[0]))
{
$level = $last_cat_id = 0;
$options = $cat_id_array = $level_array = array();
while (!empty($arr))
{
foreach ($arr AS $key => $value)
{
$cat_id = $value['cat_id'];
if ($level == 0 && $last_cat_id == 0)
{
if ($value['parent_id'] > 0)
{
break;
}
$options[$cat_id] = $value;
$options[$cat_id]['level'] = $level;
$options[$cat_id]['id'] = $cat_id;
$options[$cat_id]['name'] = $value['cat_name'];
unset($arr[$key]);
if ($value['has_children'] == 0)
{
continue;
}
$last_cat_id = $cat_id;
$cat_id_array = array($cat_id);
$level_array[$last_cat_id] = ++$level;
continue;
}
if ($value['parent_id'] == $last_cat_id)
{
$options[$cat_id] = $value;
$options[$cat_id]['level'] = $level;
$options[$cat_id]['id'] = $cat_id;
$options[$cat_id]['name'] = $value['cat_name'];
unset($arr[$key]);
if ($value['has_children'] > 0)
{
if (end($cat_id_array) != $last_cat_id)
{
$cat_id_array[] = $last_cat_id;
}
$last_cat_id = $cat_id;
$cat_id_array[] = $cat_id;
$level_array[$last_cat_id] = ++$level;
}
}
elseif ($value['parent_id'] > $last_cat_id)
{
break;
}
}
$count = count($cat_id_array);
if ($count > 1)
{
$last_cat_id = array_pop($cat_id_array);
}
elseif ($count == 1)
{
if ($last_cat_id != end($cat_id_array))
{
$last_cat_id = end($cat_id_array);
}
else
{
$level = 0;
$last_cat_id = 0;
$cat_id_array = array();
continue;
}
}
if ($last_cat_id && isset($level_array[$last_cat_id]))
{
$level = $level_array[$last_cat_id];
}
else
{
$level = 0;
}
}
$cat_options[0] = $options;
}
else
{
$options = $cat_options[0];
}
if (!$spec_cat_id)
{
return $options;
}
else
{
if (empty($options[$spec_cat_id]))
{
return array();
}
$spec_cat_id_level = $options[$spec_cat_id]['level'];
foreach ($options AS $key => $value)
{
if ($key != $spec_cat_id)
{
unset($options[$key]);
}
else
{
break;
}
}
$spec_cat_id_array = array();
foreach ($options AS $key => $value)
{
if (($spec_cat_id_level == $value['level'] && $value['cat_id'] != $spec_cat_id) ||
($spec_cat_id_level > $value['level']))
{
break;
}
else
{
$spec_cat_id_array[$key] = $value;
}
}
$cat_options[$spec_cat_id] = $spec_cat_id_array;
return $spec_cat_id_array;
}
}
/**
* 调用UCenter的函数
*
* @param string $func
* @param array $params
*
* @return mixed
*/
function uc_call($func, $params=null)
{
restore_error_handler();
if (!function_exists($func))
{
include_once(ROOT_PATH . 'uc_client/client.php');
}
$res = call_user_func_array($func, $params);
set_error_handler('exception_handler');
return $res;
}
/**
* error_handle回调函数
*
* @return
*/
function exception_handler($errno, $errstr, $errfile, $errline)
{
return;
}
/**
* 重新获得商品图片与商品相册的地址
*
* @param int $goods_id 商品ID
* @param string $image 原商品相册图片地址
* @param boolean $thumb 是否为缩略图
* @param string $call 调用方法(商品图片还是商品相册)
* @param boolean $del 是否删除图片
*
* @return string $url
*/
function get_image_path($goods_id, $image='', $thumb=false, $call='goods', $del=false)
{
$url = empty($image) ? $GLOBALS['_CFG']['no_picture'] : $image;
return $url;
}
/**
* 调用使用UCenter插件时的函数
*
* @param string $func
* @param array $params
*
* @return mixed
*/
function user_uc_call($func, $params = null)
{
if (isset($GLOBALS['_CFG']['integrate_code']) && $GLOBALS['_CFG']['integrate_code'] == 'ucenter')
{
restore_error_handler();
if (!function_exists($func))
{
include_once(ROOT_PATH . 'includes/lib_uc.php');
}
$res = call_user_func_array($func, $params);
set_error_handler('exception_handler');
return $res;
}
else
{
return;
}
}
/**
* 调用array_combine函数
*
* @param array $keys
* @param array $values
*
* @return $combined
*/
if (!function_exists('array_combine')) {
function array_combine($keys, $values)
{
if (!is_array($keys)) {
user_error('array_combine() expects parameter 1 to be array, ' .
gettype($keys) . ' given', E_USER_WARNING);
return;
}
if (!is_array($values)) {
user_error('array_combine() expects parameter 2 to be array, ' .
gettype($values) . ' given', E_USER_WARNING);
return;
}
$key_count = count($keys);
$value_count = count($values);
if ($key_count !== $value_count) {
user_error('array_combine() Both parameters should have equal number of elements', E_USER_WARNING);
return false;
}
if ($key_count === 0 || $value_count === 0) {
user_error('array_combine() Both parameters should have number of elements at least 0', E_USER_WARNING);
return false;
}
$keys = array_values($keys);
$values = array_values($values);
$combined = array();
for ($i = 0; $i < $key_count; $i++) {
$combined[$keys[$i]] = $values[$i];
}
return $combined;
}
}
function check_mobile(){
$useragent=$_SERVER['HTTP_USER_AGENT'];
if(preg_match('/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i',$useragent)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i',substr($useragent,0,4))){
return true;
}
return false;
}
?>