Skip to content

Commit

Permalink
Use a hash vs an array to store user problems when using achievement …
Browse files Browse the repository at this point in the history
…items.
  • Loading branch information
somiaj committed Feb 2, 2025
1 parent d68c51c commit 828f455
Show file tree
Hide file tree
Showing 7 changed files with 59 additions and 48 deletions.
16 changes: 9 additions & 7 deletions lib/WeBWorK/AchievementItems/DoubleSet.pm
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,15 @@ sub use_item ($self, $set, $records, $c) {
my $old_value = 0;
my $new_value = 0;

my @userProblems = $db->getUserProblemsWhere({ user_id => $set->user_id, set_id => $set->set_id }, 'problem_id');
for my $n (0 .. $#userProblems) {
$old_value += $records->[$n]->value;
$records->[$n]->value($records->[$n]->value * 2);
$userProblems[$n]->value($records->[$n]->value);
$new_value += $userProblems[$n]->value;
$db->putUserProblem($userProblems[$n]);
my %userProblems =
map { $_->problem_id => $_ } $db->getUserProblemsWhere({ user_id => $set->user_id, set_id => $set->set_id });
for my $problem (@$records) {
my $userProblem = $userProblems{ $problem->problem_id };
$old_value += $problem->value;
$problem->value(2 * $problem->value);
$userProblem->value($problem->value);
$new_value += $userProblem->value;
$db->putUserProblem($userProblem);
}

return $c->maketext(q(Assignment's total point value increased from [_1] points to [_2] points),
Expand Down
14 changes: 8 additions & 6 deletions lib/WeBWorK/AchievementItems/ExtendDueDate.pm
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,14 @@ sub use_item ($self, $set, $records, $c) {

# Change the seed for all of the problems if the set is currently closed.
if (after($set->due_date)) {
my @userProblems =
$db->getUserProblemsWhere({ user_id => $set->user_id, set_id => $set->set_id }, 'problem_id');
for my $n (0 .. $#userProblems) {
$userProblems[$n]->problem_seed($userProblems[$n]->problem_seed % 2**31 + 1);
$records->[$n]->problem_seed($userProblems[$n]->problem_seed);
$db->putUserProblem($userProblems[$n]);
my %userProblems =
map { $_->problem_id => $_ }
$db->getUserProblemsWhere({ user_id => $set->user_id, set_id => $set->set_id });
for my $problem (@$records) {
my $userProblem = $userProblems{ $problem->problem_id };
$userProblem->problem_seed($userProblem->problem_seed % 2**31 + 1);
$problem->problem_seed($userProblem->problem_seed);
$db->putUserProblem($userProblem);
}
}

Expand Down
16 changes: 9 additions & 7 deletions lib/WeBWorK/AchievementItems/FullCreditSet.pm
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,15 @@ sub print_form ($self, $set, $records, $c) {
sub use_item ($self, $set, $records, $c) {
my $db = $c->db;

my @userProblems = $db->getUserProblemsWhere({ user_id => $set->user_id, set_id => $set->set_id }, 'problem_id');
for my $n (0 .. $#userProblems) {
$records->[$n]->status(1);
$records->[$n]->sub_status(1);
$userProblems[$n]->status(1);
$userProblems[$n]->sub_status(1);
$db->putUserProblem($userProblems[$n]);
my %userProblems =
map { $_->problem_id => $_ } $db->getUserProblemsWhere({ user_id => $set->user_id, set_id => $set->set_id });
for my $problem (@$records) {
my $userProblem = $userProblems{ $problem->problem_id };
$problem->status(1);
$problem->sub_status(1);
$userProblem->status(1);
$userProblem->sub_status(1);
$db->putUserProblem($userProblem);
}

return $c->maketext(q(Assignment's grade increased from [_1]% to 100%.), $self->{old_grade});
Expand Down
16 changes: 9 additions & 7 deletions lib/WeBWorK/AchievementItems/HalfCreditSet.pm
Original file line number Diff line number Diff line change
Expand Up @@ -60,13 +60,15 @@ sub print_form ($self, $set, $records, $c) {
sub use_item ($self, $set, $records, $c) {
my $db = $c->db;

my @userProblems = $db->getUserProblemsWhere({ user_id => $set->user_id, set_id => $set->set_id }, 'problem_id');
for my $n (0 .. $#userProblems) {
$records->[$n]->status($records->[$n]->status > 0.5 ? 1 : $records->[$n]->status + 0.5);
$records->[$n]->sub_status($records->[$n]->status);
$userProblems[$n]->status($records->[$n]->status);
$userProblems[$n]->sub_status($records->[$n]->status);
$db->putUserProblem($userProblems[$n]);
my %userProblems =
map { $_->problem_id => $_ } $db->getUserProblemsWhere({ user_id => $set->user_id, set_id => $set->set_id });
for my $problem (@$records) {
my $userProblem = $userProblems{ $problem->problem_id };
$problem->status($problem->status > 0.5 ? 1 : $problem->status + 0.5);
$problem->sub_status($problem->status);
$userProblem->status($problem->status);
$userProblem->sub_status($problem->status);
$db->putUserProblem($userProblem);
}

return $c->maketext(q(Assignment's grade increased from [_1] to [_2].), $self->{old_grade}, $self->{new_grade});
Expand Down
14 changes: 8 additions & 6 deletions lib/WeBWorK/AchievementItems/ReducedCred.pm
Original file line number Diff line number Diff line change
Expand Up @@ -75,12 +75,14 @@ sub use_item ($self, $set, $records, $c) {

# Change the seed for all of the problems if the set is currently closed.
if (after($set->due_date)) {
my @userProblems =
$db->getUserProblemsWhere({ user_id => $set->user_id, set_id => $set->set_id }, 'problem_id');
for my $n (0 .. $#userProblems) {
$userProblems[$n]->problem_seed($userProblems[$n]->problem_seed % 2**31 + 1);
$records->[$n]->problem_seed($userProblems[$n]->problem_seed);
$db->putUserProblem($userProblems[$n]);
my %userProblems =
map { $_->problem_id => $_ }
$db->getUserProblemsWhere({ user_id => $set->user_id, set_id => $set->set_id });
for my $problem (@$records) {
my $userProblem = $userProblems{ $problem->problem_id };
$userProblem->problem_seed($userProblem->problem_seed % 2**31 + 1);
$problem->problem_seed($userProblem->problem_seed);
$db->putUserProblem($userProblem);
}
}

Expand Down
17 changes: 8 additions & 9 deletions lib/WeBWorK/AchievementItems/ResurrectHW.pm
Original file line number Diff line number Diff line change
Expand Up @@ -44,15 +44,14 @@ sub use_item ($self, $set, $records, $c) {
my $db = $c->db;
my $userSet = $db->getUserSet($set->user_id, $set->set_id);

# Change the seed for all of the problems if the set is currently closed.
if (after($set->due_date)) {
my @userProblems =
$db->getUserProblemsWhere({ user_id => $set->user_id, set_id => $set->set_id }, 'problem_id');
for my $n (0 .. $#userProblems) {
$userProblems[$n]->problem_seed($userProblems[$n]->problem_seed % 2**31 + 1);
$records->[$n]->problem_seed($userProblems[$n]->problem_seed);
$db->putUserProblem($userProblems[$n]);
}
# Change the seed for all of the problems since the set is currently closed.
my %userProblems =
map { $_->problem_id => $_ } $db->getUserProblemsWhere({ user_id => $set->user_id, set_id => $set->set_id });
for my $problem (@$records) {
my $userProblem = $userProblems{ $problem->problem_id };
$userProblem->problem_seed($userProblem->problem_seed % 2**31 + 1);
$problem->problem_seed($userProblem->problem_seed);
$db->putUserProblem($userProblem);
}

# Add time to the reduced scoring date if it was defined in the first place
Expand Down
14 changes: 8 additions & 6 deletions lib/WeBWorK/AchievementItems/SuperExtendDueDate.pm
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,14 @@ sub use_item ($self, $set, $records, $c) {

# Change the seed for all of the problems if the set is currently closed.
if (after($set->due_date)) {
my @userProblems =
$db->getUserProblemsWhere({ user_id => $set->user_id, set_id => $set->set_id }, 'problem_id');
for my $n (0 .. $#userProblems) {
$userProblems[$n]->problem_seed($userProblems[$n]->problem_seed % 2**31 + 1);
$records->[$n]->problem_seed($userProblems[$n]->problem_seed);
$db->putUserProblem($userProblems[$n]);
my %userProblems =
map { $_->problem_id => $_ }
$db->getUserProblemsWhere({ user_id => $set->user_id, set_id => $set->set_id });
for my $problem (@$records) {
my $userProblem = $userProblems{ $problem->problem_id };
$userProblem->problem_seed($userProblem->problem_seed % 2**31 + 1);
$problem->problem_seed($userProblem->problem_seed);
$db->putUserProblem($userProblem);
}
}

Expand Down

0 comments on commit 828f455

Please sign in to comment.