Server : Apache System : Linux iZ2vcgyutqttsd1p850kl8Z 3.10.0-1160.92.1.el7.x86_64 #1 SMP Tue Jun 20 11:48:01 UTC 2023 x86_64 User : www ( 1000) PHP Version : 5.6.40 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv Directory : /www/wwwroot/saimikebio.com/mobile/ |
<?php /** * ECSHOP 夺宝奇兵前台页面 * ============================================================================ * * 版权所有 2005-2012 上海商派网络科技有限公司,并保留所有权利。 * 网站地址: http://www.ecshop.com; * ---------------------------------------------------------------------------- * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和 * 使用;不允许对程序代码以任何形式任何目的的再发布。 * ============================================================================ * $Author: liubo $ * $Id: snatch.php 17217 2011-01-19 06:29:08Z liubo $ */ define('IN_ECTOUCH', true); require(dirname(__FILE__) . '/include/init.php'); /*------------------------------------------------------ */ //-- 如果用没有指定活动id,将页面重定向到即将结束的活动 /*------------------------------------------------------ */ if (empty($_REQUEST['act'])) { //默认显示页面 $_REQUEST['act'] = 'main'; } /* 设置活动的SESSION */ if (empty($_REQUEST['id'])) { $id = get_last_snatch(); if ($id) { $page = build_uri('snatch', array('sid'=>$id)); ecs_header("Location: $page\n"); exit; } else { /* 当前没有任何可默认的活动 */ $id = 0; } } else { $id = intval($_REQUEST['id']); } /* 显示页面部分 */ if ($_REQUEST['act'] == 'main') { $goods = get_snatch($id); if ($goods) { $position = assign_ur_here(0,$goods['snatch_name']); $myprice = get_myprice($id); if ($goods['is_end']) { //如果活动已经结束,获取活动结果 $smarty->assign('result', get_snatch_result($id)); } $smarty->assign('id', $id); $smarty->assign('snatch_goods', $goods); // 竞价商品 $smarty->assign('myprice', get_myprice($id)); if ($goods['product_id'] > 0) { $goods_specifications = get_specifications_list($goods['goods_id']); $good_products = get_good_products($goods['goods_id'], 'AND product_id = ' . $goods['product_id']); $_good_products = explode('|', $good_products[0]['goods_attr']); $products_info = ''; foreach ($_good_products as $value) { $products_info .= ' ' . $goods_specifications[$value]['attr_name'] . ':' . $goods_specifications[$value]['attr_value']; } $smarty->assign('products_info', $products_info); unset($goods_specifications, $good_products, $_good_products, $products_info); } } else { show_message($_LANG['now_not_snatch']); } /* 调查 */ $vote = get_vote(); if (!empty($vote)) { $smarty->assign('vote_id', $vote['id']); $smarty->assign('vote', $vote['content']); } assign_template(); assign_dynamic('snatch'); $smarty->assign('page_title', $position['title']); $smarty->assign('ur_here', $position['ur_here']); $smarty->assign('categories', get_categories_tree()); // 分类树 $smarty->assign('helps', get_shop_help()); // 网店帮助 $smarty->assign('snatch_list', get_snatch_list()); //所有有效的夺宝奇兵列表 $smarty->assign('price_list', get_price_list($id)); $smarty->assign('promotion_info', get_promotion_info()); $smarty->assign('feed_url', ($_CFG['rewrite'] == 1) ? "feed-typesnatch.xml" : 'feed.php?type=snatch'); // RSS URL $smarty->display('snatch.dwt'); exit; } /* 最新出价列表 */ if ($_REQUEST['act'] == 'new_price_list') { $smarty->assign('price_list', get_price_list($id)); $smarty->display('library/snatch_price.lbi'); exit; } /* 用户出价处理 */ if ($_REQUEST['act'] == 'bid') { include_once(ROOT_PATH .'include/cls_json.php'); $json = new JSON(); $result = array('error'=>0, 'content'=>''); $price = isset($_POST['price']) ? floatval($_POST['price']) : 0; $price = round($price, 2); /* 测试是否登陆 */ if (empty($_SESSION['user_id'])) { $result['error'] = 1; $result['content'] = $_LANG['not_login']; die($json->encode($result)); } /* 获取活动基本信息用于校验 */ $sql = 'SELECT act_name AS snatch_name, end_time, ext_info FROM ' . $GLOBALS['ecs']->table('goods_activity') . " WHERE act_id ='$id'"; $row = $db->getRow($sql, 'SILENT'); if ($row) { $info = unserialize($row['ext_info']); if ($info) { foreach ($info as $key => $val) { $row[$key] = $val; } } } if (empty($row)) { $result['error'] = 1; $result['content'] = $db->error(); die($json->encode($result)); } if ($row['end_time']< gmtime() ) { $result['error'] = 1; $result['content'] = $_LANG['snatch_is_end']; die($json->encode($result)); } /* 检查出价是否合理 */ if ($price < $row['start_price'] || $price > $row['end_price']) { $result['error'] = 1; $result['content'] = sprintf($GLOBALS['_LANG']['not_in_range'],$row['start_price'], $row['end_price']); die($json->encode($result)); } /* 检查用户是否已经出同一价格 */ $sql = 'SELECT COUNT(*) FROM '.$GLOBALS['ecs']->table('snatch_log'). " WHERE snatch_id = '$id' AND user_id = '$_SESSION[user_id]' AND bid_price = '$price'"; if ($GLOBALS['db']->getOne($sql) > 0) { $result['error'] = 1; $result['content'] = sprintf($GLOBALS['_LANG']['also_bid'], price_format($price, false)); die($json->encode($result)); } /* 检查用户积分是否足够 */ $sql = 'SELECT pay_points FROM ' .$ecs->table('users'). " WHERE user_id = '" . $_SESSION['user_id']. "'"; $pay_points = $db->getOne($sql); if ($row['cost_points'] > $pay_points) { $result['error'] = 1; $result['content'] = $_LANG['lack_pay_points']; die($json->encode($result)); } log_account_change($_SESSION['user_id'], 0, 0, 0, 0-$row['cost_points'],sprintf($_LANG['snatch_log'], $row['snatch_name'])); //扣除用户积分 $sql = 'INSERT INTO ' .$ecs->table('snatch_log'). '(snatch_id, user_id, bid_price, bid_time) VALUES'. "('$id', '" .$_SESSION['user_id']. "', '" .$price."', " .gmtime(). ")"; $db->query($sql); $smarty->assign('myprice', get_myprice($id)); $smarty->assign('id', $id); $result['content'] = $smarty->fetch('library/snatch.lbi'); die($json->encode($result)); } /*------------------------------------------------------ */ //-- 购买商品 /*------------------------------------------------------ */ if ($_REQUEST['act'] == 'buy') { if (empty($id)) { ecs_header("Location: ./\n"); exit; } if (empty($_SESSION['user_id'])) { show_message($_LANG['not_login']); } $snatch = get_snatch($id); if (empty($snatch)) { ecs_header("Location: ./\n"); exit; } /* 未结束,不能购买 */ if (empty($snatch['is_end'])) { $page = build_uri('snatch', array('sid'=>$id)); ecs_header("Location: $page\n"); exit; } $result = get_snatch_result($id); if ($_SESSION['user_id'] != $result['user_id']) { show_message($_LANG['not_for_you']); } //检查是否已经购买过 if ($result['order_count'] > 0) { show_message($_LANG['order_placed']); } /* 处理规格属性 */ $goods_attr = ''; $goods_attr_id = ''; if ($snatch['product_id'] > 0) { $product_info = get_good_products($snatch['goods_id'], 'AND product_id = ' . $snatch['product_id']); $goods_attr_id = str_replace('|', ',', $product_info[0]['goods_attr']); $attr_list = array(); $sql = "SELECT a.attr_name, g.attr_value " . "FROM " . $ecs->table('goods_attr') . " AS g, " . $ecs->table('attribute') . " AS a " . "WHERE g.attr_id = a.attr_id " . "AND g.goods_attr_id " . db_create_in($goods_attr_id); $res = $db->query($sql); while ($row = $db->fetchRow($res)) { $attr_list[] = $row['attr_name'] . ': ' . $row['attr_value']; } $goods_attr = join('', $attr_list); } else { $snatch['product_id'] = 0; } /* 清空购物车中所有商品 */ include_once(ROOT_PATH . 'include/lib_order.php'); clear_cart(CART_SNATCH_GOODS); /* 加入购物车 */ $cart = array( 'user_id' => $_SESSION['user_id'], 'session_id' => SESS_ID, 'goods_id' => $snatch['goods_id'], 'product_id' => $snatch['product_id'], 'goods_sn' => addslashes($snatch['goods_sn']), 'goods_name' => addslashes($snatch['goods_name']), 'market_price' => $snatch['market_price'], 'goods_price' => $result['buy_price'], 'goods_number' => 1, 'goods_attr' => $goods_attr, 'goods_attr_id' => $goods_attr_id, 'is_real' => $snatch['is_real'], 'extension_code' => addslashes($snatch['extension_code']), 'parent_id' => 0, 'rec_type' => CART_SNATCH_GOODS, 'is_gift' => 0 ); $db->autoExecute($ecs->table('cart'), $cart, 'INSERT'); /* 记录购物流程类型:夺宝奇兵 */ $_SESSION['flow_type'] = CART_SNATCH_GOODS; $_SESSION['extension_code'] = 'snatch'; $_SESSION['extension_id'] = $id; /* 进入收货人页面 */ ecs_header("Location: ./flow.php?step=consignee\n"); exit; } /** * 取得用户对当前活动的所出过的价格 * * @access public * @param * * @return void */ function get_myprice($id) { $my_only_price = array(); $my_price = array(); $pay_points = 0; $bid_price = array(); if (!empty($_SESSION['user_id'])) { /* 取得用户所有价格 */ $sql = 'SELECT bid_price FROM '.$GLOBALS['ecs']->table('snatch_log'). " WHERE snatch_id = '$id' AND user_id = '$_SESSION[user_id]' ORDER BY bid_time DESC"; $my_price = $GLOBALS['db']->GetCol($sql); if ($my_price) { /* 取得用户唯一价格 */ $sql = 'SELECT bid_price , count(*) AS num FROM '.$GLOBALS['ecs']->table('snatch_log'). " WHERE snatch_id ='$id' AND bid_price " . db_create_in(join(',', $my_price)). ' GROUP BY bid_price HAVING num = 1'; $my_only_price = $GLOBALS['db']->GetCol($sql); } for ($i = 0, $count = count($my_price); $i < $count; $i++) { $bid_price[] = array('price' => price_format($my_price[$i], false), 'is_only' => in_array($my_price[$i],$my_only_price) ); } $sql = 'SELECT pay_points FROM '. $GLOBALS['ecs']->table('users')." WHERE user_id = '$_SESSION[user_id]'"; $pay_points = $GLOBALS['db']->GetOne($sql); $pay_points = $pay_points.$GLOBALS['_CFG']['integral_name']; } /* 活动结束时间 */ $sql = 'SELECT end_time FROM ' .$GLOBALS['ecs']->table('goods_activity'). " WHERE act_id = '$id' AND act_type=" . GAT_SNATCH; $end_time = $GLOBALS['db']->getOne($sql); $my_price = array( 'pay_points' => $pay_points, 'bid_price' => $bid_price, 'is_end' => gmtime() > $end_time ); return $my_price; } /** * 取得当前活动的前n个出价 * * @access public * @param int $num 列表个数(取前5个) * * @return void */ function get_price_list($id, $num = 5) { $sql = 'SELECT t1.log_id, t1.bid_price, t2.user_name FROM '.$GLOBALS['ecs']->table('snatch_log').' AS t1, '.$GLOBALS['ecs']->table('users')." AS t2 WHERE snatch_id = '$id' AND t1.user_id = t2.user_id ORDER BY t1.log_id DESC LIMIT $num"; $res = $GLOBALS['db']->query($sql); $price_list = array(); while ($row = $GLOBALS['db']->FetchRow($res)) { $price_list[] = array('bid_price'=>price_format($row['bid_price'], false),'user_name'=>$row['user_name']); } return $price_list; } /** * 取的最近的几次活动。 * * @access public * @param * * @return void */ function get_snatch_list($num = 10) { $now = gmtime(); $sql = 'SELECT act_id AS snatch_id, act_name AS snatch_name, end_time '. ' FROM ' . $GLOBALS['ecs']->table('goods_activity'). " WHERE start_time <= '$now' AND act_type=" . GAT_SNATCH . " ORDER BY end_time DESC LIMIT $num"; $snatch_list = array(); $overtime = 0; $res = $GLOBALS['db']->query($sql); while ($row = $GLOBALS['db']->FetchRow($res)) { $overtime = $row['end_time'] > $now ? 0 : 1; $snatch_list[] = array( 'snatch_id' => $row['snatch_id'], 'snatch_name' => $row['snatch_name'], 'overtime' => $overtime, 'url'=>build_uri('snatch', array('sid'=>$row['snatch_id'])) ); } return $snatch_list; } /** * 取得当前活动信息 * * @access public * * @return 活动名称 */ function get_snatch($id) { $sql = "SELECT g.goods_id, g.goods_sn, g.is_real, g.goods_name, g.extension_code, g.market_price, g.shop_price AS org_price, product_id, " . "IFNULL(mp.user_price, g.shop_price * '$_SESSION[discount]') AS shop_price, " . "g.promote_price, g.promote_start_date, g.promote_end_date, g.goods_brief, g.goods_thumb, " . "ga.act_name AS snatch_name, ga.start_time, ga.end_time, ga.ext_info, ga.act_desc AS `desc` ". "FROM " .$GLOBALS['ecs']->table('goods_activity'). " AS ga " . "LEFT JOIN " . $GLOBALS['ecs']->table('goods')." AS g " . "ON g.goods_id = ga.goods_id " . "LEFT JOIN " . $GLOBALS['ecs']->table('member_price') . " AS mp " . "ON mp.goods_id = g.goods_id AND mp.user_rank = '$_SESSION[user_rank]' " . "WHERE ga.act_id = '$id' AND g.is_delete = 0"; $goods = $GLOBALS['db']->GetRow($sql); if ($goods) { $promote_price = bargain_price($goods['promote_price'], $goods['promote_start_date'], $goods['promote_end_date']); $goods['formated_market_price'] = price_format($goods['market_price']); $goods['formated_shop_price'] = price_format($goods['shop_price']); $goods['formated_promote_price'] = ($promote_price > 0) ? price_format($promote_price) : ''; $goods['goods_thumb'] = get_image_path($goods['goods_id'], $goods['goods_thumb'], true); $goods['url'] = build_uri('goods', array('gid'=>$goods['goods_id']), $goods['goods_name']); $goods['start_time'] = local_date($GLOBALS['_CFG']['time_format'], $goods['start_time']); $info = unserialize($goods['ext_info']); if ($info) { foreach ($info as $key => $val) { $goods[$key] = $val; } $goods['is_end'] = gmtime() > $goods['end_time']; $goods['formated_start_price'] = price_format($goods['start_price']); $goods['formated_end_price'] = price_format($goods['end_price']); $goods['formated_max_price'] = price_format($goods['max_price']); } /* 将结束日期格式化为格林威治标准时间时间戳 */ $goods['gmt_end_time'] = $goods['end_time']; $goods['end_time'] = local_date($GLOBALS['_CFG']['time_format'], $goods['end_time']); $goods['snatch_time'] = sprintf($GLOBALS['_LANG']['snatch_start_time'], $goods['start_time'], $goods['end_time']); return $goods; } else { return false; } } /** * 获取最近要到期的活动id,没有则返回 0 * * @access public * @param * * @return void */ function get_last_snatch() { $now = gmtime(); $sql = 'SELECT act_id FROM ' . $GLOBALS['ecs']->table('goods_activity'). " WHERE start_time < '$now' AND end_time > '$now' AND act_type = " . GAT_SNATCH . " ORDER BY end_time ASC LIMIT 1"; return $GLOBALS['db']->GetOne($sql); } ?>