@@ -181,50 +181,47 @@ sub edit_handler ($c) {
181
181
# Handler for assigning achievements to users
182
182
sub assign_handler ($c ) {
183
183
my $db = $c -> db;
184
- my @users = $db -> listUsers;
185
184
my $overwrite = $c -> param(' action.assign.overwrite' ) eq ' everything' ;
186
185
my $scope = $c -> param(' action.assign.scope' );
187
186
my @achievementIDs = $scope eq ' all' ? @{ $c -> {allAchievementIDs } } : @{ $c -> {selectedAchievementIDs } };
188
187
189
- # Enable all achievements
188
+ my @users = $db -> listUsers;
190
189
my @achievements = $db -> getAchievements(@achievementIDs );
191
190
192
- for my $achievement (@achievements ) {
193
- $achievement -> enabled(1);
194
- $db -> putAchievement($achievement );
195
- }
196
-
197
- # Assign globalUserAchievement data, overwriting if necc
191
+ # Enable all achievements.
192
+ for my $achievement (@achievements ) { $achievement -> enabled(1); }
193
+ $db -> Achievement-> update_records(\@achievements ) if @achievements ;
198
194
195
+ # Assign globalUserAchievement data, overwriting if necessary.
196
+ my (@globalAchievementRecordsToAdd , @globalAchievementRecordsToPut );
197
+ my %existingGlobalUserAchievements = map { $_ => 1 } $db -> listGlobalUserAchievements;
199
198
for my $user (@users ) {
200
- if (not $db -> existsGlobalUserAchievement($user )) {
201
- my $globalUserAchievement = $db -> newGlobalUserAchievement();
202
- $globalUserAchievement -> user_id($user );
203
- $db -> addGlobalUserAchievement($globalUserAchievement );
199
+ my $globalUserAchievement = $db -> newGlobalUserAchievement(user_id => $user );
200
+ if (!$existingGlobalUserAchievements {$user }) {
201
+ push (@globalAchievementRecordsToAdd , $globalUserAchievement );
204
202
} elsif ($overwrite ) {
205
- my $globalUserAchievement = $db -> newGlobalUserAchievement();
206
- $globalUserAchievement -> user_id($user );
207
- $db -> putGlobalUserAchievement($globalUserAchievement );
203
+ push (@globalAchievementRecordsToPut , $globalUserAchievement );
208
204
}
209
205
}
206
+ $db -> GlobalUserAchievement-> insert_records(\@globalAchievementRecordsToAdd ) if @globalAchievementRecordsToAdd ;
207
+ $db -> GlobalUserAchievement-> update_records(\@globalAchievementRecordsToPut ) if @globalAchievementRecordsToPut ;
210
208
211
- # Assign userAchievement data, overwriting if necc
212
-
209
+ # Assign userAchievement data, overwriting if necessary.
210
+ my ( @userAchievementRecordsToAdd , @userAchievementRecordsToPut );
213
211
for my $achievementID (@achievementIDs ) {
212
+ my %existingUserAchievements =
213
+ map { $_ -> [0] => 1 } $db -> listUserAchievementsWhere({ achievement_id => $achievementID });
214
214
for my $user (@users ) {
215
- if (not $db -> existsUserAchievement($user , $achievementID )) {
216
- my $userAchievement = $db -> newUserAchievement();
217
- $userAchievement -> user_id($user );
218
- $userAchievement -> achievement_id($achievementID );
219
- $db -> addUserAchievement($userAchievement );
215
+ my $userAchievement = $db -> newUserAchievement(user_id => $user , achievement_id => $achievementID );
216
+ if (!$existingUserAchievements {$user }) {
217
+ push (@userAchievementRecordsToAdd , $userAchievement );
220
218
} elsif ($overwrite ) {
221
- my $userAchievement = $db -> newUserAchievement();
222
- $userAchievement -> user_id($user );
223
- $userAchievement -> achievement_id($achievementID );
224
- $db -> putUserAchievement($userAchievement );
219
+ push (@userAchievementRecordsToPut , $userAchievement );
225
220
}
226
221
}
227
222
}
223
+ $db -> UserAchievement-> insert_records(\@userAchievementRecordsToAdd ) if @userAchievementRecordsToAdd ;
224
+ $db -> UserAchievement-> update_records(\@userAchievementRecordsToPut ) if @userAchievementRecordsToPut ;
228
225
229
226
return (1, $c -> maketext(' Assigned achievements to users.' ));
230
227
}
@@ -447,7 +444,7 @@ sub import_handler ($c) {
447
444
$count ++;
448
445
$allAchievementIDs {$achievement_id } = 1;
449
446
450
- # Assign to usesrs if neccessary
447
+ # Assign to users if necessary.
451
448
if ($assign eq " all" ) {
452
449
for my $user (@users ) {
453
450
if (not $db -> existsGlobalUserAchievement($user )) {
0 commit comments