Inheritance: extends FOS\UserBundle\Document\User
Exemple #1
0
 /**
  * Calculate a single player new elo
  *
  * @param User $user
  * @param int $opponentElo
  * @param int $win
  * @return int
  */
 protected function calculateUserElo(User $user, $opponentElo, $win)
 {
     $score = $this->calculateScore($win);
     $expected = $this->calculateExpected($user->getElo(), $opponentElo);
     $kFactor = $this->nbRatedGamesToKfactor($user->getNbRatedGames());
     $difference = 2 * $kFactor * ($score - $expected);
     return round($user->getElo() + $difference);
 }
 public function testCalculateWithoutProvision()
 {
     $calculator = new Calculator();
     $user1 = new User();
     $user1->setElo(1313);
     $user1->setNbRatedGames(1256);
     $user2 = new User();
     $user2->setElo(1158);
     $user2->setNbRatedGames(124);
     $win = -1;
     list($newP1Elo, $newP2Elo) = $calculator->calculate($user1, $user2, $win);
     $this->assertEquals(1322, $newP1Elo);
     $this->assertEquals(1149, $newP2Elo);
 }
Exemple #3
0
 public function punish(User $user)
 {
     $this->log(sprintf('Punish player %s', $user->getUsernameWithElo()));
     $games = $this->gameRepository->findCancelableByUser($user);
     foreach ($games as $game) {
         $loser = $game->getLoser();
         if ($eloDiff = $loser->getEloDiff()) {
             if ($loserUser = $loser->getUser()) {
                 $this->log(sprintf('Restitute %d elo to %s for game %s', -$eloDiff, $loserUser->getUsername(), $game->getId()));
                 $this->eloUpdater->adjustElo($loserUser, $loserUser->getElo() - $eloDiff);
                 $game->setIsEloCanceled(true);
             }
         }
     }
     $this->log(sprintf('Reset %s elo to %d', $user->getUsername(), User::STARTING_ELO));
     $this->eloUpdater->adjustElo($user, User::STARTING_ELO);
 }
Exemple #4
0
 public function getData(User $user)
 {
     $userId = $user->getId();
     $usernames = $this->userRepository->getUsernamesIndexedById();
     $games = iterator_to_array($this->gameRepository->createRecentByUserQuery($user)->hydrate(false)->select('createdAt', 'status', 'turns', 'v', 'isRated', 'clock.l', 'clock.i', 'players.user.$id', 'players.c', 'players.w', 'players.elo', 'players.eloDiff')->getQuery()->execute());
     $data = array(array('#', 'Date (RFC 2822)', 'Color', 'Opponent', 'Result', 'Status', 'Plies', 'Variant', 'Mode', 'Time control', 'Your Elo', 'Your Elo change', 'Opponent Elo', 'Opponent Elo Change', 'Game url', 'Analysis url', 'PGN url'));
     $it = 0;
     foreach ($games as $gameId => $game) {
         list($player, $opponent) = $this->findPlayerAndOpponent($game, $userId);
         if (!empty($player['isAi'])) {
             $opponentUsername = sprintf('A.I. level %d', $opponent['aiLevel']);
         } elseif (!empty($opponent['user']['$id'])) {
             $opponentUsername = isset($usernames[(string) $opponent['user']['$id']]) ? $usernames[(string) $opponent['user']['$id']] : 'Anonymous';
         } else {
             $opponentUsername = '******';
         }
         $clock = isset($game['clock']) ? $game['clock'] : null;
         $data[] = array(++$it, date('r', $game['createdAt']->sec), $player['c'], $opponentUsername, $this->getPgnResult($game), $this->getStatusMessage($game['status']), $game['turns'] - 1, $this->getVariantName($game['v']), !empty($game['isRated']) ? 'rated' : 'casual', $clock ? sprintf('%d %d', round($clock['l'] / 60, 1), $clock['i']) : 'unlimited', (int) $player['elo'], (int) isset($player['eloDiff']) ? $player['eloDiff'] : 0, (int) isset($opponent['elo']) ? $opponent['elo'] : 0, (int) isset($opponent['eloDiff']) ? $opponent['eloDiff'] : 0, $this->urlGenerator->generate('lichess_game', array('id' => $gameId, 'color' => $player['c']), true), $this->urlGenerator->generate('lichess_pgn_viewer', array('id' => $gameId, 'color' => $player['c']), true), $this->urlGenerator->generate('lichess_pgn_export', array('id' => $gameId, 'color' => $player['c']), true));
     }
     return $data;
 }
Exemple #5
0
 public function is(User $user = null)
 {
     return $user && $user->getUsernameCanonical() === $this->getUsernameCanonical();
 }
Exemple #6
0
 /**
  * Sets: Optional registered user who owns the hook
  *
  * @param User user
  */
 public function setUser(User $user)
 {
     $this->user = $user;
     $this->username = $user->getUsername();
     $this->elo = $user->getElo();
     $this->engine = $user->isEngine();
 }
Exemple #7
0
 public function isOnline(User $user)
 {
     return $this->isUsernameOnline($user->getUsernameCanonical());
 }
Exemple #8
0
 public function __construct(User $user)
 {
     $this->id = $user->getUsernameCanonical();
     $this->addEntry($user->getCreatedAt()->getTimestamp(), User::STARTING_ELO, self::TYPE_START);
 }
Exemple #9
0
 /**
  * @param  User
  * @return null
  */
 public function setAuthor(User $author)
 {
     $this->author = $author;
     $this->authorName = $author->getUsername();
 }
 public function linkUser(User $user, $class = null)
 {
     $url = $this->getRouterGenerator()->generate('fos_user_user_show', array('username' => $user->getUsername()));
     return sprintf('<a class="user_link%s" href="%s"%s>%s</a>', $user->getIsOnline() ? ' online' : '', $url, null === $class ? '' : ' class="' . $class . '"', $user->getUsernameWithElo());
 }
Exemple #11
0
 /**
  * Get the rank of the user starting from 1 (better)
  *
  * @return int
  **/
 public function getUserRank(User $user)
 {
     return $this->createQueryBuilder()->field('elo')->gt($user->getElo())->getQuery()->count() + 1;
 }
 public function findOneByUser(User $user)
 {
     return $this->findOneBy(array('id' => $user->getUsernameCanonical()));
 }
Exemple #13
0
 public function adjustElo(User $user, $elo)
 {
     $user->setElo($elo);
     $ts = date_create()->getTimestamp();
     $this->historyRepository->findOneByUserOrCreate($user)->addAdjust($ts, $elo);
 }
 public function linkUser(User $user, $class = null, $withElo = false)
 {
     $username = $withElo ? $user->getUsernameWithElo() : $user->getUsername();
     $url = $this->getUrlGenerator()->generate('fos_user_user_show', array('username' => $user->getUsername()));
     return sprintf('<a class="user_link%s%s" href="%s">%s</a>', $user->getIsOnline() ? ' online' : '', null === $class ? '' : ' ' . $class, $url, $username);
 }
 /**
  * Get the rank of the user starting from 1 (better)
  *
  * @return int
  **/
 public function getUserRank(User $user)
 {
     return $this->createEnabledQueryBuilder()->field('elo')->gt($user->getElo())->hint(array('elo' => -1))->getQuery()->count() + 1;
 }