Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 24 additions & 27 deletions lib/WeBWorK/ContentGenerator/Instructor/AchievementList.pm
Original file line number Diff line number Diff line change
Expand Up @@ -181,50 +181,47 @@ sub edit_handler ($c) {
# Handler for assigning achievements to users
sub assign_handler ($c) {
my $db = $c->db;
my @users = $db->listUsers;
my $overwrite = $c->param('action.assign.overwrite') eq 'everything';
my $scope = $c->param('action.assign.scope');
my @achievementIDs = $scope eq 'all' ? @{ $c->{allAchievementIDs} } : @{ $c->{selectedAchievementIDs} };

# Enable all achievements
my @users = $db->listUsers;
my @achievements = $db->getAchievements(@achievementIDs);

for my $achievement (@achievements) {
$achievement->enabled(1);
$db->putAchievement($achievement);
}

# Assign globalUserAchievement data, overwriting if necc
# Enable all achievements.
for my $achievement (@achievements) { $achievement->enabled(1); }
$db->Achievement->update_records(\@achievements) if @achievements;

# Assign globalUserAchievement data, overwriting if necessary.
my (@globalAchievementRecordsToAdd, @globalAchievementRecordsToPut);
my %existingGlobalUserAchievements = map { $_ => 1 } $db->listGlobalUserAchievements;
for my $user (@users) {
if (not $db->existsGlobalUserAchievement($user)) {
my $globalUserAchievement = $db->newGlobalUserAchievement();
$globalUserAchievement->user_id($user);
$db->addGlobalUserAchievement($globalUserAchievement);
my $globalUserAchievement = $db->newGlobalUserAchievement(user_id => $user);
if (!$existingGlobalUserAchievements{$user}) {
push(@globalAchievementRecordsToAdd, $globalUserAchievement);
} elsif ($overwrite) {
my $globalUserAchievement = $db->newGlobalUserAchievement();
$globalUserAchievement->user_id($user);
$db->putGlobalUserAchievement($globalUserAchievement);
push(@globalAchievementRecordsToPut, $globalUserAchievement);
}
}
$db->GlobalUserAchievement->insert_records(\@globalAchievementRecordsToAdd) if @globalAchievementRecordsToAdd;
$db->GlobalUserAchievement->update_records(\@globalAchievementRecordsToPut) if @globalAchievementRecordsToPut;

# Assign userAchievement data, overwriting if necc

# Assign userAchievement data, overwriting if necessary.
my (@userAchievementRecordsToAdd, @userAchievementRecordsToPut);
for my $achievementID (@achievementIDs) {
my %existingUserAchievements =
map { $_->[0] => 1 } $db->listUserAchievementsWhere({ achievement_id => $achievementID });
for my $user (@users) {
if (not $db->existsUserAchievement($user, $achievementID)) {
my $userAchievement = $db->newUserAchievement();
$userAchievement->user_id($user);
$userAchievement->achievement_id($achievementID);
$db->addUserAchievement($userAchievement);
my $userAchievement = $db->newUserAchievement(user_id => $user, achievement_id => $achievementID);
if (!$existingUserAchievements{$user}) {
push(@userAchievementRecordsToAdd, $userAchievement);
} elsif ($overwrite) {
my $userAchievement = $db->newUserAchievement();
$userAchievement->user_id($user);
$userAchievement->achievement_id($achievementID);
$db->putUserAchievement($userAchievement);
push(@userAchievementRecordsToPut, $userAchievement);
}
}
}
$db->UserAchievement->insert_records(\@userAchievementRecordsToAdd) if @userAchievementRecordsToAdd;
$db->UserAchievement->update_records(\@userAchievementRecordsToPut) if @userAchievementRecordsToPut;

return (1, $c->maketext('Assigned achievements to users.'));
}
Expand Down Expand Up @@ -447,7 +444,7 @@ sub import_handler ($c) {
$count++;
$allAchievementIDs{$achievement_id} = 1;

# Assign to usesrs if neccessary
# Assign to users if necessary.
if ($assign eq "all") {
for my $user (@users) {
if (not $db->existsGlobalUserAchievement($user)) {
Expand Down