예제 #1
0
 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);
         }
     }
 }