private function runGet() { $request = Yii::$app->getRequest(); $model = DynamicModel::validateData(['id' => $request->get('id'), 'screen_name' => $request->get('screen_name'), 'count' => $request->get('count'), 'newer_than' => $request->get('newer_than'), 'older_than' => $request->get('older_than')], [[['id'], 'exist', 'targetClass' => Battle::className(), 'targetAttribute' => 'id'], [['screen_name'], 'exist', 'targetClass' => User::className(), 'targetAttribute' => 'screen_name'], [['newer_than', 'older_than'], 'integer'], [['count'], 'default', 'value' => 10], [['count'], 'integer', 'min' => 1, 'max' => 100]]); if (!$model->validate()) { return $this->formatError($model->getErrors(), 400); } $query = Battle::find()->innerJoinWith('user')->with(['user', 'user.userStat', 'lobby', 'rule', 'map', 'weapon', 'weapon.subweapon', 'weapon.special', 'rank', 'battleImageResult', 'battleImageJudge'])->orderBy('{{battle}}.[[id]] DESC')->limit((int) $model->count); if ($model->id != '') { $query->andWhere(['{{battle}}.[[id]]' => $model->id]); } if ($model->screen_name != '') { $query->andWhere(['{{user}}.[[screen_name]]' => $model->screen_name]); } if ($model->newer_than > 0) { $query->andWhere(['>', '{{battle}}.[[id]]', $model->newer_than]); } if ($model->older_than > 0) { $query->andWhere(['<', '{{battle}}.[[id]]', $model->older_than]); } $list = $query->all(); if ($model->id != '') { return empty($list) ? null : $this->runGetImpl(array_shift($list)); } $resp = Yii::$app->getResponse(); $resp->format = 'json'; return array_map(function ($model) { return $model->toJsonArray(); }, $list); }
public function getRecentWPData() { $query = Battle::find()->with(['rule'])->innerJoinWith(['rule', 'rule.mode'])->joinWith(['lobby'])->andWhere(['{{battle}}.[[user_id]]' => $this->user->id, '{{game_mode}}.[[key]]' => 'gachi'])->andWhere(['not', ['{{battle}}.[[is_win]]' => null]])->andWhere(['or', ['{{battle}}.[[lobby_id]]' => null], ['<>', '{{lobby}}.[[key]]', 'private']])->orderBy('{{battle}}.[[id]] DESC'); $battles = []; foreach ($query->each() as $battle) { $battles[] = (object) ['index' => -1 * count($battles), 'is_win' => $battle->is_win, 'rule' => $battle->rule->key, 'totalWP' => null, 'movingWP' => null, 'movingWP50' => null]; } if (empty($battles)) { return []; } $battles = array_reverse($battles); $fMoving = function ($range, $currentIndex) use(&$battles) { if ($currentIndex + 1 < $range) { return null; } $tmp = array_slice($battles, $currentIndex + 1 - $range, $range); $win = count(array_filter($tmp, function ($a) { return $a->is_win; })); return $win * 100 / $range; }; $totalWin = 0; $totalCount = 0; foreach ($battles as $i => $battle) { ++$totalCount; if ($battle->is_win) { ++$totalWin; } $battle->totalWP = $totalWin * 100 / $totalCount; $battle->movingWP = $fMoving(20, $i); $battle->movingWP50 = $fMoving(50, $i); } return $battles; }
public function run() { Yii::$app->response->format = 'json'; $request = Yii::$app->getRequest(); $screenName = $request->get('screen_name'); $user = null; if ($screenName != '') { if (is_scalar($screenName) && ($user = User::findOne(['screen_name' => $screenName]))) { // ok } else { return ['error' => ['screen_name' => ['not found']]]; } } $now = @$_SERVER['REQUEST_TIME'] ?: time(); $subQuery = (new \yii\db\Query())->select(['id' => 'MAX({{battle}}.[[id]])'])->from('battle')->andWhere(['>=', '{{battle}}.[[at]]', gmdate('Y-m-d H:i:sO', $now - 60 * 86400)])->groupBy('{{battle}}.[[user_id]]'); if ($user) { $subQuery->andWhere(['{{battle}}.[[user_id]]' => $user->id]); } $battles = Battle::find()->andWhere(['in', '{{battle}}.[[id]]', $subQuery])->with(['user', 'user.userStat', 'lobby', 'rule', 'map', 'weapon', 'weapon.subweapon', 'weapon.special', 'rank', 'battleImageResult', 'battleImageJudge'])->limit(500)->orderBy('{{battle}}.[[id]] DESC'); $ret = []; foreach ($battles->each() as $model) { $json = $model->user->toJsonArray(); $json['latest_battle'] = $model->toJsonArray(['user', 'death_reasons']); $ret[] = $json; } if ($user) { return count($ret) >= 1 ? array_shift($ret) : null; } return $ret; }
public function run() { $request = Yii::$app->getRequest(); $user = User::findOne(['screen_name' => $request->get('screen_name')]); if (!$user) { throw new NotFoundHttpException(Yii::t('app', 'Could not find user')); } // リスト表示モード切替 if ($request->get('v') != '') { $view = $request->get('v'); if ($view === 'simple' || $view === 'standard') { Yii::$app->response->cookies->add(new Cookie(['name' => 'battle-list', 'value' => $view, 'expire' => time() + 86400 * 366])); } $next = $_GET; unset($next['v']); $next[0] = 'show/user'; $this->controller->redirect(Url::to($next)); return; } $battle = Battle::find()->with(['lobby', 'rule', 'rule.mode', 'map', 'weapon', 'weapon.subweapon', 'weapon.special', 'rank', 'rankAfter']); $filter = new BattleFilterForm(); $filter->load($_GET); $filter->screen_name = $user->screen_name; if ($filter->validate()) { $battle->filter($filter); } $summary = $battle->summary; $permLink = Url::to(array_merge(['show/user', 'screen_name' => $user->screen_name], $filter->hasErrors() ? [] : $filter->toPermLink()), true); $isPjax = $request->isPjax; $template = $this->viewMode === 'simple' ? 'user.simple.tpl' : 'user.tpl'; return $this->controller->render($template, array_merge(['user' => $user, 'battleDataProvider' => new ActiveDataProvider(['query' => $battle, 'pagination' => ['pageSize' => 100]]), 'summary' => $summary, 'filter' => $filter, 'permLink' => $permLink], $this->makeFilterFormData($user))); }
public function postVote(Request $request, $battle_id) { $this->validate($request, ['rapper_number' => 'required|integer']); $user = Auth::user(); $battle = Battle::find($battle_id); if (is_null($user)) { return response('', 403); } // forbidden if (is_null($battle)) { return response('', 404); } // Not found // check if battle is votable if (!$battle->isOpenVoting()) { return response('', 405); } // Method not allowed // don't let the user change a vote if ($user->votes()->where('battle_id', $battle->id)->get()->first() == null) { // build new vote $vote = new Vote(); $vote->user_id = $user->id; $vote->battle_id = $battle->id; $vote->rapper_number = $request->input('rapper_number'); // update vote counter if ($vote->rapper_number == 0) { $battle->votes_rapper1++; } else { if ($vote->rapper_number == 1) { $battle->votes_rapper2++; } else { return response('', 422); } } // Unprocessable Entity // save vote count in battle $vote->save(); $battle->save(); } else { return response('', 405); // Method not allowed } }
public function run() { $subQuery = (new \yii\db\Query())->select(['id' => 'MAX({{battle}}.[[id]])'])->from('battle')->andWhere(['>=', '{{battle}}.[[at]]', gmdate('Y-m-d H:i:sO', time() - 60 * 86400)])->groupBy('{{battle}}.[[user_id]]'); $battles = Battle::find()->andWhere(['in', '{{battle}}.[[id]]', $subQuery])->with(['user', 'rule', 'map', 'battleImageResult'])->limit(500)->each(); return $this->controller->render('users.tpl', ['battles' => $battles]); }
public function run() { $active = Battle::find()->andWhere(['in', '{{battle}}.[[id]]', $this->getActiveUserBattleIdList()])->with(['user', 'rule', 'map', 'battleImageResult'])->all(); return $this->controller->render('index.tpl', ['active' => $active]); }