* @version: v2.0
* ---------------------------------------------
* $Author: paulgao $
* $Date: 2006-12-28 22:27:30 +0800 (星期四, 28 十二月 2006) $
* $Id: lib_main.php 3882 2006-12-28 14:27:30Z paulgao $
*/
if (!defined('IN_ECS'))
{
die("Hacking attempt");
}
/**
* 获得当前用户的信息
*
* @access public
* @return void
*/
function get_user_info()
{
$sql = "SELECT u.user_money, u.pay_points, u.user_rank, u.rank_points, IFNULL(b.type_money, 0) AS user_bonus ".
"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_startdate <= CURDATE() AND b.use_enddate >= CURDATE() ".
"WHERE u.user_id = '$_SESSION[user_id]'";
if (($row = $GLOBALS['db']->GetRow($sql)))
{
$_SESSION['user_money'] = $row['user_money'];
$_SESSION['user_points'] = $row['pay_points'];
$_SESSION['user_bonus'] = $row['user_bonus'];
/* 取得用户等级和折扣 */
if ($row['user_rank'] == 0)
{
// 非特殊等级,根据等级积分计算用户等级(注意:不包括特殊等级)
$sql = "SELECT rank_id , discount FROM ".$GLOBALS['ecs']->table('user_rank')." WHERE special_rank = '0' AND min_points <= ".$row['rank_points']." AND max_points > ".$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 ;
}
}
}
$user['username'] = $_SESSION['user_name'];
$user['email'] = $_SESSION['email'];
$user['user_money'] = sprintf($GLOBALS['_CFG']['currency_format'], $_SESSION['user_money']);
$user['user_points'] = $_SESSION['user_points'];
$user['user_bonus'] = sprintf($GLOBALS['_CFG']['currency_format'], $_SESSION['user_bonus']);
if(!empty($user['username']))
{
setcookie('ECS[username]', $user['username'] , time() + 3600 * 34 * 30);
}
$GLOBALS['smarty']->assign('user_info', $user);
}
/**
* 调用主导航上的所有商品分类
*
* @access public
* @return void
*/
function assign_nav()
{
/* 获得导航上的商品分类 */
$sql = "SELECT cat_id, cat_name FROM ".$GLOBALS['ecs']->table('category').
" WHERE show_in_nav = 1 ORDER BY sort_order";
$nav = array();
$row = $GLOBALS['db']->GetAll($sql);
$idx = 0;
foreach ($row AS $key=>$val)
{
$nav[$idx]['label'] = htmlspecialchars($val['cat_name']);
$nav[$idx]['url'] = build_url('category', $val['cat_id']);
if(basename($_SERVER['PHP_SELF']) == 'category.php')
{
$nav[$idx]['id'] = $val['cat_id'];
}
$idx++;
}
/* 获得导航上的文章分类 */
$sql = "SELECT cat_id, cat_name FROM ".$GLOBALS['ecs']->table('article_cat').
" WHERE show_in_nav = 1 ORDER BY sort_order";
$row = $GLOBALS['db']->getAll($sql);
foreach ($row AS $key=>$val)
{
$nav[$idx]['label'] = htmlspecialchars($val['cat_name']);
$nav[$idx]['url'] = build_url('article_cat', $val['cat_id']);
$idx ++;
}
$GLOBALS['smarty']->assign('nav_list', $nav);
}
/**
* 调用商品分类页、商品详情页、文章分类页以及文章内容页的当前位置
*
* @access public
* @param string $str 商品、文章标题以及其他附加的内容
* @param integer $cat 分类编号
* @return void
*/
function assign_ur_here($cat = 0, $str='')
{
global $db, $ecs, $smarty, $_CFG, $_LANG;
$filename = substr(basename($_SERVER['PHP_SELF']), 0, -4);
switch(substr($filename, 0, 3))
{
case 'art':
$type = 'article_cat';
break;
default :
$type = 'category';
}
if ($type == 'category')
{
$cat_arr = get_parent_cats($cat);
}
else
{
$sql = "SELECT cat_name FROM " .$ecs->table('article_cat'). " WHERE cat_id='$cat'";
$cat_arr[0]['cat_id'] = $cat;
$cat_arr[0]['cat_name'] = $db->GetOne($sql);
}
if ($filename != 'index')
{
$page_title = empty($str) ? '' : $str. '_';
foreach ($cat_arr AS $key=>$val)
{
$page_title .= htmlspecialchars($val['cat_name']) . '_';
}
$page_title .= $_CFG['shop_title'];
$ur_here = '' .$_LANG['home']. '';
krsort($cat_arr);
foreach ($cat_arr AS $key=>$val)
{
$ur_here .= ' > ' .
htmlspecialchars($val['cat_name']) . '';
}
}
else
{
$page_title = $_CFG['shop_title'];
$ur_here = '' .$_LANG['home']. '';
}
if (!empty($str))
{
$ur_here .= ' > ' .$str;
}
$smarty->assign('page_title', $page_title);
$smarty->assign('ur_here', $ur_here);
}
/**
* 获得指定分类的所有上级分类
*
* @access public
* @param integer $cat 分类编号
* @return array
*/
function get_parent_cats($cat)
{
global $ecs, $db;
$arr = $db->GetAll("SELECT cat_id, cat_name, parent_id FROM " .$ecs->table('category'));
$cats = array();
$index = 0;
while ($cat > 0)
{
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;
}
}
}
return $cats;
}
/**
* 根据提供的数组编译成页面标题
*
* @access public
* @param string $type 类型
* @param array $arr 分类数组
* @return string
*/
function build_pagetitle($arr, $type='category')
{
$str = '';
foreach ($arr AS $key=>$val)
{
$str .= htmlspecialchars($val['cat_name']) . '_';
}
return $str;
}
/**
* 根据提供的数组编译成当前位置
*
* @access public
* @param string $type 类型
* @param array $arr 分类数组
* @return void
*/
function build_urhere($arr, $type='category')
{
$str = '';
krsort($arr);
foreach ($arr AS $key=>$val)
{
$str .= ' > ' .htmlspecialchars($val['cat_name']) . '';
}
return $str;
}
/**
* 获得指定页面的动态内容
*
* @access public
* @param string $tmp 模板名称
* @return void
*/
function assign_dynamic($tmp)
{
global $ecs, $db;
$sql = "SELECT id, number, type FROM " .$ecs->table('template'). " WHERE filename='$tmp' AND type > 0";
$row = $db->GetAll($sql);
foreach ($row AS $key=>$val)
{
switch ($val['type'])
{
case 1:
/* 分类下的商品 */
assign_cat_goods($val['id'], $val['number']);
break;
case 2:
/* 品牌的商品 */
assign_brand_goods($val['id'], $val['number']);
break;
case 3:
/* 文章列表 */
assign_articles($val['id'], $val['number']);
break;
}
}
}
/**
* 创建链接地址
*
* @access public
* @param string $type 链接地址的类型,如category, goods
* @param string $id 链接地址的ID
* @param string $append 附加的文字
* @param string $page 页数
* @param array $arr 包含参数的数组
* @return string
*/
function build_url($type, $id='', $append='', $page='', $arr=array())
{
$rewrite = (isset($GLOBALS['_CFG']['rewrite']) && intval($GLOBALS['_CFG']['rewrite']) > 0);
$uri = '';
if ($rewrite)
{
/* 启用了 url 重写 */
if (empty($id))
{
/* 没有设置 id 参数,url直接就是类型 */
$uri = $type;
}
else
{
/* 设置了 id 参数 */
if ($type == 'search')
{
/* 当前类型为搜索,则id值为分类id */
$uri = "search-c$id";
}
else
{
$uri = $type . '-' .$id;
}
}
}
else
{
/* 没有启用 url 重写 */
if ($type == 'search')
{
/* 当前的类型为搜索,则id为分类id */
$uri = 'search.php?category='.$id;
}
else
{
$uri = $type . '.php?id=' .$id;
}
}
if (!empty($page))
{
$uri .= $rewrite ? '-'. $page : "&page=$page";
}
if (isset($arr['sort']) && !empty($arr['sort']))
{
$uri .= $rewrite ? '-'. $arr['sort'] : "&sort=$arr[sort]";
}
if (isset($arr['order']) && !empty($arr['order']))
{
$uri .= $rewrite ? '-'. $arr['order'] : "&order=$arr[order]";
}
if ($type == 'search')
{
if (isset($arr['brand']))
{
$uri .= $rewrite ? '-b'. $arr['brand'] : "&brand=$arr[brand]";
}
if (isset($arr['keywords']))
{
$uri .= $rewrite ? '-k'. urlencode($arr['keywords']) : "&keywords=$arr[keywords]";
}
if (isset($arr['price_min']))
{
$uri .= $rewrite ? '-s'. $arr['price_min'] : "&price_min=$arr[price_min]";
}
if (isset($arr['price_max']))
{
$uri .= $rewrite ? '-l'. $arr['price_max'] : "&price_max=$arr[price_max]";
}
}
if ($rewrite)
{
if (intval($GLOBALS['_CFG']['rewrite']) == 2 && !empty($append))
{
$uri .= '-' .urlencode(preg_replace('/\W+/', '', $append));
}
$uri .= '.html';
}
return $uri;
}
/**
* 分配文章列表给smarty
*
* @access public
* @param integer $id 文章分类的编号
* @param integer $num 文章数量
* @return void
*/
function assign_articles($id, $num)
{
global $ecs, $db, $smarty, $_CFG;
$sql = "SELECT cat_name FROM " .$ecs->table('article_cat'). " WHERE cat_id='$id'";
$cat['id'] = $id;
$cat['name'] = $db->GetOne($sql);
$cat['url'] = build_url('article_cat', $id, $cat['name']);
$smarty->assign('articles_cat_'. $id, $cat);
/* 文章列表 */
$sql = "SELECT article_id, title, add_time, file_url, open_type ".
"FROM " .$ecs->table('article'). " WHERE cat_id='$id' ORDER BY article_id DESC";
$res = $db->SelectLimit($sql, $num);
$arr = array();
$idx = 0;
while ($row = $res->FetchRow())
{
$arr[$idx]['id'] = $row['article_id'];
$arr[$idx]['title'] = $row['title'];
$arr[$idx]['short_title'] = $_CFG['article_title_length'] > 0 ?
sub_str($row['title'], 0, $_CFG['article_title_length']) : $row['title'];
$arr[$idx]['add_time'] = date($_CFG['date_format'], $row['add_time']);
$arr[$idx]['url'] = $row['open_type'] != 1 ?
build_url('article', $row['article_id'], $row['title']) : trim($row['file_url']);
$idx ++;
}
$smarty->assign('articles_'. $id, $arr);
}
/**
* 分配帮助信息
*
* @access public
* @return void
*/
function assign_help()
{
global $ecs, $db, $_CFG, $smarty;
$arr = array();
$sql = "SELECT c.cat_id, c.cat_name, c.sort_order, a.article_id, a.title, a.file_url, a.open_type ".
"FROM " .$ecs->table('article'). " AS a ".
"LEFT JOIN " .$ecs->table('article_cat'). " AS c ".
"ON a.cat_id = c.cat_id WHERE c.cat_type=0 ".
"ORDER BY c.sort_order ASC, a.article_id";
$row = $db->GetAll($sql);
foreach ($row AS $key=>$val)
{
$arr[$val['cat_id']]['cat_name'] = $val['cat_name'];
$arr[$val['cat_id']]['article'][$key]['article_id'] = $val['article_id'];
$arr[$val['cat_id']]['article'][$key]['title'] = $val['title'];
$arr[$val['cat_id']]['article'][$key]['short_title'] = $_CFG['article_title_length'] > 0 ?
sub_str($val['title'], 0, $_CFG['article_title_length']) : $val['title'];
$arr[$val['cat_id']]['article'][$key]['url'] = $val['open_type'] != 1 ?
build_url('article', $val['article_id'], $val['title']) : trim($val['file_url']);
}
$smarty->assign('helps', $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='', $price_min=0, $price_max=0)
{
global $smarty;
$sch = array('keywords' => $keywords,
'sort' => $sort,
'order' => $order,
'brand' => $brand,
'price_min' => $price_min,
'price_max' => $price_max);
if ($size < 1 )$size = 1;
$page = intval($page);
if ($page < 1) $page = 1;
$page_count = intval(ceil($record_count / $size));
$page_prev = ($page > 1) ? $page - 1 : 1;
$page_next = ($page < $page_count) ? $page + 1 : $page_count;
$pager = array();
$pager['page'] = $page;
$pager['size'] = $size;
$pager['sort'] = $sort;
$pager['order'] = $order;
$pager['record_count'] = $record_count;
$pager['page_count'] = $page_count;
$pager['page_first'] = build_url($app, $cat, '', 1, $sch);
$pager['page_prev'] = build_url($app, $cat, '', $page_prev, $sch);
$pager['page_next'] = build_url($app, $cat, '', $page_next, $sch);
$pager['page_last'] = build_url($app, $cat, '', $page_count, $sch);
$pager['array'] = array();
for ($i = 1; $i <= $page_count; $i++)
{
$pager['array'][$i] = $i;
}
$pager['search']['category'] = $cat;
foreach ($sch AS $key=>$val)
{
$pager['search'][$key] = $val;
}
$smarty->assign('pager', $pager);
}
/**
* 调用调查内容
*
* @access public
* @return void
*/
function assign_vote($id='')
{
global $smarty, $ecs, $db;
/* 随机取得一个调查的主题 */
if (empty($id))
{
$sql = "SELECT vote_id, vote_name, can_multi, vote_count, RAND() AS rnd ".
"FROM ".$ecs->table('vote')."".
"WHERE begin_date <= CURDATE() AND end_date >= CURDATE() ".
"ORDER BY rnd LIMIT 1";
}
else
{
$sql = "SELECT vote_id, vote_name, can_multi, vote_count ".
"FROM ".$ecs->table('vote').
" WHERE vote_id = '$id' ";
}
$vote_id = $db->GetRow($sql);
if ($vote_id !== false)
{
/* 通过调查的ID,查询调查选项 */
@$sql_option = "SELECT v.*, o.option_id, o.vote_id, o.option_name, o.option_count ".
"FROM ".$ecs->table('vote'). " AS v, ".$ecs->table('vote_option')." AS o ".
"WHERE o.vote_id = v.vote_id AND o.vote_id = '$vote_id[vote_id]' ";
$res = $db->Execute($sql_option) or die($db->ErrorMsg());
$arr = array();
if ($res !== false)
{
while ($row = $res->FetchRow())
{
/* 总票数 */
$sql = "SELECT SUM(option_count) AS all_option FROM ".$ecs->table('vote_option')." ".
"WHERE vote_id='".$row['vote_id']."' GROUP BY vote_id";
$option_num = $db->GetOne($sql);
if ($row['vote_count'] > 0)
{
$arr[$row['vote_id']]['options'][$row['option_id']]['percent'] = sprintf("%.0f", ($row['option_count']/$option_num) * 100) ;
}
else
{
$arr[$row['vote_id']]['options'][$row['option_id']]['percent'] = 0;
}
$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_id['vote_id'] = (!empty($vote_id['vote_id'])) ? $vote_id['vote_id'] : '';
$smarty->assign('vote_id', $vote_id['vote_id']);
$smarty->assign('vote', $arr);
}
else
{
die($db->ErrorMsg());
}
}
/**
* 查询评论内容
*
* @access public
* @return void
*/
function assign_comment($id, $type, $page = 1)
{
global $db, $ecs, $_CFG, $smarty;
/* 取得评论列表 */
$arr = array();
$pager = array();
$count = $db->GetOne("SELECT COUNT(*) FROM " .$ecs->table('comment'). " WHERE id_value = '$id' AND comment_type = $type AND status = 1");
$size = isset($_CFG['comments_number']) && intval($_CFG['comments_number']) > 0 ? $_CFG['comments_number'] : 5;
$page_count = intval(ceil($count / $size));
$sql = "SELECT * FROM " .$ecs->table('comment'). " ".
"WHERE id_value='$id' AND comment_type='$type' AND status = 1 ".
"ORDER BY comment_id DESC";
$res = $db->SelectLimit($sql, $size, ($page-1) * $size) or die($GLOBALS['db']->errorMsg()) ;
while ($row = $res->FetchRow())
{
/* 取得已有回复的评论 */
$reply_res = $db->GetRow("SELECT * FROM " .$ecs->table('comment'). " WHERE parent_id= '".$row['comment_id']."'");
$arr[$row['comment_id']]['re_content'] = nl2br(htmlspecialchars($reply_res['content']));
$arr[$row['comment_id']]['re_add_time'] = date($_CFG['time_format'], $reply_res['add_time']);
$arr[$row['comment_id']]['re_email'] = $reply_res['email'];
$arr[$row['comment_id']]['re_username'] = $reply_res['user_name'];
$arr[$row['comment_id']]['id'] = $row['comment_id'];
$arr[$row['comment_id']]['email'] = $row['email'];
$arr[$row['comment_id']]['username'] = $row['user_name'];
$arr[$row['comment_id']]['content'] = nl2br(htmlspecialchars($row['content']));
$arr[$row['comment_id']]['rank'] = $row['comment_rank'];
$arr[$row['comment_id']]['add_time'] = date($_CFG['time_format'], $row['add_time']);
}
$pager['page'] = $page;
$pager['size'] = $size;
$pager['record_count'] = $count;
$pager['page_count'] = $page_count;
$pager['page_first'] = "javascript:gotoPage(1, $id, $type)";
$pager['page_prev'] = $page > 1 ? "javascript:gotoPage(" .($page-1). ", $id, $type)" : 'javascript:;';
$pager['page_next'] = $page < $page_count ? 'javascript:gotoPage(' .($page + 1) . ", $id, $type)" : 'javascript:;';
$pager['page_last'] = $page < $page_count ? 'javascript:gotoPage(' .$page_count. ", $id, $type)" : 'javascript:;';
/* 验证码相关设置 */
if ($GLOBALS['_CFG']['comment_captcha'] && gd_version() > 0)
{
$GLOBALS['smarty']->assign('enabled_captcha', 1);
$GLOBALS['smarty']->assign('rand', mt_rand());
}
$smarty->assign('username', $_SESSION['user_name']);
$smarty->assign('email', $_SESSION['email']);
$smarty->assign('comments', $arr);
$smarty->assign('pager', $pager);
$smarty->assign('comment_type', $type);
$smarty->assign('id', $id);
}
/**
* 获得浏览器名称和版本
*
* @access public
* @return string
*/
function getbrowser()
{
global $_SERVER;
$agent = $_SERVER['HTTP_USER_AGENT'];
$browser = '';
$browser_ver = '';
if (preg_match('/OmniWeb\/(v*)([^\s|;]+)/i', $agent, $regs))
{
$browser = 'OmniWeb';
$browser_ver = $regs[2];
}
if (preg_match('/Netscape([\d]*)\/([^\s]+)/i', $agent, $regs))
{
$browser = 'Netscape';
$browser_ver = $regs[2];
}
if (preg_match('/safari\/([^\s]+)/i', $agent, $regs))
{
$browser = 'Safari';
$browser_ver = $regs[1];
}
if (preg_match('/MSIE\s([^\s|;]+)/i', $agent, $regs))
{
$browser = 'Internet Explorer';
$browser_ver = $regs[1];
}
if (preg_match('/Opera[\s|\/]([^\s]+)/i', $agent, $regs))
{
$browser = 'Opera';
$browser_ver = $regs[1];
}
if (preg_match('/NetCaptor\s([^\s|;]+)/i', $agent, $regs))
{
$browser = '(Internet Explorer ' .$browser_ver. ') NetCaptor';
$browser_ver = $regs[1];
}
if (preg_match('/Maxthon/i', $agent, $regs))
{
$browser = '(Internet Explorer ' .$browser_ver. ') Maxthon';
$browser_ver = '';
}
if (preg_match('/FireFox\/([^\s]+)/i', $agent, $regs))
{
$browser = 'FireFox';
$browser_ver = $regs[1];
}
if (preg_match('/Lynx\/([^\s]+)/i', $agent, $regs))
{
$browser = 'Lynx';
$browser_ver = $regs[1];
}
if ($browser != '')
{
return $browser.' '.$browser_ver;
}
else
{
return 'Unknow browser';
}
}
/**
* 获得客户端的操作系统
*
* @access private
* @return void
*/
function get_os()
{
$agent = $_SERVER['HTTP_USER_AGENT'];
$os = false;
if (eregi('win', $agent) && strpos($agent, '95'))
{
$os = 'Windows 95';
}
elseif (eregi('win 9x', $agent) && strpos($agent, '4.90'))
{
$os = 'Windows ME';
}
elseif (eregi('win', $agent) && ereg('98', $agent))
{
$os = 'Windows 98';
}
elseif (eregi('win', $agent) && eregi('nt 5.1', $agent))
{
$os = 'Windows XP';
}
elseif (eregi('win', $agent) && eregi('nt 5', $agent))
{
$os = 'Windows 2000';
}
elseif (eregi('win', $agent) && eregi('nt', $agent))
{
$os = 'Windows NT';
}
elseif (eregi('win', $agent) && ereg('32', $agent))
{
$os = 'Windows 32';
}
elseif (eregi('linux', $agent))
{
$os = 'Linux';
}
elseif (eregi('unix', $agent))
{
$os = 'Unix';
}
elseif (eregi('sun', $agent) && eregi('os', $agent))
{
$os = 'SunOS';
}
elseif (eregi('ibm', $agent) && eregi('os', $agent))
{
$os = 'IBM OS/2';
}
elseif (eregi('Mac', $agent) && eregi('PC', $agent))
{
$os = 'Macintosh';
}
elseif (eregi('PowerPC', $agent))
{
$os = 'PowerPC';
}
elseif (eregi('AIX', $agent))
{
$os = 'AIX';
}
elseif (eregi('HPUX', $agent))
{
$os = 'HPUX';
}
elseif (eregi('NetBSD', $agent))
{
$os = 'NetBSD';
}
elseif (eregi('BSD', $agent))
{
$os = 'BSD';
}
elseif (ereg('OSF1', $agent))
{
$os = 'OSF1';
}
elseif (ereg('IRIX', $agent))
{
$os = 'IRIX';
}
elseif (eregi('FreeBSD', $agent))
{
$os = 'FreeBSD';
}
elseif (eregi('teleport', $agent))
{
$os = 'teleport';
}
elseif (eregi('flashget', $agent))
{
$os = 'flashget';
}
elseif (eregi('webzip', $agent))
{
$os = 'webzip';
}
elseif (eregi('offline', $agent))
{
$os = 'offline';
}
else
{
$os = 'Unknown';
}
return $os;
}
/**
* 统计访问信息
*
* @access public
* @return void
*/
function visit_stats()
{
global $ecs, $db;
include_once(ROOT_PATH.'includes/ip/cls_ip.php');
include_once(ROOT_PATH.'includes/iconv/cls_iconv.php');
$ip_search = new ip_search();
$iconv = new Chinese();
/* 检查客户端是否存在访问统计的cookie */
$visit_times = (!empty($_COOKIE['ECS']['visit_times'])) ? intval($_COOKIE['ECS']['visit_times']) + 1 : 1;
setcookie('ECS[visit_times]', $visit_times, time()+3600*24*365, '/');
$browser = getbrowser();
$os = get_os();
$ip = real_ip();
$ip_area = $ip_search->getlocation($ip);
$area = $iconv->convert("GB2312", "UTF8", $ip_area['country']);
$keywords = '';
/* 语言 */
$pos = strpos(@$_SERVER['HTTP_ACCEPT_LANGUAGE'], ';');
$lang = ($pos !== false) ? @substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, $pos) : @$_SERVER['HTTP_ACCEPT_LANGUAGE'];
/* 来源 */
$pos = @strpos($_SERVER['HTTP_REFERER'], '/', 9);
$domain = @substr($_SERVER['HTTP_REFERER'], 0, $pos);
$path = @substr($_SERVER['HTTP_REFERER'], $pos);
/* 来源关键字 */
if (!empty($path))
{
if (strpos($domain, 'google.') !== false && preg_match('/q=([^&]*)/i', $path, $regs))
{
$keywords = urldecode($regs[1]); // google
}
if (strpos($domain, 'baidu.') !== false && preg_match('/wd=([^&]*)/i', $path, $regs))
{
$keywords = $iconv->convert('GB2312', 'UTF8', urldecode($regs[1])); // baidu
}
if (strpos($domain, 'baidu.') !== false && preg_match('/word=([^&]*)/i', $path, $regs))
{
$keywords = $iconv->convert('GB2312', 'UTF8', urldecode($regs[1])); // baidu
}
if (strpos($domain, 'yahoo.') !== false && preg_match('/p=([^&]*)/i', $path, $regs))
{
$keywords = urldecode($regs[1]); // yahoo
}
if (strpos($domain, 'msn.') !== false && preg_match('/q=([^&]*)/i', $path, $regs))
{
$keywords = urldecode($regs[1]); // msn
}
}
$sql = "INSERT INTO ".$ecs->table('stats'). " ( ".
"ip_address, visit_times, browser, system, language, area, referer_domain, ".
"referer_path, keywords, access_url, access_time".
") VALUES (".
"'$ip', '$visit_times', '$browser', '$os', '$lang', '$area', '$domain', '$path', ".
"'$keywords', '$_SERVER[PHP_SELF]', '" .time(). "')";
$db->Execute($sql) or die($db->ErrorMsg());
}
/**
* 调用网店的相关声明
*
* @access public
* @return void
*/
function assign_declaration()
{
global $smarty, $cp, $ecs, $db;
$sql = "SELECT article_id, title, file_url, open_type FROM " .$ecs->table('article'). " WHERE cat_id = 0 ORDER BY article_id";
$row = $db->getAll($sql);
$arr = array();
foreach ($row AS $key=>$article)
{
$arr[$key]['url'] = $article['open_type'] != 1 ? build_url('article', $article['article_id'], $article['title']) : trim($article['file_url']);
$arr[$key]['title'] = htmlspecialchars($article['title']);
}
return $arr;
}
/**
* 获得购物车中商品的总重量和总价格
*
* @access public
* @return array
*/
function cart_weight_price()
{
global $ecs, $db;
/* 获得购物车中商品的总重量 */
$sql = "SELECT SUM(g.goods_weight) * c.goods_number AS weight, ".
"SUM(c.goods_price) * c.goods_number AS amount ".
"FROM " .$ecs->table('cart'). " AS c ".
"LEFT JOIN " .$ecs->table('goods'). " AS g ON g.goods_id=c.goods_id ".
"WHERE c.session_id='".SESS_ID."'";
$row = $db->getRow($sql);
return $row;
}
/**
* 调用发货单查询
*
* @access public
* @return void
*/
function assign_invoice_query()
{
global $ecs, $db, $smarty;
$sql = "SELECT o.order_sn, o.invoice_no, s.shipping_code FROM " .$ecs->table('order_info'). " AS o".
" LEFT JOIN " .$ecs->table('shipping'). " AS s ON s.shipping_id = o.shipping_id".
" WHERE invoice_no > '' AND shipping_status = " .SS_SHIPPED.
" ORDER BY shipping_time DESC LIMIT 10";
$all = $db->getAll($sql);
foreach ($all AS $key=>$row)
{
$plugin = ROOT_PATH.'includes/modules/shipping/'. $row['shipping_code']. '.php';
if (file_exists($plugin))
{
include_once(ROOT_PATH.'includes/modules/shipping/'. $row['shipping_code']. '.php');
$shipping = new $row['shipping_code'];
$all[$key]['invoice_no'] = $shipping->query($row['invoice_no']);
}
}
clearstatcache();
$smarty->assign('invoice_list', $all);
}
/**
* 获得最新的文章列表。
*
* @access public
*
* @return void
*/
function assign_new_articles()
{
global $ecs, $db, $smarty, $_CFG;
$sql = "SELECT T1.article_id, T1.title, T2.cat_name , T1.add_time, T1.file_url, T1.open_type, T2.cat_id FROM ".$ecs->table('article').
" AS T1, ".$ecs->table('article_cat')." AS T2".
" WHERE T1.is_open= 1 AND T1.cat_id = T2.cat_id AND T2.cat_type = 1".
" ORDER BY T1.article_type DESC, T1.add_time DESC ";
$res= $db->SelectLimit($sql,$_CFG['article_number']);
$arr = array();
$idx = 0;
while ($row = $res->FetchRow())
{
$arr[$idx]['id'] = $row['article_id'];
$arr[$idx]['title'] = $row['title'];
$arr[$idx]['short_title'] = $_CFG['article_title_length'] > 0 ?
sub_str($row['title'], 0, $_CFG['article_title_length']) : $row['title'];
$arr[$idx]['cat_name'] = $row['cat_name'];
$arr[$idx]['add_time'] = date($_CFG['date_format'], $row['add_time']);
$arr[$idx]['url'] = $row['open_type'] != 1 ?
build_url('article', $row['article_id'], $row['title']) : trim($row['file_url']);
$arr[$idx]['cat_url'] = build_url('article_cat', $row['cat_id']);
$idx ++;
}
$smarty->assign('new_articles', $arr);
}
/**
* 获得指定用户、商品的所有标记
*
* @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 .= "AND goods_id='$goods_id'";
}
if ($user_id > 0)
{
$where .= "AND user_id='$user_id'";
}
$arr = array();
$sql = "SELECT tag_id, user_id, tag_words, COUNT(tag_id) AS tag_count".
" FROM ".$GLOBALS['ecs']->table('tag').
" WHERE 1 $where GROUP BY tag_words ORDER BY tag_count DESC, tag_id";
$res = $GLOBALS['db']->execute($sql);
while ($row = $res->fetchRow())
{
$arr[$row['tag_id']] = array('tag_id' => $row['tag_id'],
'user_id' => $row['user_id'],
'tag_words' => $row['tag_words'],
'tag_count' =>$row['tag_count']
);
}
return $arr;
}
/**
* 将需要输出到页面的插件的内容赋值给模板引擎
*
* @access public
* @return void
*/
function assign_plugins()
{
/* 获得所有已安装且需要赋值的插件 */
$sql = "SELECT code FROM ".$GLOBALS['ecs']->table('plugins')." WHERE assign = 1";
$all = $GLOBALS['db']->getAll($sql);
/* 遍历所有需要赋值的插件,并调用相应的函数 */
foreach ($all AS $key=>$val)
{
include_once(ROOT_PATH.'plugins/'.$val['code'].'/'.$val['code'].'_inc.php');
$plugin = new $val['code'];
$plugin->assign_val();
}
}
/**
* 检查指定goods_id有没有参与夺宝奇兵
*
* @access public
* @param int goods_id 商品id
*
* @return array()
*/
function snatch_goods($goods_id)
{
$cur_time = time();
$snatch = array();
$sql = "SELECT T2.snatch_id, T1.end_time FROM ".$GLOBALS['ecs']->table('activity')." AS T1 , ".$GLOBALS['ecs']->table('snatch')." AS T2 ".
"WHERE T1.activity_id = T2.activity_id AND goods_id = '$goods_id' AND start_time <= '$cur_time' AND end_time > '$cur_time' ";
$row = $GLOBALS['db']->GetRow($sql);
if($row)
{
$snatch['snatch_id'] = $row['snatch_id'];
$snatch['url'] = build_url('snatch', $row['snatch_id']);
$snatch['end_time'] = $row['end_time'];
}
return $snatch;
}
/**
* 获取指定主题某个模板的主题的动态模块
*
* @access public
* @param string $theme 模板主题
* @param string $tmp 模板名称
*
* @return array()
*/
function get_dyna_libs($theme,$tmp)
{
$tmp = substr($tmp, 0, strrpos($tmp, '.dwt'));
$sql = "SELECT region, library, sort_order, id, number, type".
" FROM " .$GLOBALS['ecs']->table('template').
" WHERE theme = '$theme' AND filename='$tmp' AND type > 0".
" ORDER BY region, library, sort_order";
$rec = $GLOBALS['db']->Execute($sql);
$dyna_libs = array();
while($row = $rec->FetchRow())
{
$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 object $smarty
* @return void
*/
function assign_group_buy()
{
$sql = "SELECT gb.*, g.goods_name, g.shop_price, g.goods_thumb, g.goods_img ".
"FROM ".$GLOBALS['ecs']->table('group_buy')." AS gb, ".$GLOBALS['ecs']->table('goods')." AS g ".
"WHERE g.goods_id = gb.goods_id ".
"AND gb.start_date <= '".time()."' AND gb.end_date >= '".time()."' ".
"ORDER BY gb.group_buy_id DESC";
$res = $GLOBALS['db']->SelectLimit($sql, $GLOBALS['_CFG']['group_goods_number']) or die($GLOBALS['db']->ErrorMsg());
$goods = array();
$idx = 0;
while ($row = $res->FetchRow())
{
$goods[$idx]['goods_id'] = $row['goods_id'];
$goods[$idx]['group_buy_id'] = $row['group_buy_id'];
$goods[$idx]['goods_name'] = $row['goods_name'];
$goods[$idx]['thumb'] = empty($row['goods_thumb']) ? $GLOBALS['_CFG']['no_picture'] : $row['goods_thumb'];
$goods[$idx]['goods_img'] = empty($row['goods_img']) ? $GLOBALS['_CFG']['no_picture'] : $row['goods_img'];
$goods[$idx]['price_ladder'] = unserialize($row['price_ladder']);
$price_ladder = $goods[$idx]['price_ladder'];
ksort($price_ladder);
$goods[$idx]['last_price'] = price_format(end($price_ladder));
$idx++;
}
$GLOBALS['smarty']->assign('lowest_price_buy', $GLOBALS['_LANG']['lowest_price_buy']);
$GLOBALS['smarty']->assign('group_buy_goods', $goods);
}
/**
* 处理上传文件,并返回上传图片名(上传失败时返回图片名为空)
*
* @access public
* @param array $upload $_FILES 数组
* @param array $type 图片所属类别,即data目录下的文件夹名
*
* @return string 上传图片名
*/
function upload_file($upload, $type)
{
if(!empty($upload['tmp_name']))
{
$name = date("Ymd");
for($i = 0; $i < 6; $i++)
{
$name .= chr(rand(97, 122));
}
$name .= substr(preg_replace("/(php|phtml|php3|php4|jsp|exe|dll|asp|cer|asa|shtml|shtm|aspx|asax|cgi|fcgi|pl)(\.|$)/i", "_\\1\\2", $upload['name']), -4);
if ($upload['type'] == 'image/png' ||
$upload['type'] == 'image/x-png' ||
$upload['type'] == 'image/jpeg' ||
$upload['type'] == 'image/pjpeg' ||
$upload['type'] == 'image/gif' ||
$upload['type'] == 'application/msword' ||
$upload['type'] == 'application/vnd.ms-excel' ||
$upload['type'] == 'text/plain' ||
$upload['type'] == 'application/x-zip-compressed' ||
$upload['type'] == 'application/vnd.ms-powerpoint' ||
$upload['type'] == 'application/pdf')
{
$target = ROOT_PATH . 'data/' . $type;
$target = $target."/".$_SESSION['user_id']. '_' .$name;
if (!move_uploaded_file($upload['tmp_name'], $target))
{
return false;
}
else
{
return $_SESSION['user_id']. '_' .$name;
}
}
else
{
return false;
}
}
}
/*------------------------------------------------------ */
//-- 以下4个smarty为注册string资源函数
/*------------------------------------------------------ */
/**
* smarty 检索资源函数
*
* @param: $tpl_name[string] 模板代码
* @param: $tpl_source[string] 模板内容
* @param: $smarty_obj[object] smarty 对象
*
* @return boolean
*/
function str_get_template ($tpl_name, &$tpl_source, &$smarty_obj)
{
$tpl_source = $tpl_name;
return true;
}
/**
* smarty 请求资源的最后修改时间函数
*
* @param: $tpl_name[string] 模板代码
* @param: $tpl_timestamp[string] UNIX 时间戳
* @param: $smarty_obj[object] smarty 对象
*
* @return boolean
*/
function str_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj)
{
$tpl_timestamp = time();
return true;
}
/**
* smarty 确认资源是否安全
*
* @param: $tpl_name[string] 模板代码
* @param: $smarty_obj[object] smarty 对象
*
* @return boolean
*/
function str_get_secure($tpl_name, &$smarty_obj)
{
/* 全部安全 */
return true;
}
/**
* smarty 确认资源是值的信任
*
* @param: $tpl_name[string] 模板代码
* @param: $smarty_obj[object] smarty 对象
*
* @return boolean
*/
function str_get_trusted($tpl_name, &$smarty_obj)
{
/* 不使用该函数 */
}
?>