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.
286 lines
8.6 KiB
PHTML
286 lines
8.6 KiB
PHTML
5 years ago
|
<?php
|
||
|
/**
|
||
|
* Created by PhpStorm.
|
||
|
* User: xmy 280564871@qq.com
|
||
|
* Date: 2017/4/25
|
||
|
* Time: 13:47
|
||
|
*/
|
||
|
|
||
|
namespace Open\Model;
|
||
|
|
||
|
use Admin\Controller\PlistController;
|
||
|
|
||
|
class GameSourceModel extends BaseModel{
|
||
|
|
||
|
protected $_auto = [
|
||
|
['apply_status', '0', self::MODEL_INSERT],
|
||
|
];
|
||
|
|
||
|
protected $_validate = [
|
||
|
['pack_name','require','包名不能为空',self::MODEL_BOTH,'regex'],
|
||
|
['version','require','游戏版本不能为空',self::MODEL_BOTH,'regex'],
|
||
|
['pay_notify_url','require','游戏通知地址不能为空',self::MODEL_BOTH,'regex'],
|
||
|
];
|
||
|
|
||
|
/**
|
||
|
* 描述文件验证
|
||
|
* @param $data
|
||
|
* @return bool
|
||
|
* author: xmy 280564871@qq.com
|
||
|
*/
|
||
|
public function description_verify($data){
|
||
|
if(I('version') == 2 && empty($data)){
|
||
|
return false;
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
public function upDate($user_id,$game_id){
|
||
|
$data = I('post.');
|
||
|
if(empty($data['file_url'])){
|
||
|
$this->error = "原包不能为空";
|
||
|
return false;
|
||
|
}
|
||
|
$Game = new GameModel();
|
||
|
$game = $Game->getUserData($user_id,$game_id);
|
||
|
if($data['file_type'] == 1){//安卓包处理
|
||
|
$result = $this->androidPacket($data['file_name'],$data['file_url']);
|
||
|
$data = array_merge($data,$result);
|
||
|
}else{//ios处理
|
||
|
if(empty($data['description_file_url'])){
|
||
|
$this->error = "描述文件不能为空";
|
||
|
return false;
|
||
|
}
|
||
|
$result = $this->iosPacket($data['file_name'],$data['file_url']);
|
||
|
$data = array_merge($data,$result);
|
||
|
//生成plist文件
|
||
|
$data['plist_url'] = $this->generatePlist($data['file_name'],$data['file_url'],$game,$data['pack_name']);
|
||
|
$data['description_url'] = $this->descriptionPacket($data['file_name'],$data['description_file_url'],$data['description_file_name']);
|
||
|
}
|
||
|
$data = $this->create($data);
|
||
|
if(!$data){
|
||
|
return false;
|
||
|
}
|
||
|
if($data['file_type'] == 1){
|
||
|
$this->sourcePack($data['file_url'],$game);
|
||
|
}
|
||
|
$data['game_name'] = $game['game_name'];
|
||
|
$data['file_id'] = 0;
|
||
|
$data['develop_id'] = $user_id;
|
||
|
$data['game_id'] = $game_id;
|
||
|
$data['bao_name'] = $data['version'];
|
||
|
$data['create_time'] = time();
|
||
|
|
||
|
$remark = str_replace(array("\r\n", "\r", "\n"), "@@@", $data['remark']);
|
||
|
|
||
|
$data['remark'] = json_encode(explode('@@@',$remark));
|
||
|
|
||
|
$source = $this->where(['develop_id'=>$user_id,'game_id'=>$game_id])->find();
|
||
|
//设置游戏支付回调地址
|
||
|
M("game_set","tab_")->where(['game_id'=>$game_id])->setField("pay_notify_url",I('post.pay_notify_url'));
|
||
|
if (empty($source)){
|
||
|
$data['source_version'] = 1;
|
||
|
$res = $this->add($data);
|
||
|
$this->soure_pack($data['game_id'],$data['file_url'],$data['file_type'],1);
|
||
|
$this->update_game_size($data);
|
||
|
}else{
|
||
|
$data = array_merge($source,$data);
|
||
|
$data['source_version'] = $source['source_version']+1;
|
||
|
$this->soure_pack($data['game_id'],$data['file_url'],$data['file_type'],$data['source_version']);
|
||
|
$res = $this->save($data);
|
||
|
if($res){
|
||
|
$appmodel = M('Apply','tab_');
|
||
|
$app_map['status'] = 1;
|
||
|
$app_map['game_id'] = $game_source['game_id'];
|
||
|
$app_data = $appmodel->where($app_map)->select();
|
||
|
if($app_data){
|
||
|
M()->startTrans();
|
||
|
$app_res = $appmodel->where($app_map)->setField('enable_status',2);
|
||
|
if($app_res === false){
|
||
|
M()->rollback();
|
||
|
}else{
|
||
|
M()->commit();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
$this->update_game_size($data);
|
||
|
}
|
||
|
return $res;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 安卓包处理
|
||
|
* @param $file_name
|
||
|
* @param $file_url
|
||
|
* @return mixed
|
||
|
* author: xmy 280564871@qq.com
|
||
|
*/
|
||
|
public function androidPacket($file_name,$file_url){
|
||
|
$data['file_name'] = $file_name;
|
||
|
$data['file_url'] = $file_url.'/'.$file_name;
|
||
|
return $data;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* ios包处理
|
||
|
* @param $file_name
|
||
|
* @param $file_url
|
||
|
* @return mixed
|
||
|
* author: xmy 280564871@qq.com
|
||
|
*/
|
||
|
public function iosPacket($file_name,$file_url){
|
||
|
$data['file_name'] = $file_name;
|
||
|
$data['file_url'] = $file_url.'/'.$file_name;
|
||
|
$new_path = "./Uploads/Ios/original/" . $data['file_name'];
|
||
|
//IOS原包 移到新目录
|
||
|
copy($data['file_url'],$new_path);
|
||
|
@unlink($data['file_url']);
|
||
|
$data['file_url'] = $new_path;
|
||
|
return $data;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 生成IOS plist文件
|
||
|
* @param $file_url
|
||
|
* @param $file_name
|
||
|
* @param $game
|
||
|
* author: xmy 280564871@qq.com
|
||
|
*/
|
||
|
public function generatePlist($file_name,$file_path,$game,$pack_name){
|
||
|
$game_appid = $game['game_appid'];
|
||
|
$Plist = new PlistController();
|
||
|
$Plist->createPlist($game,0,$pack_name,$file_path);
|
||
|
$plist_path = "./Uploads/SourcePlist/{$game['id']}.Plist";
|
||
|
return $plist_path;
|
||
|
}
|
||
|
|
||
|
/* public function generatePlist($file_url,$file_name,$game){
|
||
|
$game_appid = $game['game_appid'];
|
||
|
$file_path = $file_url.'/'.$file_name;
|
||
|
$Plist = new PlistController();
|
||
|
$Plist->createPlist($game,0,$game_appid,$file_path);
|
||
|
$plist_path = "./Uploads/SourcePlist/{$game['id']}.Plist";
|
||
|
return $plist_path;
|
||
|
} */
|
||
|
|
||
|
|
||
|
/**
|
||
|
* 描述文件处理
|
||
|
* @param $new_name
|
||
|
* @param $file_url
|
||
|
* @param $file_name
|
||
|
* @return string
|
||
|
* author: xmy 280564871@qq.com
|
||
|
*/
|
||
|
public function descriptionPacket($new_name,$file_url,$file_name){
|
||
|
$old_file = $file_url."/".$file_name;
|
||
|
$file_name = str_replace(".ipa",".mobileprovision",$new_name);
|
||
|
$file_path = $file_url."/".$file_name;
|
||
|
rename($old_file,$file_path);
|
||
|
return $file_path;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* 安卓原包打包
|
||
|
* @param $file_url 文件地址
|
||
|
* @param $game
|
||
|
* author: xmy 280564871@qq.com
|
||
|
*/
|
||
|
public function sourcePack($file_url,$game){
|
||
|
$zip = new \ZipArchive;
|
||
|
$zip->open($file_url, \ZipArchive::CREATE);
|
||
|
$data = array(
|
||
|
"game_id" => $game['id'],
|
||
|
"game_name" => $game['game_name'],
|
||
|
"game_appid" => $game['game_appid'],
|
||
|
"promote_id" => 0,
|
||
|
"promote_account"=> "自然注册",
|
||
|
);
|
||
|
$zip->addFromString('META-INF/mch.properties', json_encode($data));
|
||
|
$zip->close();
|
||
|
}
|
||
|
|
||
|
|
||
|
public function getUserData($user_id,$game_id){
|
||
|
$map['s.develop_id'] = $user_id;
|
||
|
$map['s.game_id'] = $game_id;
|
||
|
$data = $this->alias("s")
|
||
|
->field("s.*,t.pay_notify_url")
|
||
|
->join("left join tab_game_set t on t.game_id = s.game_id")
|
||
|
->join()
|
||
|
->where($map)
|
||
|
->find();
|
||
|
|
||
|
$data['description_file_name'] = str_replace(".ipa",".mobileprovision",$data['file_name']);
|
||
|
$data['description_file_url'] = str_replace('/'.$data['description_file_name'],"",$data['description_url']);
|
||
|
|
||
|
return $data;
|
||
|
}
|
||
|
|
||
|
|
||
|
protected function update_game_size($param=null){
|
||
|
$model = D('Game');
|
||
|
$map['id'] = $param['game_id'];
|
||
|
$data['game_size'] = round(filesize($param['file_url'])/pow(1024,2),2)."MB";;
|
||
|
// $data['version'] = $param['version'];
|
||
|
if($param['file_type']==1){
|
||
|
$data['and_dow_address'] = $param['file_url'];
|
||
|
$ggame=$model->where(array('id'=>$map['id']))->find();
|
||
|
if($ggame['sdk_version']!=-1){
|
||
|
if($ggame['sdk_version']==2){
|
||
|
$data['sdk_version']=0;
|
||
|
}
|
||
|
}else{
|
||
|
$data['sdk_version']=1;
|
||
|
}
|
||
|
}
|
||
|
else{
|
||
|
if($ggame['sdk_version']!=-1){
|
||
|
if($ggame['sdk_version']==1){
|
||
|
$data['sdk_version']=0;
|
||
|
}
|
||
|
}else{
|
||
|
$data['sdk_version']=2;
|
||
|
}
|
||
|
$data['ios_dow_address'] = $param['file_url'];
|
||
|
}
|
||
|
$model->where($map)->save($data);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*原包打包
|
||
|
*/
|
||
|
protected function soure_pack($game_id=0,$file_url="",$file_type=1,$source_version=1){
|
||
|
$game_info = M("game","tab_")->find($game_id);
|
||
|
$data = array(
|
||
|
"game_id" => $game_info['id'],
|
||
|
"game_name" => $game_info['game_name'],
|
||
|
"game_appid" => $game_info['game_appid'],
|
||
|
"promote_id" => 0,
|
||
|
"promote_account"=> "自然注册",
|
||
|
'source_version' =>$source_version,
|
||
|
);
|
||
|
if($file_type==1){
|
||
|
$zip = new \ZipArchive;
|
||
|
$res = $zip->open($file_url, \ZipArchive::CREATE);
|
||
|
$zip->addFromString('META-INF/mch.properties', json_encode($data));
|
||
|
$zip->close();
|
||
|
}elseif($file_type==2){
|
||
|
$zip_open_game_source = zip_open($file_url);
|
||
|
if ($zip_open_game_source) {
|
||
|
while ($zip_entry = zip_read($zip_open_game_source)) {
|
||
|
if(preg_match("/.app/", zip_entry_name($zip_entry))){
|
||
|
$ios_app=substr(zip_entry_name($zip_entry),8) ."<br/>";
|
||
|
}
|
||
|
$new_ios_1=explode("/", $ios_app);
|
||
|
}
|
||
|
}
|
||
|
$url_ver="Payload/".$new_ios_1[0]."/_CodeSignature/TXChannel";
|
||
|
$zip = new \ZipArchive;
|
||
|
$res = $zip->open($file_url, \ZipArchive::CREATE);
|
||
|
$zip->addFromString($url_ver, json_encode($data));
|
||
|
$zip->close();
|
||
|
}
|
||
|
}
|
||
|
}
|