new: usr: add new profile charts and stats - & add new logo to the tech stack #5
This commit is contained in:
@@ -112,16 +112,22 @@ class ProfileController extends AbstractController
|
||||
|
||||
$months = array_column(array_values($monthlyData), 'label');
|
||||
|
||||
$bonus = $this->repo->findBonusStatsForUser($user);
|
||||
|
||||
return $this->render('Security/profile.html.twig', [
|
||||
'stats' => [
|
||||
'total' => $total,
|
||||
'wins' => $wins,
|
||||
'losses' => $losses,
|
||||
'draws' => $draws,
|
||||
'bombs' => $this->repo->countBombsForUser($user),
|
||||
'winRate' => $total > 0 ? (int)round($wins / $total * 100) : 0,
|
||||
'avgScore' => $this->repo->findAvgScoreForUser($user),
|
||||
'bestScore' => $this->repo->findBestScoreForUser($user),
|
||||
'total' => $total,
|
||||
'wins' => $wins,
|
||||
'losses' => $losses,
|
||||
'draws' => $draws,
|
||||
'minesHit' => $this->repo->findTotalMinesForUser($user),
|
||||
'winRate' => $total > 0 ? (int)round($wins / $total * 100) : 0,
|
||||
'avgScore' => $this->repo->findAvgScoreForUser($user),
|
||||
'bonusPoints' => $bonus['totalBonusPoints'],
|
||||
'avgBonus' => $bonus['avgBonusPoints'],
|
||||
'bestChain' => $bonus['bestChain'],
|
||||
'blindHits' => $bonus['totalBlindHits'],
|
||||
'edgeMines' => $bonus['totalEdgeMines'],
|
||||
],
|
||||
'recent' => ($recent = $this->repo->findRecentFinishedForUser($user)),
|
||||
'gamesData' => array_map(function (PlayedGame $game) use ($userId, $cacheManager): array {
|
||||
@@ -170,17 +176,41 @@ class ProfileController extends AbstractController
|
||||
];
|
||||
}, $recent),
|
||||
'chartData' => [
|
||||
'months' => $months,
|
||||
'wins' => array_column(array_values($monthlyData), 'wins'),
|
||||
'losses' => array_column(array_values($monthlyData), 'losses'),
|
||||
'draws' => array_column(array_values($monthlyData), 'draws'),
|
||||
'pieWins' => $wins,
|
||||
'pieLosses' => $losses,
|
||||
'pieDraws' => $draws,
|
||||
'months' => $months,
|
||||
'wins' => array_column(array_values($monthlyData), 'wins'),
|
||||
'losses' => array_column(array_values($monthlyData), 'losses'),
|
||||
'draws' => array_column(array_values($monthlyData), 'draws'),
|
||||
'pieWins' => $wins,
|
||||
'pieLosses' => $losses,
|
||||
'pieDraws' => $draws,
|
||||
'recentGames' => $this->buildRecentGamesSeries($user, $userId),
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Build per-game data for the last 15 finished games, oldest → newest.
|
||||
*
|
||||
* @return array{labels:string[],mines:int[],bonus:float[]}
|
||||
*/
|
||||
private function buildRecentGamesSeries(User $user, int $userId): array
|
||||
{
|
||||
$recent = $this->repo->findRecentFinishedForUser($user, 15);
|
||||
$recent = array_reverse($recent);
|
||||
|
||||
$labels = [];
|
||||
$mines = [];
|
||||
$bonus = [];
|
||||
foreach ($recent as $i => $game) {
|
||||
$isRed = $game->getRed()?->getId() === $userId;
|
||||
$labels[] = '#' . ($i + 1);
|
||||
$mines[] = (int) ($isRed ? $game->getRedPoints() : $game->getBluePoints());
|
||||
$bonus[] = (float) ($isRed ? $game->getRedBonusPoints() : $game->getBlueBonusPoints()) ?: 0;
|
||||
}
|
||||
|
||||
return ['labels' => $labels, 'mines' => $mines, 'bonus' => $bonus];
|
||||
}
|
||||
|
||||
#[Route(
|
||||
'/battle/{uuid}',
|
||||
name: 'MineSeekerBundle_battle_share',
|
||||
|
||||
Reference in New Issue
Block a user