<?php $form_url = Routing::getUrlFor(array('module' => $g_current_module, 'action' => $g_current_action)); $player = ModelPlayer::getById($_GET['id']); $rankings = ModelRanking::getForPlayer($_GET['id']); ?> <h2><?php echo $player['first_name'] . ' ' . $player['last_name']; ?> </h2> <form class="form-horizontal" action="<?php echo $form_url; ?> " method="post"> <div class="form-group"> <label for="first_name" class="col-sm-2 control-label">Prénom</label> <div class="col-sm-10"> <input class="form-control" type="text" name="first_name" value="<?php echo htmlspecialchars($player['first_name']); ?> " /> </div> </div> <div class="form-group"> <label for="last_name" class="col-sm-2 control-label">Nom</label> <div class="col-sm-10"> <input class="form-control" type="text" name="last_name" value="<?php echo htmlspecialchars($player['last_name']);
<?php include_once 'model/Player.php'; $rows = ModelPlayer::get(array('order_by' => 'first_name, last_name')); ?> <h2>Liste des joueurs</h2> <?php if (count($rows) > 0) { ?> <table class="table table-hover"> <thead> <tr> <!-- <th>ID</th> --> <th>Prénom</th> <th>Nom</th> </tr> </thead> <tbody> <?php foreach ($rows as $row) { echo '<tr class="clickable" data-href="' . Routing::getUrlFor(array('module' => $module_code, 'action' => 'detail', 'id' => $row['id'])) . '"> <!-- <td class="text-right">' . $row['id'] . '</td> --> <td>' . $row['first_name'] . '</td> <td>' . $row['last_name'] . '</td> </tr>' . "\n"; } ?> </tbody> </table>
static function get($id_set_type, $date = NULL) { $id_set_type = intval($id_set_type); // retrieve the distinct list of players who have played the asked set type $conditions = 'id_set_type = ' . $id_set_type . ($date !== NULL ? " AND creation_datetime < '" . $date . "'" : ''); $ar_id_players = Database::fetchAll('SELECT DISTINCT id_player FROM ( (SELECT DISTINCT id_player_1_win AS id_player FROM bad_set WHERE ' . $conditions . ') UNION (SELECT DISTINCT id_player_2_win AS id_player FROM bad_set WHERE ' . $conditions . ') UNION (SELECT DISTINCT id_player_1_lose AS id_player FROM bad_set WHERE ' . $conditions . ') UNION (SELECT DISTINCT id_player_2_lose AS id_player FROM bad_set WHERE ' . $conditions . ') ) AS t WHERE id_player IS NOT NULL'); $count_id_players = count($ar_id_players); if ($count_id_players == 0) { // nobody played a set for the asked set type return array(); } $ar_count_players = array(); foreach ($ar_id_players as $row) { $ar_count_players[$row['id_player']] = NULL; } $count_scores_retrieved = 0; $resource = Database::query('SELECT * FROM bad_set WHERE ' . $conditions . ' ORDER BY creation_datetime DESC'); while ($row = Database::fetchAssoc($resource)) { self::addScore($ar_count_players, $count_scores_retrieved, array('id_player' => $row['id_player_1_win'], 'score' => $row['new_score_player_1_win'])); self::addScore($ar_count_players, $count_scores_retrieved, array('id_player' => $row['id_player_2_win'], 'score' => $row['new_score_player_2_win'])); self::addScore($ar_count_players, $count_scores_retrieved, array('id_player' => $row['id_player_1_lose'], 'score' => $row['new_score_player_1_lose'])); self::addScore($ar_count_players, $count_scores_retrieved, array('id_player' => $row['id_player_2_lose'], 'score' => $row['new_score_player_2_lose'])); } // add player data $players = ModelPlayer::get(); $players_indexed_by_id = array(); foreach ($players as $player) { $players_indexed_by_id[$player['id']] = $player; } foreach ($ar_count_players as &$count_player) { $player = $players_indexed_by_id[$count_player['id']]; $count_player['first_name'] = $player['first_name']; $count_player['last_name'] = $player['last_name']; } unset($count_player); // order $ar_count_players by score desc uasort($ar_count_players, array('self', 'sortByScoreDesc')); // compute ranks & "fair ranks" (same score = same rank) $rank = 1; $fair_rank = 1; $approved_rank = 1; $approved_fair_rank = 1; $previous_score = NULL; $previous_approved_score = NULL; foreach ($ar_count_players as &$player) { // basic ranking (allows to track ranking evolution) if ($previous_score != $player['score']) { $fair_rank = $rank; } $player['rank'] = $rank; $player['fair_rank'] = $fair_rank; $rank++; $previous_score = $player['score']; // 'approved' ranking if ($player['nb_sets'] >= MIN_SETS_FOR_BEING_RANKED) { if ($previous_approved_score != $player['score']) { $approved_fair_rank = $approved_rank; } $player['approved_rank'] = $approved_fair_rank; $approved_rank++; $previous_approved_score = $player['score']; } else { $player['approved_rank'] = NULL; } } unset($player); // compute "fair rank diff" (helps to show how players ranking have evolved since previous training session) if ($date === NULL) { $now = new DateTime(); $previous_rankings = self::get($id_set_type, $now->sub(new DateInterval(RANKINGS_COMPARISON_TIME_INTERVAL))->format('Y-m-d H:i:s')); foreach ($ar_count_players as &$player) { $player['fair_rank_diff'] = 0; foreach ($previous_rankings as $prev_player) { if ($player['id'] == $prev_player['id']) { $player['fair_rank_diff'] = $prev_player['fair_rank'] - $player['fair_rank']; break; } } } unset($player); } return $ar_count_players; }