Esempio n. 1
0
 private static function getFutureGamesGroupedByTourWithForecast($tournament, $user)
 {
     $trn = Tournaments::findOne($tournament);
     //first we need to get the ids of teams
     $id_teams = ArrayHelper::getColumn(TeamTournaments::find()->where(['id_tournament' => $tournament])->all(), 'id');
     $teamsCount = count($id_teams);
     $games = self::find()->with('idTeamHome.idTeam', 'idTeamGuest.idTeam')->where(['or', ['in', 'id_team_home', $id_teams], ['in', 'id_team_guest', $id_teams]])->andWhere(['>=', 'date_time_game', time()])->orderBy(['tour' => SORT_ASC])->addOrderBy(['date_time_game' => SORT_ASC])->limit($teamsCount)->indexBy('id_game')->asArray()->all();
     $forecasts = Forecasts::find()->where(['in', 'id_game', ArrayHelper::getColumn($games, 'id_game')])->andWhere(['id_user' => $user])->indexBy('id_game')->asArray()->all();
     $tours = array_unique(ArrayHelper::getColumn($games, 'tour'));
     $return = [];
     foreach ($tours as $tour) {
         foreach ($games as $k => $game) {
             if ($game['tour'] == $tour) {
                 $return[$tour][$k] = ArrayHelper::remove($games, $k);
                 if (isset($forecasts[$k])) {
                     $return[$tour][$k]['fpoints'] = $forecasts[$k]['points'];
                     $return[$tour][$k]['id_user_forecast'] = $forecasts[$k]['id_user'];
                     $return[$tour][$k]['fscore_home'] = $forecasts[$k]['fscore_home'];
                     $return[$tour][$k]['fscore_guest'] = $forecasts[$k]['fscore_guest'];
                     $return[$tour][$k]['f_id'] = $forecasts[$k]['id'];
                     $return[$tour][$k]['f_date'] = $forecasts[$k]['date'];
                 }
                 $return[$tour][$k]['recent'] = new ArrayDataProvider(['allModels' => Result::getLastFiveConfrontations($game['idTeamHome']['id_team'], $game['idTeamGuest']['id_team'])]);
                 $return[$tour][$k]['recentHome'] = new ArrayDataProvider(['allModels' => Result::getLastFiveGames($game['idTeamHome']['id_team'])]);
                 $return[$tour][$k]['recentGuest'] = new ArrayDataProvider(['allModels' => Result::getLastFiveGames($game['idTeamGuest']['id_team'])]);
             }
         }
     }
     $dataProvider = [];
     foreach ($return as $k => $one) {
         $dataProvider[$k] = new ArrayDataProvider(['allModels' => $one]);
     }
     return $dataProvider;
 }