@@ -46,37 +46,40 @@ sub initialize ($c) {
46
46
my %globalUserAchievements =
47
47
map { $_ -> user_id => $_ } $db -> getGlobalUserAchievementsWhere({ user_id => { not_like => ' set_id:%' } });
48
48
49
- my @allBadgeIDs = $db -> listAchievements;
50
- my @allBadges = @allBadgeIDs ? sortAchievements($db -> getAchievements(@allBadgeIDs )) : ();
51
-
52
49
$c -> {showUserNames } = $c -> authz-> hasPermissions($c -> {userName }, ' view_leaderboard_usernames' );
53
50
$c -> {showLevels } = 0; # Hide level column unless at least one user has a level achievement.
54
51
52
+ my %allUserAchievements ;
53
+ for ($db -> getUserAchievementsWhere({
54
+ user_id => { not_like => ' set_id:%' },
55
+ achievement_id => [ map { $_ -> achievement_id } grep { $_ -> category ne ' level' } @achievements ],
56
+ }))
57
+ {
58
+ $allUserAchievements { $_ -> user_id }{ $_ -> achievement_id } = $_ ;
59
+ }
60
+
55
61
my @rows ;
56
62
for my $user ($db -> getUsersWhere({ user_id => { not_like => ' set_id:%' } })) {
57
63
# Only include users who can be shown in stats.
58
64
next unless $ce -> status_abbrev_has_behavior($user -> status, ' include_in_stats' );
59
65
66
+ my $globalData = $globalUserAchievements { $user -> user_id };
67
+ my $userAchievements = $allUserAchievements { $user -> user_id };
68
+
60
69
# Skip unless user has achievement data.
61
- my $globalData = $globalUserAchievements { $user -> user_id };
62
- next unless $globalData ;
70
+ next unless $globalData && $userAchievements ;
63
71
64
72
my $level = $globalData -> level_achievement_id ? $achievementsById { $globalData -> level_achievement_id } : ' ' ;
65
73
66
- my %userAchievements = map { $_ -> achievement_id => $_ } $db -> getUserAchievementsWhere({
67
- user_id => $user -> user_id,
68
- achievement_id => [ map { $_ -> achievement_id } grep { $_ -> category ne ' level' } @achievements ],
69
- });
70
-
71
74
my @badges ;
72
75
for my $achievement (@achievements ) {
73
76
# Skip level achievements and only show earned achievements.
74
77
last if $achievement -> category eq ' level' ;
75
78
76
79
push (@badges , $achievement )
77
- if $userAchievements { $achievement -> achievement_id }
80
+ if $userAchievements -> { $achievement -> achievement_id }
78
81
&& $achievement -> enabled
79
- && $userAchievements { $achievement -> achievement_id }-> earned;
82
+ && $userAchievements -> { $achievement -> achievement_id }-> earned;
80
83
}
81
84
82
85
push (@rows , [ $globalData -> achievement_points || 0, $level , $user , \@badges ]);
0 commit comments