bnbweb/includes/lib_games.php

1130 lines
38 KiB
PHP
Raw Normal View History

2022-11-14 17:31:15 +00:00
<?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;
}
2022-11-14 15:49:28 +00:00
?>