<?php

namespace Admin\Controller;
use User\Api\UserApi as UserApi;
use Admin\Event\BatchImportExcelEvent;
/**
 * 后台首页控制器
 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
 */
class ServerNoticeController extends ThinkController {
	const model_name = 'ServerNotice';

    public function lists(){
        if(isset($_REQUEST['show_status'])){
            $extend['show_status']=$_REQUEST['show_status'];
            unset($_REQUEST['show_status']);
        }
        if(isset($_REQUEST['server_version'])){
            $extend['server_version']=$_REQUEST['server_version'];
            unset($_REQUEST['server_version']);
        }
        if(isset($_REQUEST['timestart']) && isset($_REQUEST['timeend'])){
            $extend['start_time']  =  array('BETWEEN',array(strtotime($_REQUEST['timestart']),strtotime($_REQUEST['timeend'])+24*60*60-1));
            unset($_REQUEST['timestart']);unset($_REQUEST['timeend']);
        }elseif(isset($_REQUEST['timestart'])){
            $extend['start_time']=array('EGT',strtotime($_REQUEST['timestart']));
        }elseif(isset($_REQUEST['timeend'])){
            $extend['start_time']=array('ELT',strtotime($_REQUEST['timeend']));
        }
        if(isset($_REQUEST['start']) && isset($_REQUEST['end'])){
            $extend['start_time']  =  array('BETWEEN',array(strtotime($_REQUEST['start']),strtotime($_REQUEST['end'])+24*60*60-1));
            unset($_REQUEST['start']);unset($_REQUEST['end']);
        }
        if(isset($_REQUEST['game_name'])){
            if($_REQUEST['game_name']=='全部'){
                unset($_REQUEST['game_name']);
            }else{
                $extend['game_name']=['like', "{$_REQUEST['game_name']}%"];
                unset($_REQUEST['game_name']);
            }
        }
        if(isset($_REQUEST['server_name'])){
            $extend['server_name']=$_REQUEST['server_name'];
            unset($_REQUEST['server_name']);
        }
        if(empty($_GET['type']) || $_GET['type'] == 1) {
            $extend['developers'] = array('EQ',0);
        }else{
            $extend['developers'] = array('NEQ',0);
            $this->assign('show_status',1);
        }

        $this->checkListOrCountAuthRestMap($map,[]);

				$this->m_title = '区服预告';
				$this->assign('commonset',M('Kuaijieicon')->where(['url'=>'ServerNotice/lists','status'=>1])->find());
				
				
    	parent::order_lists(self::model_name,$_GET["p"],$extend);
    }

    public function add(){
    	$model = M('Model')->getByName(self::model_name);
			$this->m_title = '区服预告';
				$this->assign('commonset',M('Kuaijieicon')->where(['url'=>'ServerNotice/lists','status'=>1])->find());
				
    	parent::add($model["id"]);
    }

    public function edit($id=0){
		$id || $this->error('请选择要编辑的用户!');
		$this->m_title = '区服预告';
				$this->assign('commonset',M('Kuaijieicon')->where(['url'=>'ServerNotice/lists','status'=>1])->find());
				
		$model = M('Model')->getByName(self::model_name); /*通过Model名称获取Model完整信息*/
		parent::edit($model['id'],$id);
    }

    public function del($model = null, $ids=null){
        $model = M('Model')->getByName(self::model_name); /*通过Model名称获取Model完整信息*/
        parent::del($model["id"],$ids);
    }

    /**
     * 批量导入游戏区服区服
     */
    public function batch(){
        if(IS_POST){
            switch($_POST['batchType']){
                case 1:
                    $this->batchExcel();
                break;
                case 2:
                    $this->batchImport();
                break;
            }
        }else{
            $this->meta_title = '新增区服管理';
						
            $this->m_title = '区服预告';
            $this->assign('commonset',M('Kuaijieicon')->where(['url'=>'Server/lists','status'=>1])->find());
				
            $this->display();
        }

    }

