public static function sendTourResults($tour, $tournament) { $trn = Tournaments::findOne($tournament); $recipientsUT = UsersTournaments::find()->joinWith('idUser')->where(['and', ['id_tournament' => $tournament], ['notification' => UsersTournaments::NOTIFICATION_ENABLED], ['sf_users.active' => Users::STATUS_ACTIVE]])->all(); $recipients = ArrayHelper::getColumn($recipientsUT, 'idUser'); //if not last tour - just send notifications if ($tour != $trn->num_tours) { $subject = "Результаты {$tour} тура - " . $trn->tournament_name; $thisTourForecastStanding = new ArrayDataProvider(['allModels' => Forecasts::getTopFiveForecastersWithPoints($tournament, $tour)]); //creating news for the tour $news = new News(); $news->subject = "Результаты {$tour} тура"; $news->id_tournament = $tournament; $news->body = self::generateTourNews($tournament, $tour); $news->save(); foreach ($recipients as $one) { $content = new ArrayDataProvider(['allModels' => Forecasts::getForecastResultUserTourTournament($one->id, $tour, $tournament)]); $leaderAndUser = new ArrayDataProvider(['allModels' => Forecasts::getLeaderAndUserPosition($one->id, $tournament)]); $messages[] = Yii::$app->mailer->compose('forecastResult', ['content' => $content, 'standings' => $leaderAndUser, 'user' => $one, 'tournament' => $trn->tournament_name, 'tour' => $tour, 'tourForecasts' => $thisTourForecastStanding])->setFrom([Yii::$app->params['adminEmail'] => 'Sportforecast'])->setTo($one->email)->setSubject($subject); } if (!empty($messages)) { Yii::$app->mailer->sendMultiple($messages); } } else { //todo add additional points info and tournament standings into the personal email $news = new News(); $news->subject = 'Закончен турнир ' . $trn->tournament_name; $news->body = Tournaments::generateFinalNews($tournament); $news->id_tournament = $tournament; $news->save(); //sending personal emails $standings = new ActiveDataProvider(['query' => UsersTournaments::find()->forecastersStandings($tournament), 'pagination' => false]); $subject = "Закончен турнир {$trn->tournament_name}"; foreach ($recipientsUT as $one) { $position = $one->position; $points = $one->totalPoints; if ($position == 1) { $message = "Поздравляем!!! Набрав {$points} очков, Вы стали победителем турнира!"; } else { $message = "Вы заняли {$position} место, набрав {$points} очков"; } $messages[] = Yii::$app->mailer->compose('tournamentResult', ['standings' => $standings, 'user' => $one, 'message' => $message, 'tournament' => $trn])->setFrom([Yii::$app->params['adminEmail'] => 'Sportforecast'])->setTo($one->idUser->email)->setSubject($subject); } if (!empty($messages)) { Yii::$app->mailer->sendMultiple($messages); } } }