@@ -196,50 +196,48 @@ sub edit_handler ($c) {
196
196
# Handler for assigning achievements to users
197
197
sub assign_handler ($c ) {
198
198
my $db = $c -> db;
199
- my @users = $db -> listUsers;
200
199
my $overwrite = $c -> param(' action.assign.overwrite' ) eq ' everything' ;
201
200
my $scope = $c -> param(' action.assign.scope' );
202
201
my @achievementIDs = $scope eq ' all' ? @{ $c -> {allAchievementIDs } } : @{ $c -> {selectedAchievementIDs } };
203
202
204
- # Enable all achievements
205
- my @achievements = $db -> getAchievements( @achievementIDs );
203
+ my @users = $db -> listUsers;
204
+ my @achievements = $db -> getAchievementsWhere({ achievement_id => \ @achievementIDs } );
206
205
207
- for my $achievement (@achievements ) {
208
- $achievement -> enabled(1);
209
- $db -> putAchievement($achievement );
210
- }
211
-
212
- # Assign globalUserAchievement data, overwriting if necc
206
+ # Enable all achievements.
207
+ for my $achievement (@achievements ) { $achievement -> enabled(1); }
208
+ $db -> {achievement }-> update_records(\@achievements ) if @achievements ;
213
209
210
+ # Assign globalUserAchievement data, overwriting if necessary.
211
+ my (@globalAchievementRecordsToAdd , @globalAchievementRecordsToPut );
212
+ my %existingGlobalUserAchievements =
213
+ map { $_ -> user_id => $_ } $db -> getGlobalUserAchievementsWhere({ user_id => \@users });
214
214
for my $user (@users ) {
215
- if (not $db -> existsGlobalUserAchievement($user )) {
216
- my $globalUserAchievement = $db -> newGlobalUserAchievement();
217
- $globalUserAchievement -> user_id($user );
218
- $db -> addGlobalUserAchievement($globalUserAchievement );
215
+ my $globalUserAchievement = $db -> newGlobalUserAchievement(user_id => $user );
216
+ if (!$existingGlobalUserAchievements {$user }) {
217
+ push (@globalAchievementRecordsToAdd , $globalUserAchievement );
219
218
} elsif ($overwrite ) {
220
- my $globalUserAchievement = $db -> newGlobalUserAchievement();
221
- $globalUserAchievement -> user_id($user );
222
- $db -> putGlobalUserAchievement($globalUserAchievement );
219
+ push (@globalAchievementRecordsToPut , $globalUserAchievement );
223
220
}
224
221
}
222
+ $db -> {global_user_achievement }-> insert_records(\@globalAchievementRecordsToAdd ) if @globalAchievementRecordsToAdd ;
223
+ $db -> {global_user_achievement }-> update_records(\@globalAchievementRecordsToPut ) if @globalAchievementRecordsToPut ;
225
224
226
- # Assign userAchievement data, overwriting if necc
227
-
225
+ # Assign userAchievement data, overwriting if necessary.
226
+ my ( @userAchievementRecordsToAdd , @userAchievementRecordsToPut );
228
227
for my $achievementID (@achievementIDs ) {
228
+ my %existingUserAchievements =
229
+ map { $_ -> user_id => $_ } $db -> getUserAchievementsWhere({ achievement_id => $achievementID });
229
230
for my $user (@users ) {
230
- if (not $db -> existsUserAchievement($user , $achievementID )) {
231
- my $userAchievement = $db -> newUserAchievement();
232
- $userAchievement -> user_id($user );
233
- $userAchievement -> achievement_id($achievementID );
234
- $db -> addUserAchievement($userAchievement );
231
+ my $userAchievement = $db -> newUserAchievement(user_id => $user , achievement_id => $achievementID );
232
+ if (!$existingUserAchievements {$user }) {
233
+ push (@userAchievementRecordsToAdd , $userAchievement );
235
234
} elsif ($overwrite ) {
236
- my $userAchievement = $db -> newUserAchievement();
237
- $userAchievement -> user_id($user );
238
- $userAchievement -> achievement_id($achievementID );
239
- $db -> putUserAchievement($userAchievement );
235
+ push (@userAchievementRecordsToPut , $userAchievement );
240
236
}
241
237
}
242
238
}
239
+ $db -> {achievement_user }-> insert_records(\@userAchievementRecordsToAdd ) if @userAchievementRecordsToAdd ;
240
+ $db -> {achievement_user }-> update_records(\@userAchievementRecordsToPut ) if @userAchievementRecordsToPut ;
243
241
244
242
return (1, $c -> maketext(' Assigned achievements to users.' ));
245
243
}
@@ -462,7 +460,7 @@ sub import_handler ($c) {
462
460
$count ++;
463
461
$allAchievementIDs {$achievement_id } = 1;
464
462
465
- # Assign to usesrs if neccessary
463
+ # Assign to users if necessary.
466
464
if ($assign eq " all" ) {
467
465
for my $user (@users ) {
468
466
if (not $db -> existsGlobalUserAchievement($user )) {
0 commit comments