コード例 #1
0
 public function actionIndex()
 {
     Yii::$app->user->returnUrl = Yii::$app->request->url;
     $finishedTournaments = new ArrayDataProvider(['allModels' => Tournaments::getFinishedTournamentsOnePerCountry(), 'pagination' => false, 'sort' => ['attributes' => ['startsOn'], 'defaultOrder' => ['startsOn' => SORT_DESC]]]);
     if (Yii::$app->user->isGuest) {
         //list of active tournaments
         $tournaments = new ArrayDataProvider(['allModels' => Tournaments::activePendingTournamentsWithLeader(), 'pagination' => false]);
         return $this->render('indexGuest', compact('tournaments', 'finishedTournaments'));
     }
     //list of active tournaments
     $tournaments = new ArrayDataProvider(['allModels' => Tournaments::getActivePendingTournamentsNotParticipate(Yii::$app->user->id), 'pagination' => false, 'sort' => ['attributes' => ['startsOn'], 'defaultOrder' => ['startsOn' => SORT_DESC]]]);
     $userTournaments = new ArrayDataProvider(['allModels' => Tournaments::getActivePendingTournamentsUserParticipate(Yii::$app->user->id), 'pagination' => false]);
     return $this->render('indexUser', compact('tournaments', 'userTournaments', 'finishedTournaments'));
 }
コード例 #2
0
 /**
  * Creates data provider instance with search query applied
  *
  * @param array $params
  *
  * @return ActiveDataProvider
  */
 public function search($params)
 {
     $query = Tournaments::find()->with('country0');
     $dataProvider = new ActiveDataProvider(['query' => $query, 'sort' => new Sort(['attributes' => ['startsOn', 'country', 'is_active', 'tournament_name'], 'defaultOrder' => ['startsOn' => SORT_DESC]])]);
     $this->load($params);
     if (!$this->validate()) {
         // uncomment the following line if you do not want to any records when validation fails
         // $query->where('0=1');
         return $dataProvider;
     }
     $query->andFilterWhere(['id_tournament' => $this->id_tournament, 'country' => $this->country, 'num_tours' => $this->num_tours]);
     $query->andFilterWhere(['like', 'tournament_name', $this->tournament_name])->andFilterWhere(['like', 'is_active', $this->is_active]);
     return $dataProvider;
 }
コード例 #3
0
 /**
  * Updates an existing users model.
  * If update is successful, the browser will be redirected to the 'view' page.
  * @param string $id
  * @return mixed
  */
 public function actionUpdate($id)
 {
     $model = $this->findModel($id);
     $rbac = \Yii::$app->authManager;
     $allRoles = $rbac->getRoles();
     if ($model->load(Yii::$app->request->post()) && $model->save()) {
         foreach (Yii::$app->request->post()['role'] as $k => $one) {
             if ($one == 0 && $rbac->checkAccess($id, $k)) {
                 $rbac->revoke($rbac->getRole($k), $id);
             } elseif ($one == 1 && !$rbac->checkAccess($id, $k)) {
                 $rbac->assign($rbac->getRole($k), $id);
             }
         }
         return $this->goBack();
     } else {
         $tournaments = Tournaments::allTournamentsUserParticipated($id);
         //converting tournaments to the arraydata provider
         $arrayDataProvider = new ArrayDataProvider(['allModels' => $tournaments]);
         return $this->render('update', ['model' => $model, 'allRoles' => $allRoles, 'tournaments' => $arrayDataProvider]);
     }
 }
コード例 #4
0
 public function actionIndex($tournament)
 {
     Yii::$app->user->returnUrl = Yii::$app->request->url;
     $curr_tournament = Tournaments::findOne($tournament);
     if (Yii::$app->request->post('tours')) {
         $tours = Yii::$app->request->post('tours');
     } else {
         $tours = range(1, $curr_tournament->num_tours, 1);
     }
     $tourGames = Games::getGamesGroupedByTour($tournament, $tours);
     for ($i = 1; $i <= $curr_tournament->num_tours; $i++) {
         $tour_list[$i] = "{$i} тур";
     }
     //preparing model for creating a game
     $newGame = new Games();
     $participants = TeamTournaments::getTournamentParticipantsTeams($tournament);
     //model for uploading games from Excel
     $file = new GamesUploadForm();
     if (Yii::$app->request->post('Games')) {
         $updatedGames = Yii::$app->request->post('Games');
         foreach ($updatedGames as $k => $game) {
             $models[$k] = $this->findModel($k);
         }
         if (Games::loadMultiple($models, Yii::$app->request->post())) {
             $error = '';
             foreach ($models as $model) {
                 if (!$model->save()) {
                     $error = $error . 'Ошибка сохранения игры ' . $model->competitors . "<br>";
                 }
             }
             if ($error === '') {
                 Yii::$app->session->setFlash('status', 'Записи сохранены успешно');
             } else {
                 Yii::$app->session->setFlash('error', $error);
             }
             return $this->goBack();
         }
     }
     return $this->render('index2', compact('tourGames', 'curr_tournament', 'tour_list', 'newGame', 'participants', 'file'));
 }
