You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

727 lines
26 KiB
PHTML

2 years ago
<?php
namespace Admin\Controller;
use User\Api\UserApi as UserApi;
use OSS\OssClient;
use OSS\Core\OSsException;
use Qiniu\Storage\BucketManager;
use Qiniu\Auth;
use Think\Controller;
use BaiduBce\BceClientConfigOptions;
use BaiduBce\Util\Time;
use BaiduBce\Util\MimeTypes;
use BaiduBce\Http\HttpHeaders;
use BaiduBce\Services\Bos\BosClient;
use BaiduBce\Services\Bos\CannedAcl;
use BaiduBce\Services\Bos\BosOptions;
use BaiduBce\Auth\SignOptions;
use BaiduBce\Log\LogFactory;
/**
* 后台首页控制器
* @author 麦当苗儿 <zuojiazi@vip.qq.com>
*/
class GameController extends ThinkController
{
//private $table_name="Game";
const model_name = 'game';
/**
*游戏信息列表
*/
public function lists()
{
if (isset($_REQUEST['game_name'])) {
$extend['game_name'] = $_REQUEST['game_name'];
unset($_REQUEST['game_name']);
}
if (isset($_REQUEST['sdk_version1'])) {
$extend['sdk_version'] = $_REQUEST['sdk_version1'];
unset($_REQUEST['sdk_version1']);
}
if (isset($_REQUEST['recommend_status'])) {
$extend['recommend_status'] = $_REQUEST['recommend_status'];
unset($_REQUEST['recommend_status']);
}
if (isset($_REQUEST['game_status'])) {
$extend['game_status'] = $_REQUEST['game_status'];
unset($_REQUEST['game_status']);
}
if (isset($_REQUEST['apply_status'])) {
$extend['apply_status'] = $_REQUEST['apply_status'];
unset($_REQUEST['apply_status']);
}
if (isset($_REQUEST['online_status'])) {
$extend['online_status'] = $_REQUEST['online_status'];
unset($_REQUEST['online_status']);
}
if ($_GET['type'] == 1 || $_GET['type'] == '') {
//$extend['apply_status']=1;
$extend['developers'] = array('EQ', 0);
} else {
$extend['developers'] = array('GT', 0);
$this->assign('show_status', 1);
}
$extend['order'] = 'sort desc, id desc';
//$extend['for_show_pic_list']='icon';//列表显示图片
$this->m_title = '游戏列表';
$this->assign('commonset', M('Kuaijieicon')->where(['url' => 'Game/lists', 'status' => 1])->find());
parent::lists(self::model_name, $_GET["p"], $extend);
}
public function get_game_set()
{
$map["game_id"] = $_REQUEST['game_id'];
$find = M('game_set', 'tab_')->where($map)->find();
$find['mdaccess_key'] = get_ss($find['access_key']);
echo json_encode(array("status" => 1, "data" => $find));
}
public function get_game_source()
{
$map["game_id"] = $_REQUEST['game_id'];
$data = M('GameSource', 'tab_')->field('file_url')->where($map)->find();
if (empty($data)) {
$result = array('status' => 0, 'dow_url' => '');
} else {
$result = array('status' => 1, 'dow_url' => $data['file_url']);
}
echo json_encode($result);
}
/**
*游戏原包列表
*/
public function source()
{
$extend = array('field_time' => 'create_time');
parent::lists('Source', $_GET["p"], $extend);
}
/**
*游戏更新列表
*/
public function update()
{
parent::lists('Update', $_GET["p"]);
}
/**
*添加游戏原包
*/
public function add_source()
{
if (IS_POST) {
if (empty($_POST['game_id']) || empty($_POST['file_type'])) {
$this->error('游戏名称或类型不能为空');
}
$map['game_id'] = $_POST['game_id'];
$map['file_type'] = $_POST['file_type'];
$d = D('Source')->where($map)->find();
$source = A('Source', 'Event');
if (empty($d)) {
$source->add_source();
} else {
$source->update_source($d['id']);
}
} else {
$this->display();
}
}
/**
*删除原包
*/
public function del_game_source($model = null, $ids = null)
{
$source = D("Source");
$id = array_unique((array)$ids);
$map = array('id' => array('in', $id));
$list = $source->where($map)->select();
foreach ($list as $key => $value) {
$file_url = APP_ROOT . $value['file_url'];
unlink($file_url);
}
$model = M('Model')->getByName("source"); /*通过Model名称获取Model完整信息*/
parent::del($model["id"], $ids, "tab_game_");
}
public function add()
{
if (IS_POST) {
$_POST['introduction'] = str_replace(array("\r\n", "\r", "\n"), "~~", $_POST['introduction']);
if ($_POST['game_name'] == '') {
$this->error('游戏名称不能为空!');
exit;
}
if ($_POST['marking'] == '') {
$this->error('游戏标示不能为空!');
exit;
}
$_POST['relation_game_name'] = $_POST['game_name'];
if ($_POST['sdk_version'] == 1) {
unset($_POST['ios_game_address']);
$_POST['game_name'] = $_POST['game_name'] . '(安卓版)';
} else {
unset($_POST['add_game_address']);
$_POST['game_name'] = $_POST['game_name'] . '(苹果版)';
}
if (!empty($_POST['display_site'])) {
$_POST['display_site'] = implode(',', $_POST['display_site']);
} else {
$_POST['display_site'] = '';
}
$content = $_POST['content'];
if(!empty($content)) {
$_POST['detail_content'] = $content;
} else {
$_POST['detail_content'] = '';
}
$pinyin = new \Think\Pinyin();
$num = mb_strlen($_POST['game_name'], 'UTF8');
$short = '';
for ($i = 0; $i < $num; $i++) {
$str = mb_substr($_POST['game_name'], $i, $i + 1, 'UTF8');
$short .= $pinyin->getFirstChar($str);
}
//$_POST['material_url'] = $_POST['file_url'].$_POST['file_name'];
$_POST['discount'] == '' ? $_POST['discount'] = 10 : $_POST['discount'];
$_POST['short'] = $short;
$game = D(self::model_name);//M('$this->$model_name','tab_');
$res = $game->update();
if (!$res) {
$this->error($game->getError());
} else {
\Think\Log::actionLog('Game/add', 'Game', 1);
$this->success($res['id'] ? '更新成功' : '新增成功', U('lists'));
}
} else {
if ($_GET['type'] == 1 || $_GET['type'] == "") {
$show_status = 1;
$this->assign('show_status', $show_status);
}
$this->meta_title = '新增游戏';
$this->m_title = '游戏列表';
$this->assign('commonset', M('Kuaijieicon')->where(['url' => 'Game/lists', 'status' => 1])->find());
$this->display();
}
}
public function relation()
{
if (IS_POST) {
if ($_POST['game_name'] == '') {
$this->error('游戏名称不能为空!');
exit;
}
$_POST['relation_game_name'] = $_POST['game_name'];
if ($_POST['sdk_version'] == 1) {
if ($_POST['dow_prot'] == 0) {
unset($_POST['add_game_address']);
}
$_POST['game_name'] = $_POST['game_name'] . '(安卓版)';
} else {
if ($_POST['dow_prot'] == 0) {
unset($_POST['ios_game_address']);
}
$_POST['game_name'] = $_POST['game_name'] . '(苹果版)';
}
if (!empty($_POST['display_site'])) {
$_POST['display_site'] = implode(',', $_POST['display_site']);
} else {
$_POST['display_site'] = '';
}
$pinyin = new \Think\Pinyin();
$num = mb_strlen($_POST['game_name'], 'UTF8');
for ($i = 0; $i < $num; $i++) {
$str = mb_substr($_POST['game_name'], $i, $i + 1, 'UTF8');
$short .= $pinyin->getFirstChar($str);
}
$_POST['short'] = $short;
$game = D(self::model_name);//M('$this->$model_name','tab_');
$res = $game->update();
if (!$res) {
$this->error($game->getError());
} else {
$this->success($res['id'] ? '更新成功' : '新增成功', U('lists'));
}
} else {
$_REQUEST['id'] || $this->error('id不能为空');
$map['relation_game_id'] = $_REQUEST['id'];
$map['id'] = $_REQUEST['id'];
$map1 = $map;
$map1['id'] = array('neq', $_REQUEST['id']);
$inv = D(self::model_name)->where($map)->find();
$invalid = D(self::model_name)->where($map1)->find();
if ($invalid || $inv == '') {
$this->error('关联数据错误');
}
$suffix = $inv['sdk_version'] == 1 ? "PGB" : "AZB";
$inv['short'] = substr($inv['short'], 0, -3) . $suffix;
$this->assign('data', $inv);
$this->meta_title = '关联游戏';
$this->display();
}
}
public function edit($id = null)
{
if (IS_POST) {
/*if($_POST['apply_status']==0&&$_POST['game_status']==1){
$this->error('游戏未审核不允许显示');//游戏添加完成
}*/
$_POST['introduction'] = str_replace(array("\r\n", "\r", "\n"), "~~", $_POST['introduction']);
if (!empty($_POST['display_site'])) {
$_POST['display_site'] = implode(',', $_POST['display_site']);
} else {
$_POST['display_site'] = '';
}
$content = $_POST['content'];
$game = D(self::model_name);//M('$this->$model_name','tab_');
$_POST['discount'] == '' ? $_POST['discount'] = 10 : $_POST['discount'];
$_POST['detail_content'] = $content;
$res = $game->update();
$id = $res["id"];
$sibling = D("Game")->find($id);
$map['relation_game_id'] = $sibling['relation_game_id'];
$sid = $sibling['id'];
$map['id'] = array('neq', $sid);
$another = D("Game")->where($map)->find(); //获取另一个所有
$phone['game_type_id'] = $sibling['game_type_id'];
$phone['dow_num'] = $sibling['dow_num'];
$phone['game_type_name'] = $sibling['game_type_name'];
$phone['category'] = $sibling['category'];
$phone['recommend_status'] = $sibling['recommend_status'];
//$phone['game_status']= $sibling['game_status'];
$phone['sort'] = $sibling['sort'];
$phone['game_score'] = $sibling['game_score'];
$phone['features'] = $sibling['features'];
$phone['flooring_page_imgs'] = $sibling['flooring_page_imgs'];
$phone['introduction'] = $sibling['introduction'];
$phone['icon'] = $sibling['icon'];
$phone['cover'] = $sibling['cover'];
$phone['screenshot'] = $sibling['screenshot'];
$phone['material_url'] = $sibling['material_url'];
$phone['game_detail_cover'] = $sibling['game_detail_cover'];
$phone['first_level_name'] = $sibling['first_level_name'];
$phone['second_level_name'] = $sibling['second_level_name'];
$phone['third_level_name'] = $sibling['third_level_name'];
$phone['first_level'] = $sibling['first_level'];
$phone['second_level'] = $sibling['second_level'];
$phone['third_level'] = $sibling['third_level'];
$phone['display_site'] = $sibling['display_site'];
$phone['back_describe'] = $sibling['back_describe'];
$phone['dow_icon'] = $sibling['dow_icon'];
$phone['back_map'] = $sibling['back_map'];
M('Game', 'tab_')->data($phone)->where(array('id' => $another['id']))->save();
//同时修改代充游戏折扣
$set_fidel['status'] = 1;
$set_fidel['game_id'] = $id;
$set_fidel['discount'] = $_POST['discount'];
$promoteModel = new \Admin\Model\PromoteWelfareModel();
$promoteModel->set_game_discount($set_fidel);
if (!$res) {
$this->error($game->getError());
} else {
\Think\Log::actionLog('Game/edit', 'Game', 1);
$this->success($res['id'] ? '更新成功' : '新增成功', U('lists', array('type' => I('post.type'), 'p' => I('request.p'))));
}
} else {
$id || $this->error('id不能为空');
$data = D(self::model_name)->detailback($id);
$data || $this->error('数据不存在!');
if (!empty($data['and_dow_address'])) {
$data['and_dow_address'] = ltrim($data['and_dow_address'], '.');
}
if (!empty($data['ios_dow_address'])) {
$data['ios_dow_address'] = ltrim($data['ios_dow_address'], '.');
}
if ($_GET['type'] != 2) {
$this->assign('show_status', 1);
}
if (!empty($data['flooring_page_imgs'])) {
$data['flooring_page_imgs_data'] = explode(',', $data['flooring_page_imgs']);
}
$data['introduction'] = str_replace("~~", "\r\n", $data['introduction']);
$this->assign('data', $data);
$this->meta_title = '编辑游戏';
$this->m_title = '游戏列表';
$this->assign('commonset', M('Kuaijieicon')->where(['url' => 'Game/lists', 'status' => 1])->find());
$this->display();
}
}
public function set_status($model = 'Game')
{
parent::set_status($model);
}
public function del($model = null, $ids = null)
{
$model = M('Model')->getByName(self::model_name); /*通过Model名称获取Model完整信息*/
$model = M('Model')->find($model["id"]);
$model || $this->error('模型不存在!');
$ids = array_unique((array)I('request.ids', null));
if (empty($ids)) {
$this->error('请选择要操作的数据!');
}
foreach ($ids as $key => $value) {
$id = $value;
$gda = M('Game', 'tab_')->where(array('id' => $id))->find();
$map['id'] = array('neq', $id);
$map['relation_game_id'] = $gda['relation_game_id'];
$anogame = M('Game', 'tab_')->where($map)->find();
if ($anogame) {
M('Game', 'tab_')->where($map)->data(array('relation_game_id' => $anogame['id']))->save();
}
$pic = M('Picture')->find($gda['icon']);
$count = M('Game', 'tab_')->where(array('icon' => $gda['icon']))->count();//统计icon是否为多个游戏的图标
if ($pic != '' && $count == 1) { //只有一个游戏指向这个图标
if ($pic['oss_url'] != '') {
$this->del_oss($gda['icon']); //删除oss里图片
} elseif ($pic['bos_url'] != '') {
$this->del_bos($gda['icon']); //删除bos里的图片
}
unlink('.' . $pic['path']); //删除图片
M('Picture')->where(array('id' => $gda['icon']))->delete();
}
$gs = M('GameSource', 'tab_')->where(array('game_id' => $id))->find();
if ($gs) {
unlink($gs['file_url']); //删除原包
M('GameSource', 'tab_')->where(array('game_id' => $id))->delete();
}
$apply = M('apply', 'tab_')->where(array('game_id' => $id))->find();
if ($apply) {
if (substr($apply['pack_url'], 0, 4) == 'http') {
if (strpos($apply['pack_url'], 'bcebos') !== false) { //$value['pack_url']这个字符串是否包含'bcebos'.'bcebos'可以判断是否为bos存储
$objectname = basename($apply['pack_url']);
$this->delete_bos($objectname); //删除bos里的原包
} elseif (strpos($apply['pack_url'], 'oss') !== false) {
$objectname = basename($apply['pack_url']);
$this->delete_oss($objectname);
}
}
$file_url = "./Uploads/GamePack/" . basename($apply['pack_url']);//删除本地原包
unlink($file_url);
M('Apply', 'tab_')->where(array('game_id' => $id))->delete();
}
}
$del_map['game_id'] = ['in', $ids];
M('giftbag', 'tab_')->where($del_map)->delete();
M('server', 'tab_')->where($del_map)->delete();
\Think\Log::actionLog('Game/del', 'Game', 1);
parent::remove($model["id"], 'Set', $ids);
}
//开放类型
public function openlist()
{
$extend = array();
parent::lists("opentype", $_GET["p"], $extend);
}
//新增开放类型
public function addopen()
{
if (IS_POST) {
$game = D("opentype");
if ($game->create() && $game->add()) {
$this->success("添加成功", U('openlist'));
} else {
$this->error("添加失败", U('openlist'));
}
} else {
$this->display();
}
}
//编辑开放类型
public function editopen($ids = null)
{
$game = D("opentype");
if (IS_POST) {
if ($game->create() && $game->save()) {
$this->success("修改成功", U('openlist'));
} else {
$this->error("修改失败", U('openlist'));
}
} else {
$map['id'] = $ids;
$date = $game->where($map)->find();
$this->assign("data", $date);
$this->display();
}
}
//删除开放类型
public function delopen($model = null, $ids = null)
{
$model = M('Model')->getByName("opentype"); /*通过Model名称获取Model完整信息*/
parent::del($model["id"], $ids);
}
/**
* 文档排序
* @author huajie <banhuajie@163.com>
*/
public function sort()
{
//获取左边菜单$this->getMenus()
if (IS_GET) {
$map['status'] = 1;
$list = D('Game')->where($map)->field('id,game_name')->order('sort DESC, id DESC')->select();
$this->assign('list', $list);
$this->meta_title = '游戏排序';
$this->display();
} elseif (IS_POST) {
$ids = I('post.ids');
$ids = array_reverse(explode(',', $ids));
foreach ($ids as $key => $value) {
$res = D('Game')->where(array('id' => $value))->setField('sort', $key + 1);
}
if ($res !== false) {
$this->success('排序成功!');
} else {
$this->error('排序失败!');
}
} else {
$this->error('非法请求!');
}
}
/*
删除oss里的object
param id 图片id
*/
public function del_oss($id)
{
$data = M('picture')->where("id=$id")->find();
if (!empty($data)) {
if (!empty($data['oss_url'])) {
$objectname = basename($data['oss_url']); //返回路径中的文件名部分(带后缀)
$oss = A('Admin/Oss');
$res = $oss->delete_game_pak_oss($objectname);
}
}
}
/**
*删除OSS原包
* param name 原包名
*/
public function delete_oss($objectname)
{
/**
* 根据Config配置得到一个OssClient实例
*/
try {
Vendor('OSS.autoload');
$ossClient = new \OSS\OssClient(C("oss_storage.accesskeyid"), C("oss_storage.accesskeysecr"), C("oss_storage.domain"));
} catch (OssException $e) {
$this->error($e->getMessage());
}
$bucket = C('oss_storage.bucket');
$objectname = "GamePak/" . $objectname;
try {
$ossClient->deleteObject($bucket, $objectname);
return true;
} catch (OssException $e) {
/* 返回JSON数据 */
$this->error($e->getMessage());
}
}
/*
删除bos里的object
param id 图片id
*/
public function del_bos($id)
{
$data = M('picture')->where("id=$id")->find();
if (!empty($data)) {
if (!empty($data['bos_url'])) {
$objectname = basename($data['bos_url']); //返回路径中的文件名部分(带后缀)
$oss = A('Admin/Bos');
$res = $oss->delete_bos($objectname);
}
}
}
/*
删除bos的原包
param name 原包名
*/
public function delete_bos($name)
{
/**
* 根据Config配置得到一个OssClient实例
*/
try {
$BOS_TEST_CONFIG =
array(
'credentials' => array(
'accessKeyId' => C("bos_storage.AccessKey"),
'secretAccessKey' => C("bos_storage.SecretKey"),
),
'endpoint' => C("bos_storage.domain"),
);
require VENDOR_PATH . 'BOS/BaiduBce.phar';
$client = new BosClient($BOS_TEST_CONFIG);
} catch (Exception $e) {
$this->error($e->getMessage());
}
$bucket = C('bos_storage.bucket');
//$path ="icon/". $name; //在bos的路径
$path = "GamePak/" . $name;
$client->deleteObject($bucket, $path);
}
/**
* 商务专员状态修改
* @author 小纯洁
*/
public function changeStatus($field = null, $value = null)
{
$id = array_unique((array)I('ids', 0));
$id = is_array($id) ? implode(',', $id) : $id;
if (empty($id)) {
$this->error('请选择要操作的数据!');
}
$map['id'] = array('in', $id);
$game = M('Game', 'tab_')->where($map)->find();
//开发者游戏 上线与显示同步
if ($game['developers'] > 0 && ($field == "online_status" || $field = 'apply_status' || $field == 'game_status')) {
if ($game['apply_status'] == 0) {
//$this->error('未审核的游戏不能设置游戏状态');
}
$save['apply_status'] = $save['game_status'] = $save['online_status'] = $value;
$save['online_time'] = time();
} else {
$save[$field] = $value;
}
$result = M('Game', 'tab_')->where($map)->save($save);
$msg = "操作";
if ($result !== false) {
if ($field == "pay_status" && $value == 0) {
$this->success("操作成功用户无法在SDK内进行充值操作");
}
$this->success($msg . '成功');
} else {
$this->error($msg . '失败');
}
}
public function game_h5_show()
{
$qrcode_path = 'http://' . $_SERVER['HTTP_HOST'] . __ROOT__ . '/Public/' . MODULE_NAME . '/images' . "/game_h5_show/admin123.png";
$content = "http://www.baidu.com";
$matrixPointSize = 4;
$matrixMarginSize = 4;
$errorCorrectionLevel = 3;
$url = false;
// /$url = __ROOT__ . '/Public/' . MODULE_NAME . '/images'."/game_h5_show/admin123.png";
$url = $this->makecode($qrcode_path, $content, $matrixPointSize, $matrixMarginSize, $errorCorrectionLevel, $url);
$this->assign('url', $url);
$this->display();
}
function makecode($qrcode_path, $content, $matrixPointSize, $matrixMarginSize, $errorCorrectionLevel, $url)
{
/** 参数详情:
* $qrcode_path:logo地址
* $content:需要生成二维码的内容
* $matrixPointSize:二维码尺寸大小
* $matrixMarginSize:生成二维码的边距
* $errorCorrectionLevel:容错级别
* $url:生成的带logo的二维码地址
* */
ob_clean();
Vendor('phpqrcode.phpqrcode');
$object = new \QRcode();
$qrcode_path_new = './Public/Admin/images/QRcode/code' . '_' . date("Ymdhis") . '.png';//定义生成二维码的路径及名称
//$filename = $pathname . "/qrcode_" . time() . ".png";
$object::png($content, $qrcode_path_new, $errorCorrectionLevel, $matrixPointSize, $matrixMarginSize);
$QR = imagecreatefromstring(file_get_contents($qrcode_path_new));//imagecreatefromstring:创建一个图像资源从字符串中的图像流
$logo = imagecreatefromstring(file_get_contents($qrcode_path));
$QR_width = imagesx($QR);// 获取图像宽度函数
$QR_height = imagesy($QR);//获取图像高度函数
$logo_width = imagesx($logo);// 获取图像宽度函数
$logo_height = imagesy($logo);//获取图像高度函数
$logo_qr_width = $QR_width / 4;//logo的宽度
$scale = $logo_width / $logo_qr_width;//计算比例
$logo_qr_height = $logo_height / $scale;//计算logo高度
$from_width = ($QR_width - $logo_qr_width) / 2;//规定logo的坐标位置
imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
/** imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
* 参数详情:
* $dst_image:目标图象连接资源。
* $src_image:源图象连接资源。
* $dst_x:目标 X 坐标点。
* $dst_y:目标 Y 坐标点。
* $src_x:源的 X 坐标点。
* $src_y:源的 Y 坐标点。
* $dst_w:目标宽度。
* $dst_h:目标高度。
* $src_w:源图象的宽度。
* $src_h:源图象的高度。
* */
Header("Content-type: image/png");
//$url:定义生成带logo的二维码的地址及名称
imagepng($QR, $qrcode_path_new);
return $qrcode_path_new;
}
public function gameQrcodeIme()
{
}
}