Example #1
0
 /**
  * 
  * 登录后用户的首页,显示当前正在进行的对局、简单的技术统计。
  * 以前的对局通过传递参数给所有对局搜索来进行处理。
  * 未登录的话显示登录提示。
  */
 public function actionHome()
 {
     $this->needlogin();
     $uid = $this->_userinfo()->id;
     $invites = Game_invite::model()->findAll("status='等待回应' and `to`={$uid} order by id desc");
     $active_games = Games::model()->findAll("(black_id = {$uid} or white_id = {$uid}) and status='进行中' order by movetime desc,id desc limit 6");
     $waiting_games = Games::model()->findAll("(black_id = {$uid} or white_id = {$uid}) and status='未开始' order by id desc limit 6");
     $ended_games = Games::model()->findAll("(black_id = {$uid} or white_id = {$uid}) and status in ('黑胜','白胜','和棋') order by movetime desc,id desc limit 6");
     $this->pageTitle = '我的对局-' . Yii::app()->params['title'];
     $this->render('home', array('invites' => $invites, 'active_games' => $active_games, 'waiting_games' => $waiting_games, 'ended_games' => $ended_games));
 }
Example #2
0
 /**
  * 
  * 邀请其他用户对局的页面。
  * 接受get参数 id 邀请记录,只有双方可访问
  * 接受user_id参数,被邀请人的id,不可以是自己。
  * 
  * 处理的post参数:
  * action 可能是cancel、reject、create、edit、accept
  * cancel时必须操作者是from
  * reject、edit、accept必须是to
  * 除了create其他都要id
  */
 public function actionInvite()
 {
     $this->needlogin();
     $id = intval(Yii::app()->request->getParam('id'));
     $invite = '';
     if ($id) {
         $invite = Game_invite::model()->findByPk($id);
     }
     $user_id = intval(Yii::app()->request->getParam('user_id'));
     $user = '';
     if ($user_id) {
         $user = Player::model()->findByPk($user_id);
     }
     $useblack = intval(Yii::app()->request->getParam('useblack'));
     $days = intval(Yii::app()->request->getParam('days'));
     $hours = intval(Yii::app()->request->getParam('hours'));
     $rule = Yii::app()->request->getParam('rule');
     $free_opening = intval(Yii::app()->request->getParam('free_open'));
     $free_opening = $free_opening ? 1 : 0;
     if (!in_array($rule, Yii::app()->params['rules'])) {
         $rule = Yii::app()->params['rules'][0];
     }
     $comment = trim(Yii::app()->request->getParam('comment'));
     $game_time = $days * 24 + $hours;
     if ($game_time < 1) {
         $game_time = 1;
     }
     if ($game_time > Yii::app()->params['max_hours']) {
         //如果设置了大于30天的时间,那么就直接设置为30天。
         $game_time = Yii::app()->params['max_hours'];
     }
     $action = trim(Yii::app()->request->getParam('action'));
     if ($action) {
         switch ($action) {
             case 'cancel':
                 //取消
                 if (!$invite || $invite->status != '等待回应') {
                     $this->json_return(false, '此邀请不存在或者已经失效了。', '/my_invites.html');
                 }
                 if ($this->_userinfo()->id != $invite->from) {
                     $this->json_return(false, '您不是此邀请的发起人,您不能取消这个邀请。', '/my_invites.html');
                 }
                 $invite->status = '已取消';
                 $invite->save();
                 $this->json_return(true, '', '/my_invites.html');
                 break;
             case 'reject':
                 //拒绝
                 if (!$invite || $invite->status != '等待回应') {
                     $this->json_return(false, '此邀请不存在或者已经失效了。', '/invite_me.html');
                 }
                 if ($this->_userinfo()->id != $invite->to) {
                     $this->json_return(false, '这个邀请不是发给您的,您不能操作这个邀请。', '/invite_me.html');
                 }
                 $invite->status = '已拒绝';
                 $invite->save();
                 $this->json_return(true, '', '/invite_me.html');
                 break;
             case 'create':
                 //创建
                 $to_id = intval(Yii::app()->request->getParam('to_user'));
                 $to_user = Player::model()->findByPk($to_id);
                 if ($to_id == $this->_userinfo()->id) {
                     $this->json_return(false, '您不能邀请自己对局。');
                 }
                 if (!$to_id || !$to_user) {
                     $this->json_return(false, '您邀请的玩家不存在。', '/home.html');
                 }
                 $invite = new Game_invite();
                 $invite->from = $this->_userinfo()->id;
                 $invite->to = $to_id;
                 $invite->black_id = $useblack ? $this->_userinfo()->id : $to_id;
                 $invite->message = $comment;
                 $invite->totaltime = $game_time;
                 $invite->rule = $rule;
                 $invite->free_opening = $free_opening;
                 $invite->status = '等待回应';
                 $invite->game_id = 0;
                 $invite->updtime = date('Y-m-d H:i:s');
                 $invite->save();
                 $this->json_return(true, '您的邀请已经发送给对方,请等待回应。', '/my_invites.html');
                 break;
             case 'accept':
                 //接受。分为2种状态,如果提交数据与原数据一致,则直接接受,创建新局,如果不同,则edit
                 if (!$invite || $invite->status != '等待回应') {
                     $this->json_return(false, '此邀请不存在或者已经失效了。', '/invite_me.html');
                 }
                 if ($this->_userinfo()->id != $invite->to) {
                     $this->json_return(false, '这个邀请不是发给您的,您不能操作这个邀请。', '/invite_me.html');
                 }
                 $black_id = $useblack ? $this->_userinfo()->id : $invite->from;
                 if ($invite->totaltime == $game_time && $invite->black_id == $black_id && $invite->free_opening == $free_opening && $invite->rule == $rule) {
                     $game_id = $this->create_game($invite);
                     $invite->status = '已接受';
                     $invite->message = $comment;
                     $invite->game_id = $game_id;
                     $invite->save();
                     $this->json_return(true, '您已经接受了对方的邀请,棋局开始。', "/game_{$game_id}.html");
                 } else {
                     $invite->to = $invite->from;
                     $invite->from = $this->_userinfo()->id;
                     $invite->black_id = $black_id;
                     $invite->message = $comment;
                     $invite->totaltime = $game_time;
                     $invite->rule = $rule;
                     $invite->free_opening = $free_opening;
                     $invite->status = '等待回应';
                     $invite->game_id = 0;
                     $invite->updtime = date('Y-m-d H:i:s');
                     $invite->save();
                     $this->json_return(true, '您的邀请已经发送给对方,请到等待回应。', '/my_invites.html');
                 }
                 break;
             default:
                 break;
         }
     }
     //如果当前用户是此invite 的任何一方,或者invite不存在,则显示。
     if ($user || $invite && ($invite->from == $this->_userinfo()->id || $invite->to == $this->_userinfo()->id)) {
         $this->pageTitle = '邀请对局-' . Yii::app()->params['title'];
         $this->js = array('invite');
         $this->render('invite', array('invite' => $invite, 'user' => $user));
     } else {
         $this->redirect('/invite_me.html');
     }
 }