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')); }
/** * 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; }
/** * 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]); } }
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')); }
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; }
/** * @return \yii\db\ActiveQuery */ public function getTournaments() { return $this->hasMany(Tournaments::className(), ['country' => 'id']); }
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]); }
/** * @return \yii\db\ActiveQuery */ public function getIdTournament() { return $this->hasOne(\app\models\tournaments\Tournaments::className(), ['id_tournament' => 'id_tournament']); }
public function getTournaments() { return $this->hasMany(Tournaments::className(), ['id_tournament' => 'id_tournament'])->viaTable('{{%team_tournaments}}', ['id_team' => 'id_team']); }
/** * 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.'); } }
/** * @return \yii\db\ActiveQuery */ public function getTournament0() { return $this->hasOne(Tournaments::className(), ['id_tournament' => 'tournament']); }
* 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>";
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(); }
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; }
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(); } } }
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; }