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

1130 lines
40 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');
}
function maintainGame($game_code,$status){
$sql="update " . $GLOBALS['ecs']->table('games') . " set is_check=".$status." WHERE games_code = '".$game_code."' ";
$GLOBALS['db']->query($sql);
return true;
}
function getGameId($game_code){
$game_id = $GLOBALS['db']->getOne("SELECT games_id FROM " . $GLOBALS['ecs']->table('games') . " WHERE games_code = '".$game_code."' ");
return $game_id;
}
/**
* 商品推荐usort用自定义排序行数
*/
function games_sort($games_a, $games_b)
{
if ($games_a['sort_order'] == $games_b['sort_order']) {
return 0;
}
return ($games_a['sort_order'] < $games_b['sort_order']) ? -1 : 1;
}
/**
* 获得指定分类同级的所有分类以及该分类下的子分类
*
* @access public
* @param integer $cat_id 分类编号
* @return array
*/
function get_categories_tree($cat_id = 0)
{
if ($cat_id > 0)
{
$sql = 'SELECT parent_id FROM ' . $GLOBALS['ecs']->table('category') . " WHERE cat_id = '$cat_id'";
$parent_id = $GLOBALS['db']->getOne($sql);
}
else
{
$parent_id = 0;
}
/*
判断当前分类中全是是否是底级分类,
如果是取出底级分类上级分类,
如果不是取当前分类及其下的子分类
*/
$sql = 'SELECT count(*) FROM ' . $GLOBALS['ecs']->table('category') . " WHERE parent_id = '$parent_id' AND is_show = 1 ";
if ($GLOBALS['db']->getOne($sql) || $parent_id == 0)
{
/* 获取当前分类及其子分类 */
$sql = 'SELECT cat_id,cat_name ,parent_id,is_show ' .
'FROM ' . $GLOBALS['ecs']->table('category') .
"WHERE parent_id = '$parent_id' AND is_show = 1 ORDER BY sort_order ASC, cat_id ASC";
$res = $GLOBALS['db']->getAll($sql);
foreach ($res AS $row)
{
if ($row['is_show'])
{
$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('category', array('cid' => $row['cat_id']), $row['cat_name']);
//$cat_arr[$row['cat_id']]['url'] = $row['games_url'];
if (isset($row['cat_id']) != NULL)
{
$cat_arr[$row['cat_id']]['cat_id'] = get_child_tree($row['cat_id']);
}
}
}
}
if(isset($cat_arr))
{
return $cat_arr;
}
}
function get_child_tree($tree_id = 0)
{
$three_arr = array();
$sql = 'SELECT count(*) FROM ' . $GLOBALS['ecs']->table('category') . " WHERE parent_id = '$tree_id' AND is_show = 1 ";
if ($GLOBALS['db']->getOne($sql) || $tree_id == 0)
{
$child_sql = 'SELECT cat_id, cat_name, parent_id, is_show ' .
'FROM ' . $GLOBALS['ecs']->table('category') .
"WHERE parent_id = '$tree_id' AND is_show = 1 ORDER BY sort_order ASC, cat_id ASC";
$res = $GLOBALS['db']->getAll($child_sql);
foreach ($res AS $row)
{
if ($row['is_show'])
$three_arr[$row['cat_id']]['id'] = $row['cat_id'];
$three_arr[$row['cat_id']]['name'] = $row['cat_name'];
$three_arr[$row['cat_id']]['url'] = build_uri('category', array('cid' => $row['cat_id']), $row['cat_name']);
if (isset($row['cat_id']) != NULL)
{
$three_arr[$row['cat_id']]['cat_id'] = get_child_tree($row['cat_id']);
}
}
}
return $three_arr;
}
/**
* 调用当前分类的销售排行榜
*
* @access public
* @param string $cats 查询的分类
* @return array
*/
function get_top10($cats = '')
{
$cats = get_children($cats);
$where = !empty($cats) ? "AND ($cats OR " . get_extension_games($cats) . ") " : '';
/* 排行统计的时间 */
switch ($GLOBALS['_CFG']['top10_time'])
{
case 1: // 一年
$top10_time = "AND o.order_sn >= '" . date('Ymd', gmtime() - 365 * 86400) . "'";
break;
case 2: // 半年
$top10_time = "AND o.order_sn >= '" . date('Ymd', gmtime() - 180 * 86400) . "'";
break;
case 3: // 三个月
$top10_time = "AND o.order_sn >= '" . date('Ymd', gmtime() - 90 * 86400) . "'";
break;
case 4: // 一个月
$top10_time = "AND o.order_sn >= '" . date('Ymd', gmtime() - 30 * 86400) . "'";
break;
default:
$top10_time = '';
}
$sql = 'SELECT g.games_id, g.games_name, g.shop_price, g.games_thumb, SUM(og.games_number) as games_number ' .
'FROM ' . $GLOBALS['ecs']->table('games') . ' AS g, ' .
$GLOBALS['ecs']->table('order_info') . ' AS o, ' .
$GLOBALS['ecs']->table('order_games') . ' AS og ' .
"WHERE g.is_on_sale = 1 AND g.is_alone_sale = 1 AND g.is_delete = 0 $where $top10_time " ;
//判断是否启用库存库存数量是否大于0
if ($GLOBALS['_CFG']['use_storage'] == 1)
{
$sql .= " AND g.games_number > 0 ";
}
$sql .= ' AND og.order_id = o.order_id AND og.games_id = g.games_id ' .
"AND (o.order_status = '" . OS_CONFIRMED . "' OR o.order_status = '" . OS_SPLITED . "') " .
"AND (o.pay_status = '" . PS_PAYED . "' OR o.pay_status = '" . PS_PAYING . "') " .
"AND (o.shipping_status = '" . SS_SHIPPED . "' OR o.shipping_status = '" . SS_RECEIVED . "') " .
'GROUP BY g.games_id ORDER BY games_number DESC, g.games_id DESC LIMIT 10' . $GLOBALS['_CFG']['top_number'];
$arr = $GLOBALS['db']->getAll($sql);
for ($i = 0, $count = count($arr); $i < $count; $i++)
{
$arr[$i]['short_name'] = $GLOBALS['_CFG']['games_name_length'] > 0 ?
sub_str($arr[$i]['games_name'], $GLOBALS['_CFG']['games_name_length']) : $arr[$i]['games_name'];
$arr[$i]['url'] = build_uri('games', array('gid' => $arr[$i]['games_id']), $arr[$i]['games_name']);
$arr[$i]['thumb'] = get_image_path($arr[$i]['games_id'], $arr[$i]['games_thumb'],true);
$arr[$i]['price'] = price_format($arr[$i]['shop_price']);
}
return $arr;
}
/**
* 获得推荐商品
*
* @access public
* @param string $type 推荐类型,可以是 best, new, hot
* @return array
*/
function get_recommend_games()
{
$sql = 'SELECT * ' .
' FROM ' . $GLOBALS['ecs']->table('games') .
' WHERE is_on_sale = 1 and is_delete = 0 AND integral = 1 '.
' ORDER BY sort_order, last_update DESC';
$games_res = $GLOBALS['db']->getAll($sql);
//定义推荐,最新,热门,促销商品
return $games_res;
}
/**
* 获得商品的详细信息
*
* @access public
* @param integer $games_id
* @return void
*/
function get_games_info($games_id)
{
$time = gmtime();
$sql = 'SELECT g.* ' .
'FROM ' . $GLOBALS['ecs']->table('games') . ' AS g ' .
'LEFT JOIN ' . $GLOBALS['ecs']->table('category') . ' AS c ON g.cat_id = c.cat_id ' .
"WHERE g.games_id = '$games_id' AND g.is_delete = 0 " .
"GROUP BY g.games_id";
$row = $GLOBALS['db']->getRow($sql);
if ($row !== false)
{
return $row;
}
else
{
return false;
}
}
/**
* 获得商品的属性和规格
*
* @access public
* @param integer $games_id
* @return array
*/
function get_games_properties($games_id)
{
/* 对属性进行重新排序和分组 */
$sql = "SELECT attr_group ".
"FROM " . $GLOBALS['ecs']->table('games_type') . " AS gt, " . $GLOBALS['ecs']->table('games') . " AS g ".
"WHERE g.games_id='$games_id' AND gt.cat_id=g.games_type";
$grp = $GLOBALS['db']->getOne($sql);
if (!empty($grp))
{
$groups = explode("\n", strtr($grp, "\r", ''));
}
/* 获得商品的规格 */
$sql = "SELECT a.attr_id, a.attr_name, a.attr_group, a.is_linked, a.attr_type, ".
"g.games_attr_id, g.attr_value, g.attr_price " .
'FROM ' . $GLOBALS['ecs']->table('games_attr') . ' AS g ' .
'LEFT JOIN ' . $GLOBALS['ecs']->table('attribute') . ' AS a ON a.attr_id = g.attr_id ' .
"WHERE g.games_id = '$games_id' " .
'ORDER BY a.sort_order, g.attr_price, g.games_attr_id';
$res = $GLOBALS['db']->getAll($sql);
$arr['pro'] = array(); // 属性
$arr['spe'] = array(); // 规格
$arr['lnk'] = array(); // 关联的属性
foreach ($res AS $row)
{
$row['attr_value'] = str_replace("\n", '<br />', $row['attr_value']);
if ($row['attr_type'] == 0)
{
$group = (isset($groups[$row['attr_group']])) ? $groups[$row['attr_group']] : $GLOBALS['_LANG']['games_attr'];
$arr['pro'][$group][$row['attr_id']]['name'] = $row['attr_name'];
$arr['pro'][$group][$row['attr_id']]['value'] = $row['attr_value'];
}
else
{
$arr['spe'][$row['attr_id']]['attr_type'] = $row['attr_type'];
$arr['spe'][$row['attr_id']]['name'] = $row['attr_name'];
$arr['spe'][$row['attr_id']]['values'][] = array(
'label' => $row['attr_value'],
'price' => $row['attr_price'],
'format_price' => price_format(abs($row['attr_price']), false),
'id' => $row['games_attr_id']);
}
if ($row['is_linked'] == 1)
{
/* 如果该属性需要关联,先保存下来 */
$arr['lnk'][$row['attr_id']]['name'] = $row['attr_name'];
$arr['lnk'][$row['attr_id']]['value'] = $row['attr_value'];
}
}
return $arr;
}
/**
* 获得属性相同的商品
*
* @access public
* @param array $attr // 包含了属性名称,ID的数组
* @return array
*/
function get_same_attribute_games($attr)
{
$lnk = array();
if (!empty($attr))
{
foreach ($attr['lnk'] AS $key => $val)
{
$lnk[$key]['title'] = sprintf($GLOBALS['_LANG']['same_attrbiute_games'], $val['name'], $val['value']);
/* 查找符合条件的商品 */
$sql = 'SELECT g.games_id, g.games_name, g.games_thumb, g.games_img, g.shop_price AS org_price, ' .
"IFNULL(mp.user_price, g.shop_price * '$_SESSION[discount]') AS shop_price, ".
'g.market_price, g.promote_price, g.promote_start_date, g.promote_end_date ' .
'FROM ' . $GLOBALS['ecs']->table('games') . ' AS g ' .
'LEFT JOIN ' . $GLOBALS['ecs']->table('games_attr') . ' as a ON g.games_id = a.games_id ' .
"LEFT JOIN " . $GLOBALS['ecs']->table('member_price') . " AS mp ".
"ON mp.games_id = g.games_id AND mp.user_rank = '$_SESSION[user_rank]' ".
"WHERE a.attr_id = '$key' AND g.is_on_sale=1 AND a.attr_value = '$val[value]' AND g.games_id <> '$_REQUEST[id]' " .
'LIMIT ' . $GLOBALS['_CFG']['attr_related_number'];
$res = $GLOBALS['db']->getAll($sql);
foreach ($res AS $row)
{
$lnk[$key]['games'][$row['games_id']]['games_id'] = $row['games_id'];
$lnk[$key]['games'][$row['games_id']]['games_name'] = $row['games_name'];
$lnk[$key]['games'][$row['games_id']]['short_name'] = $GLOBALS['_CFG']['games_name_length'] > 0 ?
sub_str($row['games_name'], $GLOBALS['_CFG']['games_name_length']) : $row['games_name'];
$lnk[$key]['games'][$row['games_id']]['games_thumb'] = (empty($row['games_thumb'])) ? $GLOBALS['_CFG']['no_picture'] : $row['games_thumb'];
$lnk[$key]['games'][$row['games_id']]['market_price'] = price_format($row['market_price']);
$lnk[$key]['games'][$row['games_id']]['shop_price'] = price_format($row['shop_price']);
$lnk[$key]['games'][$row['games_id']]['promote_price'] = bargain_price($row['promote_price'],
$row['promote_start_date'], $row['promote_end_date']);
$lnk[$key]['games'][$row['games_id']]['url'] = build_uri('games', array('gid' => $row['games_id']), $row['games_name']);
}
}
}
return $lnk;
}
/**
* 获得指定商品的相册
*
* @access public
* @param integer $games_id
* @return array
*/
function get_games_gallery($games_id)
{
$sql = 'SELECT img_id, img_url, thumb_url, img_desc' .
' FROM ' . $GLOBALS['ecs']->table('games_gallery') .
" WHERE games_id = '$games_id' LIMIT " . $GLOBALS['_CFG']['games_gallery_number'];
$row = $GLOBALS['db']->getAll($sql);
/* 格式化相册图片路径 */
foreach($row as $key => $gallery_img)
{
$row[$key]['img_url'] = get_image_path($games_id, $gallery_img['img_url'], false, 'gallery');
$row[$key]['thumb_url'] = get_image_path($games_id, $gallery_img['thumb_url'], true, 'gallery');
}
return $row;
}
/**
* 获得指定分类下的商品
*
* @access public
* @param integer $cat_id 分类ID
* @param integer $num 数量
* @param string $from 来自web/wap的调用
* @param string $order_rule 指定商品排序规则
* @return array
*/
function assign_cat_games($cat_id, $num = 0, $from = 'web', $order_rule = '')
{
$children = get_children($cat_id);
$sql = 'SELECT g.games_id, g.games_name, g.market_price, g.shop_price AS org_price, ' .
"IFNULL(mp.user_price, g.shop_price * '$_SESSION[discount]') AS shop_price, ".
'g.promote_price, promote_start_date, promote_end_date, g.games_brief, g.games_thumb, g.games_img ' .
"FROM " . $GLOBALS['ecs']->table('games') . ' AS g '.
"LEFT JOIN " . $GLOBALS['ecs']->table('member_price') . " AS mp ".
"ON mp.games_id = g.games_id AND mp.user_rank = '$_SESSION[user_rank]' ".
'WHERE g.is_on_sale = 1 AND g.is_alone_sale = 1 AND '.
'g.is_delete = 0 AND (' . $children . 'OR ' . get_extension_games($children) . ') ';
$order_rule = empty($order_rule) ? 'ORDER BY g.sort_order, g.games_id DESC' : $order_rule;
$sql .= $order_rule;
if ($num > 0)
{
$sql .= ' LIMIT ' . $num;
}
$res = $GLOBALS['db']->getAll($sql);
$games = array();
foreach ($res AS $idx => $row)
{
if ($row['promote_price'] > 0)
{
$promote_price = bargain_price($row['promote_price'], $row['promote_start_date'], $row['promote_end_date']);
$games[$idx]['promote_price'] = $promote_price > 0 ? price_format($promote_price) : '';
}
else
{
$games[$idx]['promote_price'] = '';
}
$games[$idx]['id'] = $row['games_id'];
$games[$idx]['name'] = $row['games_name'];
$games[$idx]['brief'] = $row['games_brief'];
$games[$idx]['market_price'] = price_format($row['market_price']);
$games[$idx]['short_name'] = $GLOBALS['_CFG']['games_name_length'] > 0 ?
sub_str($row['games_name'], $GLOBALS['_CFG']['games_name_length']) : $row['games_name'];
$games[$idx]['shop_price'] = price_format($row['shop_price']);
$games[$idx]['thumb'] = get_image_path($row['games_id'], $row['games_thumb'], true);
$games[$idx]['games_img'] = get_image_path($row['games_id'], $row['games_img']);
$games[$idx]['url'] = build_uri('games', array('gid' => $row['games_id']), $row['games_name']);
}
if ($from == 'web')
{
$GLOBALS['smarty']->assign('cat_games_' . $cat_id, $games);
}
elseif ($from == 'wap')
{
$cat['games'] = $games;
}
/* 分类信息 */
$sql = 'SELECT cat_name FROM ' . $GLOBALS['ecs']->table('category') . " WHERE cat_id = '$cat_id'";
$cat['name'] = $GLOBALS['db']->getOne($sql);
$cat['url'] = build_uri('category', array('cid' => $cat_id), $cat['name']);
$cat['id'] = $cat_id;
return $cat;
}
/**
* 获得指定的品牌下的商品
*
* @access public
* @param integer $brand_id 品牌的ID
* @param integer $num 数量
* @param integer $cat_id 分类编号
* @param string $order_rule 指定商品排序规则
* @return void
*/
function assign_brand_games($brand_id, $num = 0, $cat_id = 0,$order_rule = '')
{
$sql = 'SELECT g.games_id, g.games_name, g.market_price, g.shop_price AS org_price, ' .
"IFNULL(mp.user_price, g.shop_price * '$_SESSION[discount]') AS shop_price, ".
'g.promote_price, g.promote_start_date, g.promote_end_date, g.games_brief, g.games_thumb, g.games_img ' .
'FROM ' . $GLOBALS['ecs']->table('games') . ' AS g ' .
"LEFT JOIN " . $GLOBALS['ecs']->table('member_price') . " AS mp ".
"ON mp.games_id = g.games_id AND mp.user_rank = '$_SESSION[user_rank]' ".
"WHERE g.is_on_sale = 1 AND g.is_alone_sale = 1 AND g.is_delete = 0 AND g.brand_id = '$brand_id'";
if ($cat_id > 0)
{
$sql .= get_children($cat_id);
}
$order_rule = empty($order_rule) ? ' ORDER BY g.sort_order, g.games_id DESC' : $order_rule;
$sql .= $order_rule;
if ($num > 0)
{
$res = $GLOBALS['db']->selectLimit($sql, $num);
}
else
{
$res = $GLOBALS['db']->query($sql);
}
$idx = 0;
$games = array();
while ($row = $GLOBALS['db']->fetchRow($res))
{
if ($row['promote_price'] > 0)
{
$promote_price = bargain_price($row['promote_price'], $row['promote_start_date'], $row['promote_end_date']);
}
else
{
$promote_price = 0;
}
$games[$idx]['id'] = $row['games_id'];
$games[$idx]['name'] = $row['games_name'];
$games[$idx]['short_name'] = $GLOBALS['_CFG']['games_name_length'] > 0 ?
sub_str($row['games_name'], $GLOBALS['_CFG']['games_name_length']) : $row['games_name'];
$games[$idx]['market_price'] = price_format($row['market_price']);
$games[$idx]['shop_price'] = price_format($row['shop_price']);
$games[$idx]['promote_price'] = $promote_price > 0 ? price_format($promote_price) : '';
$games[$idx]['brief'] = $row['games_brief'];
$games[$idx]['thumb'] = get_image_path($row['games_id'], $row['games_thumb'], true);
$games[$idx]['games_img'] = get_image_path($row['games_id'], $row['games_img']);
$games[$idx]['url'] = build_uri('games', array('gid' => $row['games_id']), $row['games_name']);
$idx++;
}
/* 分类信息 */
$sql = 'SELECT brand_name FROM ' . $GLOBALS['ecs']->table('brand') . " WHERE brand_id = '$brand_id'";
$brand['id'] = $brand_id;
$brand['name'] = $GLOBALS['db']->getOne($sql);
$brand['url'] = build_uri('brand', array('bid' => $brand_id), $brand['name']);
$brand_games = array('brand' => $brand, 'games' => $games);
return $brand_games;
}
/**
* 获得所有扩展分类属于指定分类的所有商品ID
*
* @access public
* @param string $cat_id 分类查询字符串
* @return string
*/
function get_extension_games($cats)
{
$extension_games_array = '';
$sql = 'SELECT games_id FROM ' . $GLOBALS['ecs']->table('games_cat') . " AS g WHERE $cats";
$extension_games_array = $GLOBALS['db']->getCol($sql);
return db_create_in($extension_games_array, 'g.games_id');
}
/**
* 判断某个商品是否正在特价促销期
*
* @access public
* @param float $price 促销价格
* @param string $start 促销开始日期
* @param string $end 促销结束日期
* @return float 如果还在促销期则返回促销价否则返回0
*/
function bargain_price($price, $start, $end)
{
if ($price == 0)
{
return 0;
}
else
{
$time = gmtime();
if ($time >= $start && $time <= $end)
{
return $price;
}
else
{
return 0;
}
}
}
/**
* 获得指定的规格的价格
*
* @access public
* @param mix $spec 规格ID的数组或者逗号分隔的字符串
* @return void
*/
function spec_price($spec)
{
if (!empty($spec))
{
if(is_array($spec))
{
foreach($spec as $key=>$val)
{
$spec[$key]=addslashes($val);
}
}
else
{
$spec=addslashes($spec);
}
$where = db_create_in($spec, 'games_attr_id');
$sql = 'SELECT SUM(attr_price) AS attr_price FROM ' . $GLOBALS['ecs']->table('games_attr') . " WHERE $where";
$price = floatval($GLOBALS['db']->getOne($sql));
}
else
{
$price = 0;
}
return $price;
}
/**
* 取得团购活动信息
* @param int $group_buy_id 团购活动id
* @param int $current_num 本次购买数量(计算当前价时要加上的数量)
* @return array
* status 状态:
*/
function group_buy_info($group_buy_id, $current_num = 0)
{
/* 取得团购活动信息 */
$group_buy_id = intval($group_buy_id);
$sql = "SELECT *, act_id AS group_buy_id, act_desc AS group_buy_desc, start_time AS start_date, end_time AS end_date " .
"FROM " . $GLOBALS['ecs']->table('games_activity') .
"WHERE act_id = '$group_buy_id' " .
"AND act_type = '" . GAT_GROUP_BUY . "'";
$group_buy = $GLOBALS['db']->getRow($sql);
/* 如果为空,返回空数组 */
if (empty($group_buy))
{
return array();
}
$ext_info = unserialize($group_buy['ext_info']);
$group_buy = array_merge($group_buy, $ext_info);
/* 格式化时间 */
$group_buy['formated_start_date'] = local_date('Y-m-d H:i', $group_buy['start_time']);
$group_buy['formated_end_date'] = local_date('Y-m-d H:i', $group_buy['end_time']);
/* 格式化保证金 */
$group_buy['formated_deposit'] = price_format($group_buy['deposit'], false);
/* 处理价格阶梯 */
$price_ladder = $group_buy['price_ladder'];
if (!is_array($price_ladder) || empty($price_ladder))
{
$price_ladder = array(array('amount' => 0, 'price' => 0));
}
else
{
foreach ($price_ladder as $key => $amount_price)
{
$price_ladder[$key]['formated_price'] = price_format($amount_price['price'], false);
}
}
$group_buy['price_ladder'] = $price_ladder;
/* 统计信息 */
$stat = group_buy_stat($group_buy_id, $group_buy['deposit']);
$group_buy = array_merge($group_buy, $stat);
/* 计算当前价 */
$cur_price = $price_ladder[0]['price']; // 初始化
$cur_amount = $stat['valid_games'] + $current_num; // 当前数量
foreach ($price_ladder as $amount_price)
{
if ($cur_amount >= $amount_price['amount'])
{
$cur_price = $amount_price['price'];
}
else
{
break;
}
}
$group_buy['cur_price'] = $cur_price;
$group_buy['formated_cur_price'] = price_format($cur_price, false);
/* 最终价 */
$group_buy['trans_price'] = $group_buy['cur_price'];
$group_buy['formated_trans_price'] = $group_buy['formated_cur_price'];
$group_buy['trans_amount'] = $group_buy['valid_games'];
/* 状态 */
$group_buy['status'] = group_buy_status($group_buy);
if (isset($GLOBALS['_LANG']['gbs'][$group_buy['status']]))
{
$group_buy['status_desc'] = $GLOBALS['_LANG']['gbs'][$group_buy['status']];
}
$group_buy['start_time'] = $group_buy['formated_start_date'];
$group_buy['end_time'] = $group_buy['formated_end_date'];
return $group_buy;
}
/*
* 取得某团购活动统计信息
* @param int $group_buy_id 团购活动id
* @param float $deposit 保证金
* @return array 统计信息
* total_order 总订单数
* total_games 总商品数
* valid_order 有效订单数
* valid_games 有效商品数
*/
function group_buy_stat($group_buy_id, $deposit)
{
$group_buy_id = intval($group_buy_id);
/* 取得团购活动商品ID */
$sql = "SELECT games_id " .
"FROM " . $GLOBALS['ecs']->table('games_activity') .
"WHERE act_id = '$group_buy_id' " .
"AND act_type = '" . GAT_GROUP_BUY . "'";
$group_buy_games_id = $GLOBALS['db']->getOne($sql);
/* 取得总订单数和总商品数 */
$sql = "SELECT COUNT(*) AS total_order, SUM(g.games_number) AS total_games " .
"FROM " . $GLOBALS['ecs']->table('order_info') . " AS o, " .
$GLOBALS['ecs']->table('order_games') . " AS g " .
" WHERE o.order_id = g.order_id " .
"AND o.extension_code = 'group_buy' " .
"AND o.extension_id = '$group_buy_id' " .
"AND g.games_id = '$group_buy_games_id' " .
"AND (order_status = '" . OS_CONFIRMED . "' OR order_status = '" . OS_UNCONFIRMED . "')";
$stat = $GLOBALS['db']->getRow($sql);
if ($stat['total_order'] == 0)
{
$stat['total_games'] = 0;
}
/* 取得有效订单数和有效商品数 */
$deposit = floatval($deposit);
if ($deposit > 0 && $stat['total_order'] > 0)
{
$sql .= " AND (o.money_paid + o.surplus) >= '$deposit'";
$row = $GLOBALS['db']->getRow($sql);
$stat['valid_order'] = $row['total_order'];
if ($stat['valid_order'] == 0)
{
$stat['valid_games'] = 0;
}
else
{
$stat['valid_games'] = $row['total_games'];
}
}
else
{
$stat['valid_order'] = $stat['total_order'];
$stat['valid_games'] = $stat['total_games'];
}
return $stat;
}
/**
* 获得团购的状态
*
* @access public
* @param array
* @return integer
*/
function group_buy_status($group_buy)
{
$now = gmtime();
if ($group_buy['is_finished'] == 0)
{
/* 未处理 */
if ($now < $group_buy['start_time'])
{
$status = GBS_PRE_START;
}
elseif ($now > $group_buy['end_time'])
{
$status = GBS_FINISHED;
}
else
{
if ($group_buy['restrict_amount'] == 0 || $group_buy['valid_games'] < $group_buy['restrict_amount'])
{
$status = GBS_UNDER_WAY;
}
else
{
$status = GBS_FINISHED;
}
}
}
elseif ($group_buy['is_finished'] == GBS_SUCCEED)
{
/* 已处理,团购成功 */
$status = GBS_SUCCEED;
}
elseif ($group_buy['is_finished'] == GBS_FAIL)
{
/* 已处理,团购失败 */
$status = GBS_FAIL;
}
return $status;
}
/**
* 取得拍卖活动信息
* @param int $act_id 活动id
* @return array
*/
function auction_info($act_id, $config = false)
{
$sql = "SELECT * FROM " . $GLOBALS['ecs']->table('games_activity') . " WHERE act_id = '$act_id'";
$auction = $GLOBALS['db']->getRow($sql);
if ($auction['act_type'] != GAT_AUCTION)
{
return array();
}
$auction['status_no'] = auction_status($auction);
if ($config == true)
{
$auction['start_time'] = local_date('Y-m-d H:i', $auction['start_time']);
$auction['end_time'] = local_date('Y-m-d H:i', $auction['end_time']);
}
else
{
$auction['start_time'] = local_date($GLOBALS['_CFG']['time_format'], $auction['start_time']);
$auction['end_time'] = local_date($GLOBALS['_CFG']['time_format'], $auction['end_time']);
}
$ext_info = unserialize($auction['ext_info']);
$auction = array_merge($auction, $ext_info);
$auction['formated_start_price'] = price_format($auction['start_price']);
$auction['formated_end_price'] = price_format($auction['end_price']);
$auction['formated_amplitude'] = price_format($auction['amplitude']);
$auction['formated_deposit'] = price_format($auction['deposit']);
/* 查询出价用户数和最后出价 */
$sql = "SELECT COUNT(DISTINCT bid_user) FROM " . $GLOBALS['ecs']->table('auction_log') .
" WHERE act_id = '$act_id'";
$auction['bid_user_count'] = $GLOBALS['db']->getOne($sql);
if ($auction['bid_user_count'] > 0)
{
$sql = "SELECT a.*, u.user_name " .
"FROM " . $GLOBALS['ecs']->table('auction_log') . " AS a, " .
$GLOBALS['ecs']->table('users') . " AS u " .
"WHERE a.bid_user = u.user_id " .
"AND act_id = '$act_id' " .
"ORDER BY a.log_id DESC";
$row = $GLOBALS['db']->getRow($sql);
$row['formated_bid_price'] = price_format($row['bid_price'], false);
$row['bid_time'] = local_date($GLOBALS['_CFG']['time_format'], $row['bid_time']);
$auction['last_bid'] = $row;
}
/* 查询已确认订单数 */
if ($auction['status_no'] > 1)
{
$sql = "SELECT COUNT(*)" .
" FROM " . $GLOBALS['ecs']->table('order_info') .
" WHERE extension_code = 'auction'" .
" AND extension_id = '$act_id'" .
" AND order_status " . db_create_in(array(OS_CONFIRMED, OS_UNCONFIRMED));
$auction['order_count'] = $GLOBALS['db']->getOne($sql);
}
else
{
$auction['order_count'] = 0;
}
/* 当前价 */
$auction['current_price'] = isset($auction['last_bid']) ? $auction['last_bid']['bid_price'] : $auction['start_price'];
$auction['formated_current_price'] = price_format($auction['current_price'], false);
return $auction;
}
/**
* 取得拍卖活动出价记录
* @param int $act_id 活动id
* @return array
*/
function auction_log($act_id)
{
$log = array();
$sql = "SELECT a.*, u.user_name " .
"FROM " . $GLOBALS['ecs']->table('auction_log') . " AS a," .
$GLOBALS['ecs']->table('users') . " AS u " .
"WHERE a.bid_user = u.user_id " .
"AND act_id = '$act_id' " .
"ORDER BY a.log_id DESC";
$res = $GLOBALS['db']->query($sql);
while ($row = $GLOBALS['db']->fetchRow($res))
{
$row['bid_time'] = local_date($GLOBALS['_CFG']['time_format'], $row['bid_time']);
$row['formated_bid_price'] = price_format($row['bid_price'], false);
$log[] = $row;
}
return $log;
}
/**
* 计算拍卖活动状态(注意参数一定是原始信息)
* @param array $auction 拍卖活动原始信息
* @return int
*/
function auction_status($auction)
{
$now = gmtime();
if ($auction['is_finished'] == 0)
{
if ($now < $auction['start_time'])
{
return PRE_START; // 未开始
}
elseif ($now > $auction['end_time'])
{
return FINISHED; // 已结束,未处理
}
else
{
return UNDER_WAY; // 进行中
}
}
elseif ($auction['is_finished'] == 1)
{
return FINISHED; // 已结束,未处理
}
else
{
return SETTLED; // 已结束,已处理
}
}
/**
* 取得商品信息
* @param int $games_id 商品id
* @return array
*/
function games_info($games_id)
{
$sql = "SELECT g.*, b.brand_name " .
"FROM " . $GLOBALS['ecs']->table('games') . " AS g " .
"LEFT JOIN " . $GLOBALS['ecs']->table('brand') . " AS b ON g.brand_id = b.brand_id " .
"WHERE g.games_id = '$games_id'";
$row = $GLOBALS['db']->getRow($sql);
if (!empty($row))
{
/* 修正重量显示 */
$row['games_weight'] = (intval($row['games_weight']) > 0) ?
$row['games_weight'] . $GLOBALS['_LANG']['kilogram'] :
($row['games_weight'] * 1000) . $GLOBALS['_LANG']['gram'];
/* 修正图片 */
$row['games_img'] = get_image_path($games_id, $row['games_img']);
}
return $row;
}
/**
* 取得优惠活动信息
* @param int $act_id 活动id
* @return array
*/
function favourable_info($act_id)
{
$sql = "SELECT * FROM " . $GLOBALS['ecs']->table('favourable_activity') .
" WHERE act_id = '$act_id'";
$row = $GLOBALS['db']->getRow($sql);
if (!empty($row))
{
$row['start_time'] = local_date($GLOBALS['_CFG']['time_format'], $row['start_time']);
$row['end_time'] = local_date($GLOBALS['_CFG']['time_format'], $row['end_time']);
$row['formated_min_amount'] = price_format($row['min_amount']);
$row['formated_max_amount'] = price_format($row['max_amount']);
$row['content'] = $row['content'];
if ($row['act_type'] == FAT_games)
{
$row['act_type_ext'] = round($row['act_type_ext']);
}
}
return $row;
}
/**
* 批发信息
* @param int $act_id 活动id
* @return array
*/
function wholesale_info($act_id)
{
$sql = "SELECT * FROM " . $GLOBALS['ecs']->table('wholesale') .
" WHERE act_id = '$act_id'";
$row = $GLOBALS['db']->getRow($sql);
if (!empty($row))
{
$row['price_list'] = unserialize($row['prices']);
}
return $row;
}
/**
* 添加商品名样式
* @param string $games_name 商品名称
* @param string $style 样式参数
* @return string
*/
function add_style($games_name, $style)
{
$games_style_name = $games_name;
$arr = explode('+', $style);
$font_color = !empty($arr[0]) ? $arr[0] : '';
$font_style = !empty($arr[1]) ? $arr[1] : '';
if ($font_color!='')
{
$games_style_name = '<font color=' . $font_color . '>' . $games_style_name . '</font>';
}
if ($font_style != '')
{
$games_style_name = '<' . $font_style .'>' . $games_style_name . '</' . $font_style . '>';
}
return $games_style_name;
}
/**
* 取得商品属性
* @param int $games_id 商品id
* @return array
*/
function get_games_attr($games_id)
{
$attr_list = array();
$sql = "SELECT a.attr_id, a.attr_name " .
"FROM " . $GLOBALS['ecs']->table('games') . " AS g, " . $GLOBALS['ecs']->table('attribute') . " AS a " .
"WHERE g.games_id = '$games_id' " .
"AND g.games_type = a.cat_id " .
"AND a.attr_type = 1";
$attr_id_list = $GLOBALS['db']->getCol($sql);
$res = $GLOBALS['db']->query($sql);
while ($attr = $GLOBALS['db']->fetchRow($res))
{
if (defined('ECS_ADMIN'))
{
$attr['games_attr_list'] = array(0 => $GLOBALS['_LANG']['select_please']);
}
else
{
$attr['games_attr_list'] = array();
}
$attr_list[$attr['attr_id']] = $attr;
}
$sql = "SELECT attr_id, games_attr_id, attr_value " .
"FROM " . $GLOBALS['ecs']->table('games_attr') .
" WHERE games_id = '$games_id' " .
"AND attr_id " . db_create_in($attr_id_list);
$res = $GLOBALS['db']->query($sql);
while ($games_attr = $GLOBALS['db']->fetchRow($res))
{
$attr_list[$games_attr['attr_id']]['games_attr_list'][$games_attr['games_attr_id']] = $games_attr['attr_value'];
}
return $attr_list;
}
/**
* 获得购物车中商品的配件
*
* @access public
* @param array $games_list
* @return array
*/
function get_games_fittings($games_list = array())
{
$temp_index = 0;
$arr = array();
$sql = 'SELECT gg.parent_id, ggg.games_name AS parent_name, gg.games_id, gg.games_price, g.games_name, g.games_thumb, g.games_img, g.shop_price AS org_price, ' .
"IFNULL(mp.user_price, g.shop_price * '$_SESSION[discount]') AS shop_price ".
'FROM ' . $GLOBALS['ecs']->table('group_games') . ' AS gg ' .
'LEFT JOIN ' . $GLOBALS['ecs']->table('games') . 'AS g ON g.games_id = gg.games_id ' .
"LEFT JOIN " . $GLOBALS['ecs']->table('member_price') . " AS mp ".
"ON mp.games_id = gg.games_id AND mp.user_rank = '$_SESSION[user_rank]' ".
"LEFT JOIN " . $GLOBALS['ecs']->table('games') . " AS ggg ON ggg.games_id = gg.parent_id ".
"WHERE gg.parent_id " . db_create_in($games_list) . " AND g.is_delete = 0 AND g.is_on_sale = 1 ".
"ORDER BY gg.parent_id, gg.games_id";
$res = $GLOBALS['db']->query($sql);
while ($row = $GLOBALS['db']->fetchRow($res))
{
$arr[$temp_index]['parent_id'] = $row['parent_id'];//配件的基本件ID
$arr[$temp_index]['parent_name'] = $row['parent_name'];//配件的基本件的名称
$arr[$temp_index]['parent_short_name'] = $GLOBALS['_CFG']['games_name_length'] > 0 ?
sub_str($row['parent_name'], $GLOBALS['_CFG']['games_name_length']) : $row['parent_name'];//配件的基本件显示的名称
$arr[$temp_index]['games_id'] = $row['games_id'];//配件的商品ID
$arr[$temp_index]['games_name'] = $row['games_name'];//配件的名称
$arr[$temp_index]['short_name'] = $GLOBALS['_CFG']['games_name_length'] > 0 ?
sub_str($row['games_name'], $GLOBALS['_CFG']['games_name_length']) : $row['games_name'];//配件显示的名称
$arr[$temp_index]['fittings_price'] = price_format($row['games_price']);//配件价格
$arr[$temp_index]['shop_price'] = price_format($row['shop_price']);//配件原价格
$arr[$temp_index]['games_thumb'] = get_image_path($row['games_id'], $row['games_thumb'], true);
$arr[$temp_index]['games_img'] = get_image_path($row['games_id'], $row['games_img']);
$arr[$temp_index]['url'] = build_uri('games', array('gid'=>$row['games_id']), $row['games_name']);
$temp_index ++;
}
return $arr;
}
/**
* 取指定规格的货品信息
*
* @access public
* @param string $games_id
* @param array $spec_games_attr_id
* @return array
*/
function get_products_info($games_id, $spec_games_attr_id)
{
$return_array = array();
if (empty($spec_games_attr_id) || !is_array($spec_games_attr_id) || empty($games_id))
{
return $return_array;
}
$games_attr_array = sort_games_attr_id_array($spec_games_attr_id);
if(isset($games_attr_array['sort']))
{
$games_attr = implode('|', $games_attr_array['sort']);
$sql = "SELECT * FROM " .$GLOBALS['ecs']->table('products'). " WHERE games_id = '$games_id' AND games_attr = '$games_attr' LIMIT 0, 1";
$return_array = $GLOBALS['db']->getRow($sql);
}
return $return_array;
}
?>