コード例 #5
0
 private static function sendReminder($tour, $tournament, $users)
 {
     $subject = "Напоминание: сделайте прогноз на матчи {$tour} тура турнира " . Tournaments::findOne($tournament)->tournament_name;
     $firstGameStarts = date('d-m-Y в H:i', ArrayHelper::getValue(Result::find()->select(['min(dtime) as dtime'])->where(['id_tournament' => $tournament, 'tour' => $tour])->all()[0], 'dtime'));
     $tours = Games::getNumberOfGamesPerTour($tournament);
     foreach ($users as $user) {
         if (Forecasts::getUserForecastTour($user->id, $tournament, $tours)[$tour] == 0) {
             $description = "Вы не сделали прогноз на матчи {$tour} тура турнира " . Tournaments::findOne($tournament)->tournament_name . ". Поторопитесь, первая игра тура начинается <strong>{$firstGameStarts}</strong>";
         } else {
             $description = "Вы сделали прогноз не на все матчи: {$tour} тура турнира " . Tournaments::findOne($tournament)->tournament_name . ". Поторопитесь, первая игра тура начинается {$firstGameStarts}";
         }
         $content = new ArrayDataProvider(['allModels' => Forecasts::getTourUserForecastStatus($tour, $tournament, $user->id), 'sort' => false, 'pagination' => false]);
         $messages[] = Yii::$app->mailer->compose('reminder', ['content' => $content, 'description' => $description, 'user' => $user])->setFrom([Yii::$app->params['adminEmail'] => 'Sportforecast'])->setTo($user->email)->setSubject($subject);
         //adding a record to the DB
         $reminder = self::getReminder($user->id, $tournament, $tour);
         $reminder->save();
     }
     if (!empty($messages)) {
         Yii::$app->mailer->sendMultiple($messages);
     }
     return true;
 }
コード例 #6
0
ファイル: Countries.php プロジェクト: Andrewkha/sportforecast
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getTournaments()
 {
     return $this->hasMany(Tournaments::className(), ['country' => 'id']);
 }
コード例 #7
0
ファイル: gameTrait.php プロジェクト: Andrewkha/sportforecast
 private static function generateTourNews($tournament, $tour)
 {
     $trn = Tournaments::findOne($tournament);
     $games = new ArrayDataProvider(['allModels' => self::getTourResults($tournament, $tour), 'pagination' => false, 'sort' => false]);
     $forecasters = new ArrayDataProvider(['allModels' => Forecasts::getTopFiveForecastersWithPoints($tournament, $tour)]);
     return Yii::$app->controller->renderPartial('@app/mail/_tourResultNews', ['trn' => $trn, 'games' => $games, 'forecasters' => $forecasters, 'tour' => $tour]);
 }
コード例 #8
0
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getIdTournament()
 {
     return $this->hasOne(\app\models\tournaments\Tournaments::className(), ['id_tournament' => 'id_tournament']);
 }
コード例 #9
0
ファイル: Teams.php プロジェクト: Andrewkha/sportforecast
 public function getTournaments()
 {
     return $this->hasMany(Tournaments::className(), ['id_tournament' => 'id_tournament'])->viaTable('{{%team_tournaments}}', ['id_team' => 'id_team']);
 }
コード例 #10
0
 /**
  * Finds the tournaments model based on its primary key value.
  * If the model is not found, a 404 HTTP exception will be thrown.
  * @param integer $id
  * @return tournaments the loaded model
  * @throws NotFoundHttpException if the model cannot be found
  */
 protected function findModel($id)
 {
     if (($model = Tournaments::findOne($id)) !== null) {
         return $model;
     } else {
         throw new NotFoundHttpException('The requested page does not exist.');
     }
 }
コード例 #11
0
ファイル: Reminders.php プロジェクト: Andrewkha/sportforecast
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getTournament0()
 {
     return $this->hasOne(Tournaments::className(), ['id_tournament' => 'tournament']);
 }
コード例 #12
0
 * Time: 12:43 PM
 */
use app\components\grid\extendedGridView;
use yii\helpers\Html;
use yii\bootstrap\Collapse;
use app\models\teams\Teams;
use yii\bootstrap\ActiveForm;
?>
<div class="row">
    <div class = "col-xs-12">
        <h3 class = 'text-center'>Ближайшие матчи</h3>
        <?php 
