/** * * 登录后用户的首页,显示当前正在进行的对局、简单的技术统计。 * 以前的对局通过传递参数给所有对局搜索来进行处理。 * 未登录的话显示登录提示。 */ 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)); }
/** * * 邀请其他用户对局的页面。 * 接受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'); } }