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

2074 lines
64 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');
}
/**
* 更新用户SESSION,COOKIE及登录时间、登录次数。
*
* @access public
* @return void
*/
function update_user_info()
{
if (!$_SESSION['user_id'])
{
return false;
}
/* 查询会员信息 */
$time = date('Y-m-d');
$sql = 'SELECT u.user_money, u.pay_points, u.user_rank, u.rank_points, '.
' IFNULL(b.type_money, 0) AS user_bonus, u.last_login, u.repeat_ip,u.last_ip'.
' FROM ' .$GLOBALS['ecs']->table('users'). ' AS u ' .
' LEFT JOIN ' .$GLOBALS['ecs']->table('user_bonus'). ' AS ub'.
' ON ub.user_id = u.user_id AND ub.used_time = 0 ' .
' LEFT JOIN ' .$GLOBALS['ecs']->table('bonus_type'). ' AS b'.
" ON b.type_id = ub.bonus_type_id AND b.use_start_date <= '$time' AND b.use_end_date >= '$time' ".
" WHERE u.user_id = '$_SESSION[user_id]'";
if ($row = $GLOBALS['db']->getRow($sql))
{
/* 更新SESSION */
$_SESSION['last_time'] = $row['last_login'];
$_SESSION['last_ip'] = $row['last_ip'];
$_SESSION['login_fail'] = 0;
/*判断是否是特殊等级,可能后台把特殊会员组更改普通会员组*/
if($row['user_rank'] >0)
{
$sql="SELECT special_rank from ".$GLOBALS['ecs']->table('user_rank')."where rank_id='$row[user_rank]'";
if($GLOBALS['db']->getOne($sql)==='0' || $GLOBALS['db']->getOne($sql)===null)
{
$sql="update ".$GLOBALS['ecs']->table('users')."set user_rank='0' where user_id='$_SESSION[user_id]'";
$GLOBALS['db']->query($sql);
$row['user_rank']=0;
}
}
/* 取得用户等级和折扣 */
if ($row['user_rank'] == 0)
{
// 非特殊等级,根据等级积分计算用户等级(注意:不包括特殊等级)
$sql = 'SELECT rank_id, discount FROM ' . $GLOBALS['ecs']->table('user_rank') . " WHERE special_rank = '0' AND min_points <= " . intval($row['rank_points']) . ' AND max_points > ' . intval($row['rank_points']);
if ($row = $GLOBALS['db']->getRow($sql))
{
$_SESSION['user_rank'] = $row['rank_id'];
$_SESSION['discount'] = $row['discount'] / 100.00;
}
else
{
$_SESSION['user_rank'] = 0;
$_SESSION['discount'] = 1;
}
}
else
{
// 特殊等级
$sql = 'SELECT rank_id, discount FROM ' . $GLOBALS['ecs']->table('user_rank') . " WHERE rank_id = '$row[user_rank]'";
if ($row = $GLOBALS['db']->getRow($sql))
{
$_SESSION['user_rank'] = $row['rank_id'];
$_SESSION['discount'] = $row['discount'] / 100.00;
}
else
{
$_SESSION['user_rank'] = 0;
$_SESSION['discount'] = 1;
}
}
}
//每日登入送積分
$sql = 'SELECT last_login FROM ' . $GLOBALS['ecs']->table('users') . " WHERE user_id = '" . $_SESSION['user_id'] . "'";
$last_login = $GLOBALS['db']->getOne($sql);
if($last_login < strtotime(date("y-m-d")))
{
log_account_change($_SESSION['user_id'], 0, 0, $GLOBALS['_CFG']['login_points'], $GLOBALS['_CFG']['login_points'],"會員每天第一次登入送".$GLOBALS['_CFG']['login_points']."積分");
}
/* 檢查IP是否重覆 */
// if(!$row['repeat_ip']){
// $repeat_ip=check_ip(real_ip());
// }else{
$repeat_ip=false;
//}
/* 更新登录时间登录次数及登录ip */
$sql = "UPDATE " .$GLOBALS['ecs']->table('users'). " SET".
" visit_count = visit_count + 1, ".
" last_ip = '" .real_ip(). "',";
if ($repeat_ip && real_ip()!='65.60.2.244' && real_ip()!='122.116.195.37')
{
$sql.= " repeat_ip = '1',";
}
$sql.= " last_login = '" .gmtime(). "'".
" WHERE user_id = '" . $_SESSION['user_id'] . "'";
$GLOBALS['db']->query($sql);
//紀錄User登入
/* 更新登录时间登录次数及登录ip */
// $browser = get_user_browser();
// $os = get_os();
$ip = real_ip();
$area = ecs_geoip($ip);
$sql = "INSERT INTO " .$GLOBALS['ecs']->table('login_ip') .
" (id, user_id, ip, area,repeat_ip,login_time)
VALUES (NULL, '".$_SESSION['user_id']."', '$ip', '$area', '0', '".gmtime()."')";
$GLOBALS['db']->query($sql);
}
/**
* 获取用户信息数组
*
* @access public
* @param
*
* @return array $user 用户信息数组
*/
function get_user_info($id=0)
{
if ($id == 0)
{
$id = $_SESSION['user_id'];
}
$time = date('Y-m-d');
$sql = 'SELECT u.user_id, u.user_name, u.user_money, u.pay_points'.
' FROM ' .$GLOBALS['ecs']->table('users'). ' AS u ' .
" WHERE u.user_id = '$id'";
$user = $GLOBALS['db']->getRow($sql);
$bonus = get_user_bonus($id);
$user['username'] = $user['user_name'];
$user['user_points'] = $user['pay_points'] . $GLOBALS['_CFG']['integral_name'];
$user['user_money'] = price_format($user['user_money'], false);
$user['user_bonus'] = price_format($bonus['bonus_value'], false);
return $user;
}
/**
* 取得当前位置和页面标题
*
* @access public
* @param integer $cat 分类编号(只有商品及分类、文章及分类用到)
* @param string $str 商品名、文章标题或其他附加的内容(无链接)
* @return array
*/
function assign_ur_here($cat = 0, $str = '')
{
/* 判断是否重写,取得文件名 */
$cur_url = basename(PHP_SELF);
if (intval($GLOBALS['_CFG']['rewrite']))
{
$filename = strpos($cur_url,'-') ? substr($cur_url, 0, strpos($cur_url,'-')) : substr($cur_url, 0, -4);
}
else
{
$filename = substr($cur_url, 0, -4);
}
/* 初始化“页面标题”和“当前位置” */
$page_title = $GLOBALS['_CFG']['shop_title'];
$ur_here = '<a href=".">' . $GLOBALS['_LANG']['home'] . '</a>';
/* 根据文件名分别处理中间的部分 */
if ($filename != 'index')
{
/* 处理有分类的 */
if (in_array($filename, array('category', 'goods', 'article_cat', 'article', 'brand')))
{
/* 商品分类或商品 */
if ('category' == $filename || 'goods' == $filename || 'brand' == $filename)
{
if ($cat > 0)
{
$cat_arr = get_parent_cats($cat);
$key = 'cid';
$type = 'category';
}
else
{
$cat_arr = array();
}
}
/* 文章分类或文章 */
elseif ('article_cat' == $filename || 'article' == $filename)
{
if ($cat > 0)
{
$cat_arr = get_article_parent_cats($cat);
$key = 'acid';
$type = 'article_cat';
}
else
{
$cat_arr = array();
}
}
/* 循环分类 */
if (!empty($cat_arr))
{
krsort($cat_arr);
foreach ($cat_arr AS $val)
{
$s_title = htmlspecialchars($val['cat_name']);
$page_title = htmlspecialchars($val['cat_name']) . '_' . $page_title;
$args = array($key => $val['cat_id']);
$ur_here .= ' <code>&gt;</code> <a href="' . build_uri($type, $args, $val['cat_name']) . '">' .
htmlspecialchars($val['cat_name']) . '</a>';
}
}
}
/* 处理无分类的 */
else
{
/* 团购 */
if ('group_buy' == $filename)
{
$page_title = $GLOBALS['_LANG']['group_buy_goods'] . '_' . $page_title;
$args = array('gbid' => '0');
$ur_here .= ' <code>&gt;</code> <a href="group_buy.php">' .
$GLOBALS['_LANG']['group_buy_goods'] . '</a>';
}
/* 拍卖 */
elseif ('auction' == $filename)
{
$page_title = $GLOBALS['_LANG']['auction'] . '_' . $page_title;
$args = array('auid' => '0');
$ur_here .= ' <code>&gt;</code> <a href="auction.php">' .
$GLOBALS['_LANG']['auction'] . '</a>';
}
/* 夺宝 */
elseif ('snatch' == $filename)
{
$page_title = $GLOBALS['_LANG']['snatch'] . '_' . $page_title;
$args = array('id' => '0');
$ur_here .= ' <code> &gt; </code><a href="snatch.php">' . $GLOBALS['_LANG']['snatch_list'] . '</a>';
}
/* 批发 */
elseif ('wholesale' == $filename)
{
$page_title = $GLOBALS['_LANG']['wholesale'] . '_' . $page_title;
$args = array('wsid' => '0');
$ur_here .= ' <code>&gt;</code> <a href="wholesale.php">' .
$GLOBALS['_LANG']['wholesale'] . '</a>';
}
/* 积分兑换 */
elseif ('exchange' == $filename)
{
$page_title = $GLOBALS['_LANG']['exchange'] . '_' . $page_title;
$args = array('wsid' => '0');
$ur_here .= ' <code>&gt;</code> <a href="exchange.php">' .
$GLOBALS['_LANG']['exchange'] . '</a>';
}
/* 其他的在这里补充 */
}
}
/* 处理最后一部分 */
if (!empty($str))
{
$s_title = $str;
$page_title = $str . '_' . $page_title;
$ur_here .= ' <code>&gt;</code> ' . $str;
}
/* 返回值 */
return array('s_title' => $s_title, 'title' => $page_title, 'ur_here' => $ur_here);
}
/**
* 获得指定分类的所有上级分类
*
* @access public
* @param integer $cat 分类编号
* @return array
*/
function get_parent_cats($cat)
{
if ($cat == 0)
{
return array();
}
$arr = $GLOBALS['db']->GetAll('SELECT cat_id, cat_name, parent_id FROM ' . $GLOBALS['ecs']->table('category'));
if (empty($arr))
{
return array();
}
$index = 0;
$cats = array();
while (1)
{
foreach ($arr AS $row)
{
if ($cat == $row['cat_id'])
{
$cat = $row['parent_id'];
$cats[$index]['cat_id'] = $row['cat_id'];
$cats[$index]['cat_name'] = $row['cat_name'];
$index++;
break;
}
}
if ($index == 0 || $cat == 0)
{
break;
}
}
return $cats;
}
/**
* 根据提供的数组编译成页面标题
*
* @access public
* @param string $type 类型
* @param array $arr 分类数组
* @return string
*/
function build_pagetitle($arr, $type = 'category')
{
$str = '';
foreach ($arr AS $val)
{
$str .= htmlspecialchars($val['cat_name']) . '_';
}
return $str;
}
/**
* 根据提供的数组编译成当前位置
*
* @access public
* @param string $type 类型
* @param array $arr 分类数组
* @return void
*/
function build_urhere($arr, $type = 'category')
{
krsort($arr);
$str = '';
foreach ($arr AS $val)
{
switch ($type)
{
case 'category':
case 'brand':
$args = array('cid' => $val['cat_id']);
break;
case 'article_cat':
$args = array('acid' => $val['cat_id']);
break;
}
$str .= ' <code>&gt;</code> <a href="' . build_uri($type, $args). '">' . htmlspecialchars($val['cat_name']) . '</a>';
}
return $str;
}
/**
* 获得指定页面的动态内容
*
* @access public
* @param string $tmp 模板名称
* @return void
*/
function assign_dynamic($tmp)
{
$sql = 'SELECT id, number, type FROM ' . $GLOBALS['ecs']->table('template') .
" WHERE filename = '$tmp' AND type > 0 AND remarks ='' AND theme='" . $GLOBALS['_CFG']['template'] . "'";
$res = $GLOBALS['db']->getAll($sql);
foreach ($res AS $row)
{
switch ($row['type'])
{
case 1:
/* 分类下的商品 */
$GLOBALS['smarty']->assign('goods_cat_' . $row['id'], assign_cat_goods($row['id'], $row['number']));
break;
case 2:
/* 品牌的商品 */
$brand_goods = assign_brand_goods($row['id'], $row['number']);
$GLOBALS['smarty']->assign('brand_goods_' . $row['id'], $brand_goods['goods']);
$GLOBALS['smarty']->assign('goods_brand_' . $row['id'], $brand_goods['brand']);
break;
case 3:
/* 文章列表 */
$cat_articles = assign_articles($row['id'], $row['number']);
$GLOBALS['smarty']->assign('articles_cat_' . $row['id'], $cat_articles['cat']);
$GLOBALS['smarty']->assign('articles_' . $row['id'], $cat_articles['arr']);
break;
}
}
}
/**
* 分配文章列表给smarty
*
* @access public
* @param integer $id 文章分类的编号
* @param integer $num 文章数量
* @return array
*/
function assign_articles($id, $num)
{
$sql = 'SELECT cat_name FROM ' . $GLOBALS['ecs']->table('article_cat') . " WHERE cat_id = '" . $id ."'";
$cat['id'] = $id;
$cat['name'] = $GLOBALS['db']->getOne($sql);
$cat['url'] = build_uri('article_cat', array('acid' => $id), $cat['name']);
$articles['cat'] = $cat;
$articles['arr'] = get_cat_articles($id, 1, $num);
return $articles;
}
/**
* 分配帮助信息
*
* @access public
* @return array
*/
function get_shop_help()
{
$sql = 'SELECT c.cat_id, c.cat_name, c.sort_order, a.article_id, a.title, a.file_url, a.open_type ' .
'FROM ' .$GLOBALS['ecs']->table('article'). ' AS a ' .
'LEFT JOIN ' .$GLOBALS['ecs']->table('article_cat'). ' AS c ' .
'ON a.cat_id = c.cat_id WHERE c.cat_type = 5 AND a.is_open = 1 ' .
'ORDER BY c.sort_order ASC, a.article_id';
$res = $GLOBALS['db']->getAll($sql);
$arr = array();
foreach ($res AS $key => $row)
{
$arr[$row['cat_id']]['cat_id'] = build_uri('article_cat', array('acid'=> $row['cat_id']), $row['cat_name']);
$arr[$row['cat_id']]['cat_name'] = $row['cat_name'];
$arr[$row['cat_id']]['article'][$key]['article_id'] = $row['article_id'];
$arr[$row['cat_id']]['article'][$key]['title'] = $row['title'];
$arr[$row['cat_id']]['article'][$key]['short_title'] = $GLOBALS['_CFG']['article_title_length'] > 0 ?
sub_str($row['title'], $GLOBALS['_CFG']['article_title_length']) : $row['title'];
$arr[$row['cat_id']]['article'][$key]['url'] = $row['open_type'] != 1 ?
build_uri('article', array('aid' => $row['article_id']), $row['title']) : trim($row['file_url']);
}
return $arr;
}
/**
* 创建分页信息
*
* @access public
* @param string $app 程序名称如category
* @param string $cat 分类ID
* @param string $record_count 记录总数
* @param string $size 每页记录数
* @param string $sort 排序类型
* @param string $order 排序顺序
* @param string $page 当前页
* @param string $keywords 查询关键字
* @param string $brand 品牌
* @param string $price_min 最小价格
* @param string $price_max 最高价格
* @return void
*/
function assign_pager($app, $cat, $record_count, $size, $sort, $order, $page = 1,
$keywords = '', $brand = 0, $price_min = 0, $price_max = 0, $display_type = 'list', $filter_attr='', $url_format='', $sch_array='')
{
$sch = array('keywords' => $keywords,
'sort' => $sort,
'order' => $order,
'cat' => $cat,
'brand' => $brand,
'price_min' => $price_min,
'price_max' => $price_max,
'filter_attr'=>$filter_attr,
'display' => $display_type
);
$page = intval($page);
if ($page < 1)
{
$page = 1;
}
$page_count = $record_count > 0 ? intval(ceil($record_count / $size)) : 1;
$pager['page'] = $page;
$pager['size'] = $size;
$pager['sort'] = $sort;
$pager['order'] = $order;
$pager['record_count'] = $record_count;
$pager['page_count'] = $page_count;
$pager['display'] = $display_type;
switch ($app)
{
case 'category':
$uri_args = array('cid' => $cat, 'bid' => $brand, 'price_min'=>$price_min, 'price_max'=>$price_max, 'filter_attr'=>$filter_attr, 'sort' => $sort, 'order' => $order, 'display' => $display_type);
break;
case 'article_cat':
$uri_args = array('acid' => $cat, 'sort' => $sort, 'order' => $order);
break;
case 'brand':
$uri_args = array('cid' => $cat, 'bid' => $brand, 'sort' => $sort, 'order' => $order, 'display' => $display_type);
break;
case 'search':
$uri_args = array('cid' => $cat, 'bid' => $brand, 'sort' => $sort, 'order' => $order);
break;
case 'exchange':
$uri_args = array('cid' => $cat, 'integral_min'=>$price_min, 'integral_max'=>$price_max, 'sort' => $sort, 'order' => $order, 'display' => $display_type);
break;
}
/* 分页样式 */
$pager['styleid'] = isset($GLOBALS['_CFG']['page_style'])? intval($GLOBALS['_CFG']['page_style']) : 0;
$page_prev = ($page > 1) ? $page - 1 : 1;
$page_next = ($page < $page_count) ? $page + 1 : $page_count;
if ($pager['styleid'] == 0)
{
if (!empty($url_format))
{
$pager['page_first'] = $url_format . 1;
$pager['page_prev'] = $url_format . $page_prev;
$pager['page_next'] = $url_format . $page_next;
$pager['page_last'] = $url_format . $page_count;
}
else
{
$pager['page_first'] = build_uri($app, $uri_args, '', 1, $keywords);
$pager['page_prev'] = build_uri($app, $uri_args, '', $page_prev, $keywords);
$pager['page_next'] = build_uri($app, $uri_args, '', $page_next, $keywords);
$pager['page_last'] = build_uri($app, $uri_args, '', $page_count, $keywords);
}
$pager['array'] = array();
for ($i = 1; $i <= $page_count; $i++)
{
$pager['array'][$i] = $i;
}
}
else
{
$_pagenum = 10; // 显示的页码
$_offset = 2; // 当前页偏移值
$_from = $_to = 0; // 开始页, 结束页
if($_pagenum > $page_count)
{
$_from = 1;
$_to = $page_count;
}
else
{
$_from = $page - $_offset;
$_to = $_from + $_pagenum - 1;
if($_from < 1)
{
$_to = $page + 1 - $_from;
$_from = 1;
if($_to - $_from < $_pagenum)
{
$_to = $_pagenum;
}
}
elseif($_to > $page_count)
{
$_from = $page_count - $_pagenum + 1;
$_to = $page_count;
}
}
if (!empty($url_format))
{
$pager['page_first'] = ($page - $_offset > 1 && $_pagenum < $page_count) ? $url_format . 1 : '';
$pager['page_prev'] = ($page > 1) ? $url_format . $page_prev : '';
$pager['page_next'] = ($page < $page_count) ? $url_format . $page_next : '';
$pager['page_last'] = ($_to < $page_count) ? $url_format . $page_count : '';
$pager['page_kbd'] = ($_pagenum < $page_count) ? true : false;
$pager['page_number'] = array();
for ($i=$_from;$i<=$_to;++$i)
{
$pager['page_number'][$i] = $url_format . $i;
}
}
else
{
$pager['page_first'] = ($page - $_offset > 1 && $_pagenum < $page_count) ? build_uri($app, $uri_args, '', 1, $keywords) : '';
$pager['page_prev'] = ($page > 1) ? build_uri($app, $uri_args, '', $page_prev, $keywords) : '';
$pager['page_next'] = ($page < $page_count) ? build_uri($app, $uri_args, '', $page_next, $keywords) : '';
$pager['page_last'] = ($_to < $page_count) ? build_uri($app, $uri_args, '', $page_count, $keywords) : '';
$pager['page_kbd'] = ($_pagenum < $page_count) ? true : false;
$pager['page_number'] = array();
for ($i=$_from;$i<=$_to;++$i)
{
$pager['page_number'][$i] = build_uri($app, $uri_args, '', $i, $keywords);
}
}
}
if (!empty($sch_array))
{
$pager['search'] = $sch_array;
}
else
{
$pager['search']['category'] = $cat;
foreach ($sch AS $key => $row)
{
$pager['search'][$key] = $row;
}
}
$GLOBALS['smarty']->assign('pager', $pager);
}
/**
* 生成给pager.lbi赋值的数组
*
* @access public
* @param string $url 分页的链接地址(必须是带有参数的地址,若不是可以伪造一个无用参数)
* @param array $param 链接参数 key为参数名value为参数值
* @param int $record 记录总数量
* @param int $page 当前页数
* @param int $size 每页大小
*
* @return array $pager
*/
function get_pager($url, $param, $record_count, $page = 1, $size = 10)
{
$size = intval($size);
if ($size < 1)
{
$size = 10;
}
$page = intval($page);
if ($page < 1)
{
$page = 1;
}
$record_count = intval($record_count);
$page_count = $record_count > 0 ? intval(ceil($record_count / $size)) : 1;
if ($page > $page_count)
{
$page = $page_count;
}
/* 分页样式 */
$pager['styleid'] = isset($GLOBALS['_CFG']['page_style'])? intval($GLOBALS['_CFG']['page_style']) : 0;
$page_prev = ($page > 1) ? $page - 1 : 1;
$page_next = ($page < $page_count) ? $page + 1 : $page_count;
/* 将参数合成url字串 */
$param_url = '?';
foreach ($param AS $key => $value)
{
$param_url .= $key . '=' . $value . '&';
}
$pager['url'] = $url;
$pager['start'] = ($page -1) * $size;
$pager['page'] = $page;
$pager['size'] = $size;
$pager['record_count'] = $record_count;
$pager['page_count'] = $page_count;
if ($pager['styleid'] == 0)
{
$pager['page_first'] = $url . $param_url . 'page=1';
$pager['page_prev'] = $url . $param_url . 'page=' . $page_prev;
$pager['page_next'] = $url . $param_url . 'page=' . $page_next;
$pager['page_last'] = $url . $param_url . 'page=' . $page_count;
$pager['array'] = array();
for ($i = 1; $i <= $page_count; $i++)
{
$pager['array'][$i] = $i;
}
}
else
{
$_pagenum = 10; // 显示的页码
$_offset = 2; // 当前页偏移值
$_from = $_to = 0; // 开始页, 结束页
if($_pagenum > $page_count)
{
$_from = 1;
$_to = $page_count;
}
else
{
$_from = $page - $_offset;
$_to = $_from + $_pagenum - 1;
if($_from < 1)
{
$_to = $page + 1 - $_from;
$_from = 1;
if($_to - $_from < $_pagenum)
{
$_to = $_pagenum;
}
}
elseif($_to > $page_count)
{
$_from = $page_count - $_pagenum + 1;
$_to = $page_count;
}
}
$url_format = $url . $param_url . 'page=';
$pager['page_first'] = ($page - $_offset > 1 && $_pagenum < $page_count) ? $url_format . 1 : '';
$pager['page_prev'] = ($page > 1) ? $url_format . $page_prev : '';
$pager['page_next'] = ($page < $page_count) ? $url_format . $page_next : '';
$pager['page_last'] = ($_to < $page_count) ? $url_format . $page_count : '';
$pager['page_kbd'] = ($_pagenum < $page_count) ? true : false;
$pager['page_number'] = array();
for ($i=$_from;$i<=$_to;++$i)
{
$pager['page_number'][$i] = $url_format . $i;
}
}
$pager['search'] = $param;
return $pager;
}
/**
* 调用调查内容
*
* @access public
* @param integer $id 调查的编号
* @return array
*/
function get_vote($id = '')
{
/* 随机取得一个调查的主题 */
if (empty($id))
{
$time = gmtime();
$sql = 'SELECT vote_id, vote_name, can_multi, vote_count, RAND() AS rnd' .
' FROM ' . $GLOBALS['ecs']->table('vote') .
" WHERE start_time <= '$time' AND end_time >= '$time' ".
' ORDER BY rnd LIMIT 1';
}
else
{
$sql = 'SELECT vote_id, vote_name, can_multi, vote_count' .
' FROM ' . $GLOBALS['ecs']->table('vote').
" WHERE vote_id = '$id'";
}
$vote_arr = $GLOBALS['db']->getRow($sql);
if ($vote_arr !== false && !empty($vote_arr))
{
/* 通过调查的ID,查询调查选项 */
$sql_option = 'SELECT v.*, o.option_id, o.vote_id, o.option_name, o.option_count ' .
'FROM ' . $GLOBALS['ecs']->table('vote') . ' AS v, ' .
$GLOBALS['ecs']->table('vote_option') . ' AS o ' .
"WHERE o.vote_id = v.vote_id AND o.vote_id = '$vote_arr[vote_id]' ORDER BY o.option_order ASC, o.option_id DESC";
$res = $GLOBALS['db']->getAll($sql_option);
/* 总票数 */
$sql = 'SELECT SUM(option_count) AS all_option FROM ' . $GLOBALS['ecs']->table('vote_option') .
" WHERE vote_id = '" . $vote_arr['vote_id'] . "' GROUP BY vote_id";
$option_num = $GLOBALS['db']->getOne($sql);
$arr = array();
$count = 100;
foreach ($res AS $idx => $row)
{
if ($option_num > 0 && $idx == count($res) - 1)
{
$percent = $count;
}
else
{
$percent = ($row['vote_count'] > 0 && $option_num > 0) ? round(($row['option_count'] / $option_num) * 100) : 0;
$count -= $percent;
}
$arr[$row['vote_id']]['options'][$row['option_id']]['percent'] = $percent;
$arr[$row['vote_id']]['vote_id'] = $row['vote_id'];
$arr[$row['vote_id']]['vote_name'] = $row['vote_name'];
$arr[$row['vote_id']]['can_multi'] = $row['can_multi'];
$arr[$row['vote_id']]['vote_count'] = $row['vote_count'];
$arr[$row['vote_id']]['options'][$row['option_id']]['option_id'] = $row['option_id'];
$arr[$row['vote_id']]['options'][$row['option_id']]['option_name'] = $row['option_name'];
$arr[$row['vote_id']]['options'][$row['option_id']]['option_count'] = $row['option_count'];
}
$vote_arr['vote_id'] = (!empty($vote_arr['vote_id'])) ? $vote_arr['vote_id'] : '';
$vote = array('id' => $vote_arr['vote_id'], 'content' => $arr);
return $vote;
}
}
/**
* 获得浏览器名称和版本
*
* @access public
* @return string
*/
function get_user_browser()
{
if (empty($_SERVER['HTTP_USER_AGENT']))
{
return '';
}
$agent = $_SERVER['HTTP_USER_AGENT'];
$browser = '';
$browser_ver = '';
if (preg_match('/MSIE\s([^\s|;]+)/i', $agent, $regs))
{
$browser = 'Internet Explorer';
$browser_ver = $regs[1];
}
elseif (preg_match('/FireFox\/([^\s]+)/i', $agent, $regs))
{
$browser = 'FireFox';
$browser_ver = $regs[1];
}
elseif (preg_match('/Maxthon/i', $agent, $regs))
{
$browser = '(Internet Explorer ' .$browser_ver. ') Maxthon';
$browser_ver = '';
}
elseif (preg_match('/Opera[\s|\/]([^\s]+)/i', $agent, $regs))
{
$browser = 'Opera';
$browser_ver = $regs[1];
}
elseif (preg_match('/OmniWeb\/(v*)([^\s|;]+)/i', $agent, $regs))
{
$browser = 'OmniWeb';
$browser_ver = $regs[2];
}
elseif (preg_match('/Netscape([\d]*)\/([^\s]+)/i', $agent, $regs))
{
$browser = 'Netscape';
$browser_ver = $regs[2];
}
elseif (preg_match('/safari\/([^\s]+)/i', $agent, $regs))
{
$browser = 'Safari';
$browser_ver = $regs[1];
}
elseif (preg_match('/NetCaptor\s([^\s|;]+)/i', $agent, $regs))
{
$browser = '(Internet Explorer ' .$browser_ver. ') NetCaptor';
$browser_ver = $regs[1];
}
elseif (preg_match('/Lynx\/([^\s]+)/i', $agent, $regs))
{
$browser = 'Lynx';
$browser_ver = $regs[1];
}
if (!empty($browser))
{
return addslashes($browser . ' ' . $browser_ver);
}
else
{
return 'Unknow browser';
}
}
/**
* 判断是否为搜索引擎蜘蛛
*
* @access public
* @return string
*/
function is_spider($record = true)
{
static $spider = NULL;
if ($spider !== NULL)
{
return $spider;
}
if (empty($_SERVER['HTTP_USER_AGENT']))
{
$spider = '';
return '';
}
$searchengine_bot = array(
'googlebot',
'mediapartners-google',
'baiduspider+',
'msnbot',
'yodaobot',
'yahoo! slurp;',
'yahoo! slurp china;',
'iaskspider',
'sogou web spider',
'sogou push spider'
);
$searchengine_name = array(
'GOOGLE',
'GOOGLE ADSENSE',
'BAIDU',
'MSN',
'YODAO',
'YAHOO',
'Yahoo China',
'IASK',
'SOGOU',
'SOGOU'
);
$spider = strtolower($_SERVER['HTTP_USER_AGENT']);
foreach ($searchengine_bot AS $key => $value)
{
if (strpos($spider, $value) !== false)
{
$spider = $searchengine_name[$key];
if ($record === true)
{
$GLOBALS['db']->autoReplace($GLOBALS['ecs']->table('searchengine'), array('date' => local_date('Y-m-d'), 'searchengine' => $spider, 'count' => 1), array('count' => 1));
}
return $spider;
}
}
$spider = '';
return '';
}
/**
* 获得客户端的操作系统
*
* @access private
* @return void
*/
function get_os()
{
if (empty($_SERVER['HTTP_USER_AGENT']))
{
return 'Unknown';
}
$agent = strtolower($_SERVER['HTTP_USER_AGENT']);
$os = '';
if (strpos($agent, 'win') !== false)
{
if (strpos($agent, 'nt 5.1') !== false)
{
$os = 'Windows XP';
}
elseif (strpos($agent, 'nt 5.2') !== false)
{
$os = 'Windows 2003';
}
elseif (strpos($agent, 'nt 5.0') !== false)
{
$os = 'Windows 2000';
}
elseif (strpos($agent, 'nt 6.0') !== false)
{
$os = 'Windows Vista';
}
elseif (strpos($agent, 'nt') !== false)
{
$os = 'Windows NT';
}
elseif (strpos($agent, 'win 9x') !== false && strpos($agent, '4.90') !== false)
{
$os = 'Windows ME';
}
elseif (strpos($agent, '98') !== false)
{
$os = 'Windows 98';
}
elseif (strpos($agent, '95') !== false)
{
$os = 'Windows 95';
}
elseif (strpos($agent, '32') !== false)
{
$os = 'Windows 32';
}
elseif (strpos($agent, 'ce') !== false)
{
$os = 'Windows CE';
}
}
elseif (strpos($agent, 'linux') !== false)
{
$os = 'Linux';
}
elseif (strpos($agent, 'unix') !== false)
{
$os = 'Unix';
}
elseif (strpos($agent, 'sun') !== false && strpos($agent, 'os') !== false)
{
$os = 'SunOS';
}
elseif (strpos($agent, 'ibm') !== false && strpos($agent, 'os') !== false)
{
$os = 'IBM OS/2';
}
elseif (strpos($agent, 'mac') !== false && strpos($agent, 'pc') !== false)
{
$os = 'Macintosh';
}
elseif (strpos($agent, 'powerpc') !== false)
{
$os = 'PowerPC';
}
elseif (strpos($agent, 'aix') !== false)
{
$os = 'AIX';
}
elseif (strpos($agent, 'hpux') !== false)
{
$os = 'HPUX';
}
elseif (strpos($agent, 'netbsd') !== false)
{
$os = 'NetBSD';
}
elseif (strpos($agent, 'bsd') !== false)
{
$os = 'BSD';
}
elseif (strpos($agent, 'osf1') !== false)
{
$os = 'OSF1';
}
elseif (strpos($agent, 'irix') !== false)
{
$os = 'IRIX';
}
elseif (strpos($agent, 'freebsd') !== false)
{
$os = 'FreeBSD';
}
elseif (strpos($agent, 'teleport') !== false)
{
$os = 'teleport';
}
elseif (strpos($agent, 'flashget') !== false)
{
$os = 'flashget';
}
elseif (strpos($agent, 'webzip') !== false)
{
$os = 'webzip';
}
elseif (strpos($agent, 'offline') !== false)
{
$os = 'offline';
}
else
{
$os = 'Unknown';
}
return $os;
}
/**
* 统计访问信息
*
* @access public
* @return void
*/
function visit_stats()
{
if (isset($GLOBALS['_CFG']['visit_stats']) && $GLOBALS['_CFG']['visit_stats'] == 'off')
{
return;
}
$time = gmtime();
/* 检查客户端是否存在访问统计的cookie */
$visit_times = (!empty($_COOKIE['ECS']['visit_times'])) ? intval($_COOKIE['ECS']['visit_times']) + 1 : 1;
setcookie('ECS[visit_times]', $visit_times, $time + 86400 * 365, '/');
$browser = get_user_browser();
$os = get_os();
$ip = real_ip();
$area = ecs_geoip($ip);
/* 语言 */
if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE']))
{
$pos = strpos($_SERVER['HTTP_ACCEPT_LANGUAGE'], ';');
$lang = addslashes(($pos !== false) ? substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, $pos) : $_SERVER['HTTP_ACCEPT_LANGUAGE']);
}
else
{
$lang = '';
}
/* 来源 */
if (!empty($_SERVER['HTTP_REFERER']) && strlen($_SERVER['HTTP_REFERER']) > 9)
{
$pos = strpos($_SERVER['HTTP_REFERER'], '/', 9);
if ($pos !== false)
{
$domain = strip_tags (substr($_SERVER['HTTP_REFERER'], 0, $pos));
$path = substr($_SERVER['HTTP_REFERER'], $pos);
if($domain=="http://".$_SERVER["SERVER_NAME"]){
return;
}
/* 来源关键字 */
if (!empty($domain) && !empty($path))
{
save_searchengine_keyword($domain, $path);
}
}
else
{
$domain = $path = '';
}
}
else
{
$domain = $path = '';
}
$sql = 'INSERT INTO ' . $GLOBALS['ecs']->table('stats') . ' ( ' .
'ip_address, visit_times, browser, system, language, area, ' .
'referer_domain, referer_path, access_url, access_time' .
') VALUES (' .
"'$ip', '$visit_times', '$browser', '$os', '$lang', '$area', ".
"'" . addslashes($domain) ."', '" . addslashes($path) ."', '" . htmlspecialchars(addslashes(PHP_SELF)) ."', '" . $time . "')";
$GLOBALS['db']->query($sql);
}
/**
* 保存搜索引擎关键字
*
* @access public
* @return void
*/
function save_searchengine_keyword($domain, $path)
{
if (strpos($domain, 'google.com.tw') !== false && preg_match('/q=([^&]*)/i', $path, $regs))
{
$searchengine = 'GOOGLE TAIWAN';
$keywords = urldecode($regs[1]); // google taiwan
}
if (strpos($domain, 'google.cn') !== false && preg_match('/q=([^&]*)/i', $path, $regs))
{
$searchengine = 'GOOGLE CHINA';
$keywords = urldecode($regs[1]); // google china
}
if (strpos($domain, 'google.com') !== false && preg_match('/q=([^&]*)/i', $path, $regs))
{
$searchengine = 'GOOGLE';
$keywords = urldecode($regs[1]); // google
}
elseif (strpos($domain, 'baidu.') !== false && preg_match('/wd=([^&]*)/i', $path, $regs))
{
$searchengine = 'BAIDU';
$keywords = urldecode($regs[1]); // baidu
}
elseif (strpos($domain, 'baidu.') !== false && preg_match('/word=([^&]*)/i', $path, $regs))
{
$searchengine = 'BAIDU';
$keywords = urldecode($regs[1]); // baidu
}
elseif (strpos($domain, '114.vnet.cn') !== false && preg_match('/kw=([^&]*)/i', $path, $regs))
{
$searchengine = 'CT114';
$keywords = urldecode($regs[1]); // ct114
}
elseif (strpos($domain, 'iask.com') !== false && preg_match('/k=([^&]*)/i', $path, $regs))
{
$searchengine = 'IASK';
$keywords = urldecode($regs[1]); // iask
}
elseif (strpos($domain, 'soso.com') !== false && preg_match('/w=([^&]*)/i', $path, $regs))
{
$searchengine = 'SOSO';
$keywords = urldecode($regs[1]); // soso
}
elseif (strpos($domain, 'sogou.com') !== false && preg_match('/query=([^&]*)/i', $path, $regs))
{
$searchengine = 'SOGOU';
$keywords = urldecode($regs[1]); // sogou
}
elseif (strpos($domain, 'so.163.com') !== false && preg_match('/q=([^&]*)/i', $path, $regs))
{
$searchengine = 'NETEASE';
$keywords = urldecode($regs[1]); // netease
}
elseif (strpos($domain, 'yodao.com') !== false && preg_match('/q=([^&]*)/i', $path, $regs))
{
$searchengine = 'YODAO';
$keywords = urldecode($regs[1]); // yodao
}
elseif (strpos($domain, 'zhongsou.com') !== false && preg_match('/word=([^&]*)/i', $path, $regs))
{
$searchengine = 'ZHONGSOU';
$keywords = urldecode($regs[1]); // zhongsou
}
elseif (strpos($domain, 'search.tom.com') !== false && preg_match('/w=([^&]*)/i', $path, $regs))
{
$searchengine = 'TOM';
$keywords = urldecode($regs[1]); // tom
}
elseif (strpos($domain, 'live.com') !== false && preg_match('/q=([^&]*)/i', $path, $regs))
{
$searchengine = 'MSLIVE';
$keywords = urldecode($regs[1]); // MSLIVE
}
elseif (strpos($domain, 'tw.search.yahoo.com') !== false && preg_match('/p=([^&]*)/i', $path, $regs))
{
$searchengine = 'YAHOO TAIWAN';
$keywords = urldecode($regs[1]); // yahoo taiwan
}
elseif (strpos($domain, 'cn.yahoo.') !== false && preg_match('/p=([^&]*)/i', $path, $regs))
{
$searchengine = 'YAHOO CHINA';
$keywords = urldecode($regs[1]); // yahoo china
}
elseif (strpos($domain, 'yahoo.') !== false && preg_match('/p=([^&]*)/i', $path, $regs))
{
$searchengine = 'YAHOO';
$keywords = urldecode($regs[1]); // yahoo
}
elseif (strpos($domain, 'msn.com.tw') !== false && preg_match('/q=([^&]*)/i', $path, $regs))
{
$searchengine = 'MSN TAIWAN';
$keywords = urldecode($regs[1]); // msn taiwan
}
elseif (strpos($domain, 'msn.com.cn') !== false && preg_match('/q=([^&]*)/i', $path, $regs))
{
$searchengine = 'MSN CHINA';
$keywords = urldecode($regs[1]); // msn china
}
elseif (strpos($domain, 'msn.com') !== false && preg_match('/q=([^&]*)/i', $path, $regs))
{
$searchengine = 'MSN';
$keywords = urldecode($regs[1]); // msn
}
if (!empty($keywords))
{
$gb_search = array('YAHOO CHINA', 'TOM', 'ZHONGSOU', 'NETEASE', 'SOGOU', 'SOSO', 'IASK', 'CT114', 'BAIDU');
if (EC_CHARSET == 'utf-8' && in_array($searchengine, $gb_search))
{
$keywords = ecs_iconv('GBK', 'UTF8', $keywords);
}
if (EC_CHARSET == 'gbk' && !in_array($searchengine, $gb_search))
{
$keywords = ecs_iconv('UTF8', 'GBK', $keywords);
}
$GLOBALS['db']->autoReplace($GLOBALS['ecs']->table('keywords'), array('date' => local_date('Y-m-d'), 'searchengine' => $searchengine, 'keyword' => htmlspecialchars(addslashes($keywords)), 'count' => 1), array('count' => 1));
}
}
/**
* 获得指定用户、商品的所有标记
*
* @access public
* @param integer $goods_id
* @param integer $user_id
* @return array
*/
function get_tags($goods_id = 0, $user_id = 0)
{
$where = '';
if ($goods_id > 0)
{
$where .= " goods_id = '$goods_id'";
}
if ($user_id > 0)
{
if ($goods_id > 0)
{
$where .= " AND";
}
$where .= " user_id = '$user_id'";
}
if ($where > '')
{
$where = ' WHERE' . $where;
}
$sql = 'SELECT tag_id, user_id, tag_words, COUNT(tag_id) AS tag_count' .
' FROM ' . $GLOBALS['ecs']->table('tag') .
"$where GROUP BY tag_words";
$arr = $GLOBALS['db']->getAll($sql);
return $arr;
}
/**
* 获取指定主题某个模板的主题的动态模块
*
* @access public
* @param string $theme 模板主题
* @param string $tmp 模板名称
*
* @return array()
*/
function get_dyna_libs($theme, $tmp)
{
$tmp_arr = explode('.', $tmp);
$ext = end($tmp_arr);
$tmp = basename($tmp,".$ext");
$sql = 'SELECT region, library, sort_order, id, number, type' .
' FROM ' . $GLOBALS['ecs']->table('template') .
" WHERE theme = '$theme' AND filename = '" . $tmp . "' AND type > 0 AND remarks=''".
' ORDER BY region, library, sort_order';
$res = $GLOBALS['db']->getAll($sql);
$dyna_libs = array();
foreach ($res AS $row)
{
$dyna_libs[$row['region']][$row['library']][] = array(
'id' => $row['id'],
'number' => $row['number'],
'type' => $row['type']
);
}
return $dyna_libs;
}
/**
* 替换动态模块
*
* @access public
* @param string $matches 匹配内容
*
* @return string 结果
*/
function dyna_libs_replace($matches)
{
$key = '/' . $matches[1];
if ($row = array_shift($GLOBALS['libs'][$key]))
{
$str = '';
switch($row['type'])
{
case 1:
// 分类的商品
$str = '{assign var="cat_goods" value=$cat_goods_' .$row['id']. '}{assign var="goods_cat" value=$goods_cat_' .$row['id']. '}';
break;
case 2:
// 品牌的商品
$str = '{assign var="brand_goods" value=$brand_goods_' .$row['id']. '}{assign var="goods_brand" value=$goods_brand_' .$row['id']. '}';
break;
case 3:
// 文章列表
$str = '{assign var="articles" value=$articles_' .$row['id']. '}{assign var="articles_cat" value=$articles_cat_' .$row['id']. '}';
break;
case 4:
//广告位
$str = '{assign var="ads_id" value=' . $row['id'] . '}{assign var="ads_num" value=' . $row['number'] . '}';
break;
}
return $str . $matches[0];
}
else
{
return $matches[0];
}
}
/**
* 处理上传文件,并返回上传图片名(上传失败时返回图片名为空)
*
* @access public
* @param array $upload $_FILES 数组
* @param array $type 图片所属类别即data目录下的文件夹名
*
* @return string 上传图片名
*/
function upload_file($upload, $type)
{
if (!empty($upload['tmp_name']))
{
$ftype = check_file_type($upload['tmp_name'], $upload['name'], '|png|jpg|jpeg|gif|doc|xls|txt|zip|ppt|pdf|rar|docx|xlsx|pptx|');
if (!empty($ftype))
{
$name = date('Ymd');
for ($i = 0; $i < 6; $i++)
{
$name .= chr(mt_rand(97, 122));
}
$name = $_SESSION['user_id'] . '_' . $name . '.' . $ftype;
$target = ROOT_PATH . DATA_DIR . '/' . $type . '/' . $name;
if (!move_upload_file($upload['tmp_name'], $target))
{
$GLOBALS['err']->add($GLOBALS['_LANG']['upload_file_error'], 1);
return false;
}
else
{
return $name;
}
}
else
{
$GLOBALS['err']->add($GLOBALS['_LANG']['upload_file_type'], 1);
return false;
}
}
else
{
$GLOBALS['err']->add($GLOBALS['_LANG']['upload_file_error']);
return false;
}
}
/**
* 显示一个提示信息
*
* @access public
* @param string $content
* @param string $link
* @param string $href
* @param string $type 信息类型warning, error, info
* @param string $auto_redirect 是否自动跳转
* @return void
*/
function show_message($content, $links = '', $hrefs = '', $type = 'info', $auto_redirect = true)
{
assign_template();
$msg['content'] = $content;
if (is_array($links) && is_array($hrefs))
{
if (!empty($links) && count($links) == count($hrefs))
{
foreach($links as $key =>$val)
{
$msg['url_info'][$val] = $hrefs[$key];
}
$msg['back_url'] = $hrefs['0'];
}
}
else
{
$link = empty($links) ? $GLOBALS['_LANG']['back_up_page'] : $links;
$href = empty($hrefs) ? 'javascript:history.back()' : $hrefs;
$msg['url_info'][$link] = $href;
$msg['back_url'] = $href;
}
$msg['type'] = $type;
$position = assign_ur_here(0, $GLOBALS['_LANG']['sys_msg']);
$GLOBALS['smarty']->assign('page_title', $position['title']); // 页面标题
$GLOBALS['smarty']->assign('ur_here', $position['ur_here']); // 当前位置
if (is_null($GLOBALS['smarty']->get_template_vars('helps')))
{
$GLOBALS['smarty']->assign('helps', get_shop_help()); // 网店帮助
}
$GLOBALS['smarty']->assign('auto_redirect', $auto_redirect);
$GLOBALS['smarty']->assign('message', $msg);
$GLOBALS['smarty']->display('message.dwt');
exit;
}
/**
* 将一个形如+10, 10, -10, 10%的字串转换为相应数字,并返回操作符号
*
* @access public
* @param string str 要格式化的数据
* @param char operate 操作符号,只能返回‘+’或‘*;
* @return float value 浮点数
*/
function parse_rate_value($str, &$operate)
{
$operate = '+';
$is_rate = false;
$str = trim($str);
if (empty($str))
{
return 0;
}
if ($str[strlen($str) - 1] == '%')
{
$value = floatval($str);
if ($value > 0)
{
$operate = '*';
return $value / 100;
}
else
{
return 0;
}
}
else
{
return floatval($str);
}
}
/**
* 重新计算购物车中的商品价格:目的是当用户登录时享受会员价格,当用户退出登录时不享受会员价格
* 如果商品有促销,价格不变
*
* @access public
* @return void
*/
function recalculate_price()
{
/* 取得有可能改变价格的商品:除配件和赠品之外的商品 */
$sql = 'SELECT c.rec_id, c.goods_id, c.goods_attr_id, g.promote_price, g.promote_start_date, c.goods_number,'.
"g.promote_end_date, IFNULL(mp.user_price, g.shop_price * '$_SESSION[discount]') AS member_price ".
'FROM ' . $GLOBALS['ecs']->table('cart') . ' AS c '.
'LEFT JOIN ' . $GLOBALS['ecs']->table('goods') . ' AS g ON g.goods_id = c.goods_id '.
"LEFT JOIN " . $GLOBALS['ecs']->table('member_price') . " AS mp ".
"ON mp.goods_id = g.goods_id AND mp.user_rank = '" . $_SESSION['user_rank'] . "' ".
"WHERE session_id = '" .SESS_ID. "' AND c.parent_id = 0 AND c.is_gift = 0 AND c.goods_id > 0 " .
"AND c.rec_type = '" . CART_GENERAL_GOODS . "' AND c.extension_code <> 'package_buy'";
$res = $GLOBALS['db']->getAll($sql);
foreach ($res AS $row)
{
$attr_id = empty($row['goods_attr_id']) ? array() : explode(',', $row['goods_attr_id']);
$goods_price = get_final_price($row['goods_id'], $row['goods_number'], true, $attr_id);
$goods_sql = "UPDATE " .$GLOBALS['ecs']->table('cart'). " SET goods_price = '$goods_price' ".
"WHERE goods_id = '" . $row['goods_id'] . "' AND session_id = '" . SESS_ID . "' AND rec_id = '" . $row['rec_id'] . "'";
$GLOBALS['db']->query($goods_sql);
}
/* 删除赠品,重新选择 */
$GLOBALS['db']->query('DELETE FROM ' . $GLOBALS['ecs']->table('cart') .
" WHERE session_id = '" . SESS_ID . "' AND is_gift > 0");
}
function assign_template($ctype = '', $catlist = array())
{
global $smarty,$db,$site_id;
$sql = 'SELECT * ' .
' FROM ' . $GLOBALS['ecs']->table('hs_web') .
' WHERE hs_id= '.$site_id.
' LIMIT 1';
$web = $GLOBALS['db']->getRow($sql);
$smarty->assign('web',$web);
}
/**
* 将一个本地时间戳转成GMT时间戳
*
* @access public
* @param int $time
*
* @return int $gmt_time;
*/
function time2gmt($time)
{
return strtotime(gmdate('Y-m-d H:i:s', $time));
}
/**
* 查询会员的红包金额
*
* @access public
* @param integer $user_id
* @return void
*/
function get_user_bonus($user_id = 0)
{
if ($user_id == 0)
{
$user_id = $_SESSION['user_id'];
}
$sql = "SELECT SUM(bt.type_money) AS bonus_value, COUNT(*) AS bonus_count ".
"FROM " .$GLOBALS['ecs']->table('user_bonus'). " AS ub, ".
$GLOBALS['ecs']->table('bonus_type') . " AS bt ".
"WHERE ub.user_id = '$user_id' AND ub.bonus_type_id = bt.type_id AND ub.order_id = 0";
$row = $GLOBALS['db']->getRow($sql);
return $row;
}
/**
* 保存推荐uid
*
* @access public
* @param void
*
* @return void
* @author xuanyan
**/
function set_affiliate()
{
$config = unserialize($GLOBALS['_CFG']['affiliate']);
if (!empty($_GET['u']) && $config['on'] == 1)
{
setcookie('hbgame_affiliate_aid', '');
if(!empty($config['config']['expire']))
{
if($config['config']['expire_unit'] == 'hour')
{
$c = 1;
}
elseif($config['config']['expire_unit'] == 'day')
{
$c = 24;
}
elseif($config['config']['expire_unit'] == 'week')
{
$c = 24 * 7;
}
else
{
$c = 1;
}
setcookie('hbgame_affiliate_uid', intval($_GET['u']), gmtime() + 3600 * $config['config']['expire'] * $c);
}
else
{
setcookie('hbgame_affiliate_uid', intval($_GET['u']), gmtime() + 3600 * 24); // 过期时间为 1 天
}
}elseif(!empty($_GET['a'])){
setcookie('hbgame_affiliate_uid', '');
setcookie('hbgame_affiliate_aid', intval($_GET['a']), gmtime() + 3600 * 24); // 过期时间为 1 天
}
}
/**
* 获取推荐uid
*
* @access public
* @param void
*
* @return int
* @author xuanyan
**/
function get_affiliate()
{
if (!empty($_COOKIE['hbgame_affiliate_uid']))
{
$uid = intval($_COOKIE['hbgame_affiliate_uid']);
if ($GLOBALS['db']->getOne('SELECT user_id FROM ' . $GLOBALS['ecs']->table('users') . "WHERE user_id = '$uid'"))
{
return 'u'.$uid;
}
else
{
setcookie('hbgame_affiliate_uid', '', 1);
}
}elseif(!empty($_COOKIE['hbgame_affiliate_aid'])){
$aid = intval($_COOKIE['hbgame_affiliate_aid']);
if ($GLOBALS['db']->getOne('SELECT user_id FROM ' . $GLOBALS['ecs']->table('users') . "WHERE user_id = '$aid'"))
{
return 'a'.$aid;
}
else
{
setcookie('hbgame_affiliate_aid', '', 1);
}
}
return 0;
}
function set_agent($a_code)
{
setcookie('hbgame_agent_code', $a_code , gmtime() + 3600 * 24); // 过期时间为 1 天
}
function get_agent()
{
if (!empty($_COOKIE['hbgame_agent_code']))
{
return $_COOKIE['hbgame_agent_code'];
}
return 0;
}
/**
* 获得指定分类同级的所有分类以及该分类下的子分类
*
* @access public
* @param integer $cat_id 分类编号
* @return array
*/
function article_categories_tree($cat_id = 0)
{
if ($cat_id > 0)
{
$sql = 'SELECT parent_id FROM ' . $GLOBALS['ecs']->table('article_cat') . " WHERE cat_id = '$cat_id'";
$parent_id = $GLOBALS['db']->getOne($sql);
}
else
{
$parent_id = 0;
}
/*
判断当前分类中全是是否是底级分类,
如果是取出底级分类上级分类,
如果不是取当前分类及其下的子分类
*/
$sql = 'SELECT count(*) FROM ' . $GLOBALS['ecs']->table('article_cat') . " WHERE parent_id = '$parent_id'";
if ($GLOBALS['db']->getOne($sql))
{
/* 获取当前分类及其子分类 */
$sql = 'SELECT a.cat_id, a.cat_name, a.sort_order AS parent_order, a.cat_id, ' .
'b.cat_id AS child_id, b.cat_name AS child_name, b.sort_order AS child_order ' .
'FROM ' . $GLOBALS['ecs']->table('article_cat') . ' AS a ' .
'LEFT JOIN ' . $GLOBALS['ecs']->table('article_cat') . ' AS b ON b.parent_id = a.cat_id ' .
"WHERE a.parent_id = '$parent_id' AND a.cat_type=1 ORDER BY parent_order ASC, a.cat_id ASC, child_order ASC";
}
else
{
/* 获取当前分类及其父分类 */
$sql = 'SELECT a.cat_id, a.cat_name, b.cat_id AS child_id, b.cat_name AS child_name, b.sort_order ' .
'FROM ' . $GLOBALS['ecs']->table('article_cat') . ' AS a ' .
'LEFT JOIN ' . $GLOBALS['ecs']->table('article_cat') . ' AS b ON b.parent_id = a.cat_id ' .
"WHERE b.parent_id = '$parent_id' AND b.cat_type = 1 ORDER BY sort_order ASC";
}
$res = $GLOBALS['db']->getAll($sql);
$cat_arr = array();
foreach ($res AS $row)
{
$cat_arr[$row['cat_id']]['id'] = $row['cat_id'];
$cat_arr[$row['cat_id']]['name'] = $row['cat_name'];
$cat_arr[$row['cat_id']]['url'] = build_uri('article_cat', array('acid' => $row['cat_id']), $row['cat_name']);
if ($row['child_id'] != NULL)
{
$cat_arr[$row['cat_id']]['children'][$row['child_id']]['id'] = $row['child_id'];
$cat_arr[$row['cat_id']]['children'][$row['child_id']]['name'] = $row['child_name'];
$cat_arr[$row['cat_id']]['children'][$row['child_id']]['url'] = build_uri('article_cat', array('acid' => $row['child_id']), $row['child_name']);
}
}
return $cat_arr;
}
/**
* 获得指定文章分类的所有上级分类
*
* @access public
* @param integer $cat 分类编号
* @return array
*/
function get_article_parent_cats($cat)
{
if ($cat == 0)
{
return array();
}
$arr = $GLOBALS['db']->GetAll('SELECT cat_id, cat_name, parent_id FROM ' . $GLOBALS['ecs']->table('article_cat'));
if (empty($arr))
{
return array();
}
$index = 0;
$cats = array();
while (1)
{
foreach ($arr AS $row)
{
if ($cat == $row['cat_id'])
{
$cat = $row['parent_id'];
$cats[$index]['cat_id'] = $row['cat_id'];
$cats[$index]['cat_name'] = $row['cat_name'];
$index++;
break;
}
}
if ($index == 0 || $cat == 0)
{
break;
}
}
return $cats;
}
/**
* 取得某模板某库设置的数量
* @param string $template 模板名如index
* @param string $library 库名如recommend_best
* @param int $def_num 默认数量:如果没有设置模板,显示的数量
* @return int 数量
*/
function get_library_number($library, $template = null)
{
global $page_libs;
if (empty($template))
{
$template = basename(PHP_SELF);
$template = substr($template, 0, strrpos($template, '.'));
}
$template = addslashes($template);
static $lib_list = array();
/* 如果没有该模板的信息,取得该模板的信息 */
if (!isset($lib_list[$template]))
{
$lib_list[$template] = array();
$sql = "SELECT library, number FROM " . $GLOBALS['ecs']->table('template') .
" WHERE theme = '" . $GLOBALS['_CFG']['template'] . "'" .
" AND filename = '$template' AND remarks='' ";
$res = $GLOBALS['db']->query($sql);
while ($row = $GLOBALS['db']->fetchRow($res))
{
$lib = basename(strtolower(substr($row['library'], 0, strpos($row['library'], '.'))));
$lib_list[$template][$lib] = $row['number'];
}
}
$num = 0;
if (isset($lib_list[$template][$library]))
{
$num = intval($lib_list[$template][$library]);
}
else
{
/* 模板设置文件查找默认值 */
include_once(ROOT_PATH . ADMIN_PATH . '/includes/lib_template.php');
static $static_page_libs = null;
if ($static_page_libs == null)
{
$static_page_libs = $page_libs;
}
$lib = '/library/' . $library . '.lbi';
$num = isset($static_page_libs[$template][$lib]) ? $static_page_libs[$template][$lib] : 3;
}
return $num;
}
/**
* 取得自定义导航栏列表
* @param string $type 位置如top、bottom、middle
* @return array 列表
*/
function get_navigator($ctype = '', $catlist = array())
{
$sql = 'SELECT * FROM '. $GLOBALS['ecs']->table('nav') . '
WHERE ifshow = \'1\' ORDER BY type, vieworder';
$res = $GLOBALS['db']->query($sql);
$cur_url = substr(strrchr($_SERVER['REQUEST_URI'],'/'),1);
if (intval($GLOBALS['_CFG']['rewrite']))
{
if(strpos($cur_url, '-'))
{
preg_match('/([a-z]*)-([0-9]*)/',$cur_url,$matches);
$cur_url = $matches[1].'.php?id='.$matches[2];
}
}
else
{
$cur_url = substr(strrchr($_SERVER['REQUEST_URI'],'/'),1);
}
$noindex = false;
$active = 0;
$navlist = array(
'top' => array(),
'middle' => array(),
'bottom' => array()
);
while ($row = $GLOBALS['db']->fetchRow($res))
{
$navlist[$row['type']][] = array(
'name' => $row['name'],
'opennew' => $row['opennew'],
'url' => $row['url'],
'ctype' => $row['ctype'],
'cid' => $row['cid'],
);
}
/*遍历自定义是否存在currentPage*/
foreach($navlist['middle'] as $k=>$v)
{
$condition = empty($ctype) ? (strpos($cur_url, $v['url']) === 0) : (strpos($cur_url, $v['url']) === 0 && strlen($cur_url) == strlen($v['url']));
if ($condition)
{
$navlist['middle'][$k]['active'] = 1;
$noindex = true;
$active += 1;
}
}
if(!empty($ctype) && $active < 1)
{
foreach($catlist as $key => $val)
{
foreach($navlist['middle'] as $k=>$v)
{
if(!empty($v['ctype']) && $v['ctype'] == $ctype && $v['cid'] == $val && $active < 1)
{
$navlist['middle'][$k]['active'] = 1;
$noindex = true;
$active += 1;
}
}
}
}
if ($noindex == false) {
$navlist['config']['index'] = 1;
}
return $navlist;
}
function get_marq()
{
$sql = 'SELECT * ' .
' FROM ' . $GLOBALS['ecs']->table('news') .
' WHERE is_act=1 AND type=0 AND start_time<'. time() .' AND end_time >' . time() .
' ORDER BY start_time DESC';
$res = $GLOBALS['db']->getAll($sql);
$arr = array();
foreach ($res AS $idx => $row)
{
$arr[$idx]['id'] = $row['id'];
$arr[$idx]['content'] = str_replace(chr(13), "&nbsp;&nbsp;&nbsp;",$row['content']);
}
return $arr;
}
function url_domain()
{
$curr = strpos(PHP_SELF, ADMIN_PATH . '/') !== false ?
preg_replace('/(.*)(' . ADMIN_PATH . ')(\/?)(.)*/i', '\1', dirname(PHP_SELF)) :
dirname(PHP_SELF);
$root = str_replace('\\', '/', $curr);
if (substr($root, -1) != '/')
{
$root .= '/';
}
return $root;
}
function getUserIdByName($user_name){
$user_id=$GLOBALS['db']->getOne("SELECT user_id from ".$GLOBALS['ecs']->table('users')." where LOWER(user_name)='".strtolower($user_name)."'");
return $user_id;
}
function getUserIdByAcc($user_acc,$game_id){
$user_id=$GLOBALS['db']->getOne("SELECT user_id from ".$GLOBALS['ecs']->table('user_game')." where game_id='".$game_id."' and LOWER(account)='".strtolower($user_acc)."'");
if(!strlen($user_id)){
$user_id=0;
}
return $user_id;
}
function getParentId($user_id){
$parent_id=$GLOBALS['db']->getOne("SELECT parent_id from ".$GLOBALS['ecs']->table('users')." where user_id=".$user_id);
return $parent_id;
}
function user_log($sn = '', $action, $content, $type=0)
{
$log_info = $GLOBALS['_LANG']['log_action'][$action] . $GLOBALS['_LANG']['log_action'][$content] .': '. addslashes($sn);
$sql = 'INSERT INTO ' . $GLOBALS['ecs']->table('user_log') . ' (log_time, user_id, log_info, log_type, ip_address) ' .
" VALUES ('" . gmtime() . "', $_SESSION[user_id], '" . stripslashes($log_info) . "','". $type ."','" . real_ip() . "')";
$GLOBALS['db']->query($sql);
}
function check_ip($ip)
{
$repeat_ip=$GLOBALS['db']->getOne("SELECT count(last_ip) FROM ". $GLOBALS['ecs']->table('users') ." WHERE user_id<>'".$_SESSION['user_id']."' and last_ip='".$ip."' and status=1");
if ($repeat_ip && real_ip()!='65.60.2.244' && real_ip()!='122.116.195.37')
{
$rs=$GLOBALS['db']->query("SELECT user_name FROM ". $GLOBALS['ecs']->table('users') ." WHERE last_ip='".$ip."' and status=1");
$rp_user='';
while($row=$GLOBALS['db']->fetchRow($rs)){
$rp_user.=$row['user_name'].",";
}
$note=$ip.'-'.$rp_user;
$GLOBALS['db']->query("UPDATE ". $GLOBALS['ecs']->table('users')." set repeat_ip='1',note=concat(note,'--','".$note."') WHERE last_ip='".$ip."'");
$GLOBALS['db']->query("INSERT INTO ". $GLOBALS['ecs']->table('ip_blacklist')." values (null,'".$ip."','".$rp_user."','".time()."')");
return true;
}else{
return false;
}
}
?>