foreach ($games as $tournament) {
    ?>
            <?php 
    $tournamentModel = \app\models\tournaments\Tournaments::findOne(['id_tournament' => $tournament['id_tournament']]);
    ?>
            <?php 
    $content = '';
    ?>
            <?php 
    if (time() < $tournamentModel->wfDueTo) {
        ?>
                <?php 
        $content .= "Вы можете " . Html::a('сделать прогноз на призеров турнира ', ['tournaments/details', 'id' => $tournament['id_tournament']]) . "и заработать дополнительные очки";
        ?>
            <?php 
    }
    ?>
            <?php 
    $content .= "<p class = 'text-right'>" . Html::a("<i class = 'fa fa-list-alt'></i> Все игры", ['tournaments/details', 'id' => $tournament['id_tournament']]) . "</p>";
コード例 #13
0
 public function actionParticipate($id)
 {
     $tournament = Tournaments::findOne($id);
     if (UsersTournaments::find()->where(['id_tournament' => $id])->andWhere(['id_user' => Yii::$app->user->id])->exists()) {
         Yii::$app->session->setFlash('success', "Вы уже участвуете в турнире {$tournament->tournament_name}");
         return $this->goBack();
     }
     $model = new UsersTournaments();
     $model->id_tournament = $id;
     $model->id_user = Yii::$app->user->id;
     $model->save();
     Yii::$app->session->setFlash('success', "Вы теперь участвуете в турнире {$tournament->tournament_name}");
     return $this->goBack();
 }
コード例 #14
0
 private static function unionQueryPrep($array)
 {
     $query = [];
     foreach ($array as $one) {
         $query[] = Tournaments::find()->where(['{{%tournaments}}.id_tournament' => $one])->joinWith(['usersTournaments' => function ($query) {
             $query->with('idUser')->orderBy(['points' => SORT_DESC])->limit(1);
         }])->with('country0')->one();
     }
     return $query;
 }
コード例 #15
0
ファイル: Games.php プロジェクト: Andrewkha/sportforecast
 public function afterSave($insert, $changedAttributes)
 {
     parent::afterSave($insert, $changedAttributes);
     //getting the tournament number
     $tournament = ArrayHelper::getValue(Result::find()->where(['id_game' => $this->id_game])->one(), 'id_tournament');
     //updating the forecast points for the game
     if (!$insert) {
         Forecasts::setForecastPoints($this->id_game, $this->score_home, $this->score_guest, $tournament);
     }
     //if tour finished, need to send notifications (if not already sent) and put tournament as finished if it was last tour
     /**
      * @var $tournamentModel \app\models\tournaments\Tournaments
      */
     if (self::isTourFinished($tournament, $this->tour)) {
         $tournamentModel = Tournaments::findOne($tournament);
         if ($tournamentModel->num_tours == $this->tour) {
             $tournamentModel->is_active = Tournaments::FINISHED;
             $tournamentModel->save(false);
         }
         if (!TourResultNotifications::ifExists($this->tour, $tournament)) {
             self::sendTourResults($this->tour, $tournament);
             $notification = new TourResultNotifications();
             $notification->tour = $this->tour;
             $notification->tournament = $tournament;
             $notification->save();
         }
     }
 }
コード例 #16
0
 public function actionAutoreminder()
 {
     $tournaments = Tournaments::find()->where(['not', ['is_active' => Tournaments::FINISHED]])->all();
     foreach ($tournaments as &$tournament) {
         if ($tournament->is_active == Tournaments::NOT_STARTED && $tournament->startsOn - time() < 60 * 60 * 24 * 5) {
             $tournament->is_active = Tournaments::GOING;
             $tournament->save(false);
         }
         $nextTour = Tournaments::getNextTour($tournament->id_tournament);
         if ($nextTour != NULL) {
             $firstGameStarts = ArrayHelper::getValue(Result::find()->select(['min(dtime) as dtime'])->where(['id_tournament' => $tournament->id_tournament, 'tour' => $nextTour])->all()[0], 'dtime');
             if ($firstGameStarts > time() + 60 * 60 * 24 * 4 && $firstGameStarts < time() + 60 * 60 * 24 * 5 || $firstGameStarts > time() + 60 * 60 * 24 * 2 && $firstGameStarts < time() + 60 * 60 * 24 * 3) {
                 $sendReminders = Reminders::sendAutoReminder($nextTour, $tournament->id_tournament);
                 Yii::info("Task Autoreminder for {$tournament->tournament_name} {$nextTour} tour has been executed", 'console');
             }
         }
     }
     return 0;
 }