    //批量新增
    public function batchImport(){
        $server_str = str_replace(array("\r\n", "\r", "\n"), "", I('server'));
        $server_ar1 = explode(';',$server_str);
        array_pop($server_ar1);
        $num = count($server_ar1);
				if ($num<1) {$this->error('请添加区服数据');}
        if($num > 100 ){
            $this->error('区服数量过多,最多只允许添加100个!');
        }
        $verify = ['game_id','server_name','time'];
        $server_model = D('ServerNotice');
        foreach ($server_ar1 as $key=>$value) {
            $arr = explode(',',$value);
            foreach ($arr as $k=>$v) {
                $att = explode('=',$v);
                if(in_array($att[0],$verify)){
                    switch ($att[0]){
                        case 'time' :
														$patten = '/^\d{4}-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])(\s+(0[0-9]|1[0-9]|2[0-3])\:(0[0-9]|[1-5][0-9])(\:(0[0-9]|[1-5][0-9]))?)$/';
                            if(!strtotime($att[1]) || !preg_match($patten,$att[1])){
                                $this->error('开服时间不正确');
                            }else{
                                $time = $server[$key]['start_time'] = strtotime($att[1]);
                            }
                            break;
                        case 'game_id':
                            $game = M('Game','tab_')->where('developers = 0')->find($att[1]);
                            if(empty($game)){
                                $this->error('game_id='.$att[1].' 数据错误,请重新上传');
                            }
                            $server[$key]['game_id'] = $att[1];
                            break;
                        default:
                            $server[$key][$att[0]] = $att[1];
                    }
                }
            }
            $server[$key]['game_name'] = get_game_name($server[$key]['game_id']);
            $server[$key]['server_num'] = 0;
            $server[$key]['recommend_status'] = 1;
            $server[$key]['show_status'] = 1;
            $server[$key]['stop_status'] = 0;
            $server[$key]['server_status'] = 0;
            $server[$key]['parent_id'] = 0;
            $server[$key]['create_time'] = time();
            $version = get_sdk_version($server[$key]['game_id']);
            $server[$key]['server_version'] = empty($version) ? 0 : $version;

            if(!$server_model->create($server[$key])){
                switch ($server_model->getError()) {
                    case '区服名称不能为空':
                        $msg = '游戏ID:'.$server[$key]['game_id'].' <'.$server[$key]['server_name'].'> 区服名称不能为空';
                        break;
                    case '区服名称不能超过30个字符':
                        $msg = '游戏ID:'.$server[$key]['game_id'].' <'.$server[$key]['server_name'].'> 区服名称不能超过30个字符';
                        break;
                    case '同游戏下区服名称已存在':
												$msg = '游戏ID:'.$server[$key]['game_id'].' <'.$server[$key]['server_name'].'> 区服名称重复';
                        break;
                    case '开始时间不能为空':
                        $msg = '游戏ID:'.$server[$key]['game_id'].' <'.$server[$key]['server_name'].'> 开始时间不能为空';
                        break;
                    default:
                        $msg = "批量添加失败";
                        break;
                }
                $this->error($msg);
            }
            addOperationLog(array(
                "op_type"=>0,
                "key"=>$server[$key]['game_name']."/".$server[$key]['server_name'],
                "url"=>U("ServerNotice/lists",array("server_name"=>$server[$key]['server_name']))
            ));
        }
        $server = $this->array_unset_tt($server);
        $res = M('ServerNotice','tab_')->addAll($server);
        if($res !== false){
            $this->success('添加成功!',U('ServerNotice/lists'));
        }else{
            $this->error('添加失败!'.M()->getError());
        }
    }

    function array_unset_tt($arr){     
        //建立一个目标数组  
        $res = array();        
        foreach ($arr as $key => $value) {     
           //查看有没有重复项  
           if($res[$key-1]['game_id'] == $value['game_id'] && $res[$key-1]['server_name'] == $value['server_name']){  
							
							$this->error("游戏ID:{$value['game_id']} <{$value['server_name']}> 游戏区服名称重复");
					 
                //有:销毁  
                //unset($arr[$key]);  
           }  
           else{  
                $res[$key] = $value;  
           }    
        } 
        return $res;  
    }

    /**
     * excel 批量导入游戏区服
     */
    public function batchExcel(){
        $excel = new BatchImportExcelEvent();
				if (empty($_FILES['fileExcel'])) {$this->ajaxReturn(["status"=>0,"info"=>'请选择文件']);exit;}
        $info = $excel->uploadExcel($_FILES['fileExcel']);
        $data = [];
        if(is_array($info)){
            $filename = './Uploads/' . $info['savepath'] . $info['savename'];
            $data = $excel->importExcel($filename);
            if(is_array($data)){
                $excel->serverDataInsert($data,U('ServerNotice/lists'),true);
            }else{
                $this->ajaxReturn(["status"=>0,"info"=>$data]);
            }
        }else{
            $this->ajaxReturn(["status"=>0,"info"=>$info]);
        }
        
    }
		
		
		
	/**
     * 区服状态修改
     * @author 鹿文学
     */
    public function change_status($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);
				$servermodel = D(self::model_name);
        $server = $servermodel->where($map)->find();
        //开发者区服
        if($server['developers'] > 0){					
					$save[$field] = $value;
					$result = $servermodel->where($map)->save($save);
        }else{
					$result = $servermodel->where($map)->setField($field,$value);
        }
        $msg = "操作";
        if($result !== false){
            $this->success($msg.'成功');
        }else{
            $this->error($msg.'失败');
        }
    }
    /***
     * 获取区服列表
     */
    public function getGameServer()
    {
        $game_name = $_REQUEST['game_name'];
        $sdk_version = $_REQUEST['sdk_version'];
        $game_map = [];
        if ($game_name) {
            $game_map['relation_game_name'] = $game_name;
        }
        if ($sdk_version) {
            $map['server_version'] = $game_map['sdk_version'] = $sdk_version;
        }
        $game = M("Game", 'tab_')->where($game_map)->getField('id', true);

        // 获取版本信息
        $map = [];
        if ($game) {
            $map['game_id'] = ['in', $game];
        } else {
            $map['game_id'] = ['in', [-1]];
        }
        $data = M('ServerNotice', 'tab_')->field('id, server_name, server_id')->where($map)->group('server_name')->select();
        $this->AjaxReturn($data);
    }
		
		
		
		
		
}