public static function updatePlayerPoints($playerIds, $createdDate) { // tour $db = new Util\Data(); $sql = 'SELECT player_id, SUM(tp.points) as points, COUNT(player_id) as total FROM bus_tournament_player tp JOIN bus_tournament t ON t.id = tp.tournament_id WHERE t.start_date > NOW() - INTERVAL ' . Engine::DAY * 336 . ' HOUR AND tp.points > 0 AND player_id IN (' . implode(',', $playerIds) . ') GROUP BY player_id ORDER BY points DESC'; $result = $db->select($sql); if (count($result) == 0) { return; } while ($row = $result->fetch(\PDO::FETCH_ASSOC)) { if ($row['total'] <= 18) { \Own\Bus\Player\Data::updateTourPointsByPlayerId($row['player_id'], $row['points']); continue; } $sql = 'SELECT SUM(points) as points FROM ( SELECT points FROM bus_tournament_player tp JOIN bus_tournament t ON t.id = tp.tournament_id WHERE player_id = ? AND t.start_date > NOW() - INTERVAL ? HOUR ORDER BY points DESC LIMIT 18 ) AS subquery'; $subRow = $db->selectOne($sql, [$row['player_id'], Engine::DAY * 336]); if (isset($subRow)) { \Own\Bus\Player\Data::updateTourPointsByPlayerId($row['player_id'], $subRow['points']); } } // race $startYearDate = \Own\Bus\Engine::getStartYearDate($createdDate); $sql = 'SELECT player_id, SUM(tp.points) as points, COUNT(player_id) as total FROM bus_tournament_player tp JOIN bus_tournament t ON t.id = tp.tournament_id WHERE t.start_date > \'' . $startYearDate . '\' AND tp.points > 0 AND player_id IN (' . implode(',', $playerIds) . ') GROUP BY player_id ORDER BY points DESC'; $result = $db->execute($sql); if (count($result) == 0) { return; } while ($row = $result->fetch(\PDO::FETCH_ASSOC)) { if ($row['total'] <= 18) { \Own\Bus\Player\Data::updateRacePointsByPlayerId($row['player_id'], $row['points']); continue; } $sql = 'SELECT SUM(points) as points FROM ( SELECT points FROM bus_tournament_player tp JOIN bus_tournament t ON t.id = tp.tournament_id WHERE player_id = ? AND t.start_date > ? ORDER BY points DESC LIMIT 18 ) AS subquery'; $subRow = $db->selectOne($sql, [$row['player_id'], $startYearDate]); if (isset($subRow)) { \Own\Bus\Player\Data::updateRacePointsByPlayerId($row['player_id'], $subRow['points']); } } }
public function tour_points() { // auth Util\Auth::isAuthorized($this->signedUser, 'member', false, '/profile/sign-in'); \Own\Bus\Match\Data::checkMatchToView($this->player->getId()); $race = Util\Converter::toBool('race', 'get', true); // params $id = Util\Converter::toInt('id'); if ($id == 0) { $player = $this->player; } else { $player = \Own\Bus\Player\Data::loadById($id); if (!isset($player)) { $player = $this->player; } } if ($race) { $options = []; $options['join'][] = 'bus_tournament tournament ON tournament.id = tournament_player.tournament_id'; $options['where'][] = 'tournament.status = ' . TournamentStatus::FINISHED; $options['where'][] = 'tournament.start_date > \'' . Engine::getStartYearDate($this->app->site()->getCreatedDate()) . '\''; $options['order'][] = 'points DESC'; $tournaments = \Own\Bus\TournamentPlayer\Data::loadAllByPlayerId($player->getId(), $options); $oldTournaments = null; } else { $options = []; $options['join'][] = 'bus_tournament tournament ON tournament.id = tournament_player.tournament_id'; $options['where'][] = 'tournament.status = ' . TournamentStatus::FINISHED; $options['where'][] = 'tournament.start_date > NOW() - INTERVAL ' . Engine::DAY * 336 . ' HOUR'; $options['order'][] = 'points DESC'; $tournaments = \Own\Bus\TournamentPlayer\Data::loadAllByPlayerId($player->getId(), $options); $options = []; $options['join'][] = 'bus_tournament tournament ON tournament.id = tournament_player.tournament_id'; $options['where'][] = 'tournament.status = ' . TournamentStatus::FINISHED; $options['where'][] = 'tournament.start_date < NOW() - INTERVAL ' . Engine::DAY * 336 . ' HOUR'; $options['order'][] = 'tournament.start_date DESC'; $oldTournaments = \Own\Bus\TournamentPlayer\Data::loadAllByPlayerId($player->getId(), $options); } // view $this->setTpl(); // filter $tplFilter = new Util\Template(Util\Template::SITE, ['www']); $tplFilter->set('race', $race); $tplFilter->set('playerId', $player->getId()); // main $tplMain = new Util\Template(Util\Template::SITE, ['www']); $tplMain->set('username', $player->getUsername()); $tplMain->set('tournaments', $tournaments); $tplMain->set('oldTournaments', $oldTournaments); // layout $this->tplLayout->set('column1', $tplFilter->render('profile-tour-point-filter')); $this->tplLayout->add('column1', $tplMain->render('profile-tour-point')); // template $this->tplMaster->set('layout', $this->tplLayout->render('layout-center')); return $this->tplMaster->render('tpl-default'); }