Skip to content

Commit 3219060

Browse files
authored
Merge pull request #2467 from Alex-Jordan/achievement-date-extensions
adjustments to date extension achievement items
2 parents fe3e59f + e34631c commit 3219060

File tree

4 files changed

+76
-28
lines changed

4 files changed

+76
-28
lines changed

lib/WeBWorK/AchievementItems/ExtendDueDate.pm

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,19 @@ use Mojo::Base 'WeBWorK::AchievementItems', -signatures;
1919
# Item to extend a close date by 24 hours.
2020

2121
use WeBWorK::Utils qw(x nfreeze_base64 thaw_base64);
22-
use WeBWorK::Utils::DateTime qw(between);
22+
use WeBWorK::Utils::DateTime qw(after between);
2323
use WeBWorK::Utils::Sets qw(format_set_name_display);
2424

25+
use constant ONE_DAY => 86400;
26+
2527
sub new ($class) {
2628
return bless {
2729
id => 'ExtendDueDate',
2830
name => x('Tunic of Extension'),
29-
description => x('Adds 24 hours to the close date of a homework.')
31+
description => x(
32+
'Adds 24 hours to the close date of a homework. '
33+
. 'This will randomize problem details if used after the original close date.'
34+
)
3035
}, $class;
3136
}
3237

@@ -35,7 +40,8 @@ sub print_form ($self, $sets, $setProblemIds, $c) {
3540

3641
for my $i (0 .. $#$sets) {
3742
push(@openSets, [ format_set_name_display($sets->[$i]->set_id) => $sets->[$i]->set_id ])
38-
if (between($sets->[$i]->open_date, $sets->[$i]->due_date) && $sets->[$i]->assignment_type eq 'default');
43+
if (between($sets->[$i]->open_date, $sets->[$i]->due_date + ONE_DAY)
44+
&& $sets->[$i]->assignment_type eq 'default');
3945
}
4046

4147
return unless @openSets;
@@ -71,10 +77,20 @@ sub use_item ($self, $userName, $c) {
7177
my $userSet = $db->getUserSet($userName, $setID);
7278
return q{Couldn't find that set!} unless $set && $userSet;
7379

74-
# Add time to the reduced scoring date, due date, and answer date.
75-
$userSet->reduced_scoring_date($set->reduced_scoring_date() + 86400) if $set->reduced_scoring_date;
76-
$userSet->due_date($set->due_date() + 86400);
77-
$userSet->answer_date($set->answer_date() + 86400);
80+
# Change the seed for all of the problems if the set is currently closed.
81+
if (after($set->due_date)) {
82+
for my $problem ($db->getUserProblemsWhere({ user_id => $userName, set_id => $setID })) {
83+
$problem->problem_seed($problem->problem_seed % 2**31 + 1);
84+
$db->putUserProblem($problem);
85+
}
86+
}
87+
88+
# Add time to the reduced scoring date if it was defined in the first place
89+
$userSet->reduced_scoring_date($set->reduced_scoring_date + ONE_DAY) if $set->reduced_scoring_date;
90+
# Add time to the close date
91+
$userSet->due_date($set->due_date + ONE_DAY);
92+
# This may require also extending the answer date.
93+
$userSet->answer_date($userSet->due_date) if $userSet->due_date > $set->answer_date;
7894
$db->putUserSet($userSet);
7995

8096
$globalData->{ $self->{id} }--;

lib/WeBWorK/AchievementItems/ExtendDueDateGW.pm

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ use WeBWorK::Utils qw(x nfreeze_base64 thaw_base64);
2222
use WeBWorK::Utils::DateTime qw(between);
2323
use WeBWorK::Utils::Sets qw(format_set_name_display);
2424

25+
use constant ONE_DAY => 86400;
26+
2527
sub new ($class) {
2628
return bless {
2729
id => 'ExtendDueDateGW',
@@ -78,21 +80,21 @@ sub use_item ($self, $userName, $c) {
7880
return q{Couldn't find that set!} unless $set && $userSet;
7981

8082
# Add time to the reduced scoring date, due date, and answer date.
81-
$userSet->reduced_scoring_date($set->reduced_scoring_date() + 86400)
83+
$userSet->reduced_scoring_date($set->reduced_scoring_date() + ONE_DAY)
8284
if defined($set->reduced_scoring_date()) && $set->reduced_scoring_date();
83-
$userSet->due_date($set->due_date() + 86400);
84-
$userSet->answer_date($set->answer_date() + 86400);
85+
$userSet->due_date($set->due_date() + ONE_DAY);
86+
$userSet->answer_date($set->answer_date() + ONE_DAY);
8587
$db->putUserSet($userSet);
8688

8789
# Add time to the reduced scoring date, due date, and answer date for all versions.
8890
my @versions = $db->listSetVersions($userName, $setID);
8991

9092
for my $version (@versions) {
9193
$set = $db->getSetVersion($userName, $setID, $version);
92-
$set->reduced_scoring_date($set->reduced_scoring_date() + 86400)
94+
$set->reduced_scoring_date($set->reduced_scoring_date() + ONE_DAY)
9395
if defined($set->reduced_scoring_date()) && $set->reduced_scoring_date();
94-
$set->due_date($set->due_date() + 86400);
95-
$set->answer_date($set->answer_date() + 86400);
96+
$set->due_date($set->due_date() + ONE_DAY);
97+
$set->answer_date($set->answer_date() + ONE_DAY);
9698
$db->putSetVersion($set);
9799
}
98100

lib/WeBWorK/AchievementItems/ReducedCred.pm

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,19 @@ use Mojo::Base 'WeBWorK::AchievementItems', -signatures;
2020
# Reduced scoring needs to be enabled for this item to work.
2121

2222
use WeBWorK::Utils qw(x nfreeze_base64 thaw_base64);
23-
use WeBWorK::Utils::DateTime qw(between);
23+
use WeBWorK::Utils::DateTime qw(after between);
2424
use WeBWorK::Utils::Sets qw(format_set_name_display);
2525

26+
use constant ONE_DAY => 86400;
27+
2628
sub new ($class) {
2729
return bless {
2830
id => 'ReducedCred',
2931
name => x('Ring of Reduction'),
3032
description => x(
3133
'Enable reduced scoring for a homework set. This will allow you to submit answers '
32-
. 'for partial credit for 24 hours after the close date.'
34+
. 'for partial credit for 24 hours after the close date. '
35+
. 'This will randomize problem details if used after the original close date.'
3336
)
3437
}, $class;
3538
}
@@ -39,7 +42,8 @@ sub print_form ($self, $sets, $setProblemIds, $c) {
3942

4043
for my $i (0 .. $#$sets) {
4144
push(@openSets, [ format_set_name_display($sets->[$i]->set_id) => $sets->[$i]->set_id ])
42-
if (between($sets->[$i]->open_date, $sets->[$i]->due_date) && $sets->[$i]->assignment_type eq 'default');
45+
if (between($sets->[$i]->open_date, $sets->[$i]->due_date + ONE_DAY)
46+
&& $sets->[$i]->assignment_type eq 'default');
4347
}
4448

4549
return unless @openSets;
@@ -79,12 +83,22 @@ sub use_item ($self, $userName, $c) {
7983
my $userSet = $db->getUserSet($userName, $setID);
8084
return "Couldn't find that set!" unless $set && $userSet;
8185

82-
# Enable reduced scoring on the set and add the reduced scoring period to the due date.
83-
my $additionalTime = 60 * $ce->{pg}{ansEvalDefaults}{reducedScoringPeriod};
86+
# Change the seed for all of the problems if the set is currently closed.
87+
if (after($set->due_date)) {
88+
for my $problem ($db->getUserProblemsWhere({ user_id => $userName, set_id => $setID })) {
89+
$problem->problem_seed($problem->problem_seed % 2**31 + 1);
90+
$db->putUserProblem($problem);
91+
}
92+
}
93+
94+
# Either there is already a valid reduced scoring date, or set the reduced scoring date to the close date.
95+
$userSet->reduced_scoring_date($set->due_date)
96+
unless ($set->reduced_scoring_date && ($set->reduced_scoring_date < $set->due_date));
8497
$userSet->enable_reduced_scoring(1);
85-
$userSet->reduced_scoring_date($set->due_date());
86-
$userSet->due_date($set->due_date() + $additionalTime);
87-
$userSet->answer_date($set->answer_date() + $additionalTime);
98+
# Add time to the close date
99+
$userSet->due_date($set->due_date + ONE_DAY);
100+
# This may require also extending the answer date.
101+
$userSet->answer_date($userSet->due_date) if ($userSet->due_date > $set->answer_date);
88102
$db->putUserSet($userSet);
89103

90104
$globalData->{ $self->{id} }--;

lib/WeBWorK/AchievementItems/SuperExtendDueDate.pm

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,19 @@ use Mojo::Base 'WeBWorK::AchievementItems', -signatures;
1919
# Item to extend a close date by 48 hours.
2020

2121
use WeBWorK::Utils qw(x nfreeze_base64 thaw_base64);
22-
use WeBWorK::Utils::DateTime qw(between);
22+
use WeBWorK::Utils::DateTime qw(after between);
2323
use WeBWorK::Utils::Sets qw(format_set_name_display);
2424

25+
use constant TWO_DAYS => 172800;
26+
2527
sub new ($class) {
2628
return bless {
2729
id => 'SuperExtendDueDate',
2830
name => x('Robe of Longevity'),
29-
description => x('Adds 48 hours to the close date of a homework.')
31+
description => x(
32+
'Adds 48 hours to the close date of a homework. '
33+
. 'This will randomize problem details if used after the original close date.'
34+
)
3035
}, $class;
3136
}
3237

@@ -35,7 +40,8 @@ sub print_form ($self, $sets, $setProblemIds, $c) {
3540

3641
for my $i (0 .. $#$sets) {
3742
push(@openSets, [ format_set_name_display($sets->[$i]->set_id) => $sets->[$i]->set_id ])
38-
if (between($sets->[$i]->open_date, $sets->[$i]->due_date) && $sets->[$i]->assignment_type eq 'default');
43+
if (between($sets->[$i]->open_date, $sets->[$i]->due_date + TWO_DAYS)
44+
&& $sets->[$i]->assignment_type eq 'default');
3945
}
4046

4147
return unless @openSets;
@@ -71,10 +77,20 @@ sub use_item ($self, $userName, $c) {
7177
my $userSet = $db->getUserSet($userName, $setID);
7278
return q{Couldn't find that set!} unless $set && $userSet;
7379

74-
# Add time to the reduced scoring date, due date, and answer date.
75-
$userSet->reduced_scoring_date($set->reduced_scoring_date() + 172800) if $set->reduced_scoring_date;
76-
$userSet->due_date($set->due_date() + 172800);
77-
$userSet->answer_date($set->answer_date() + 172800);
80+
# Change the seed for all of the problems if the set is currently closed.
81+
if (after($set->due_date)) {
82+
for my $problem ($db->getUserProblemsWhere({ user_id => $userName, set_id => $setID })) {
83+
$problem->problem_seed($problem->problem_seed % 2**31 + 1);
84+
$db->putUserProblem($problem);
85+
}
86+
}
87+
88+
# Add time to the reduced scoring date if it was defined in the first place
89+
$userSet->reduced_scoring_date($set->reduced_scoring_date + TWO_DAYS) if $set->reduced_scoring_date;
90+
# Add time to the close date
91+
$userSet->due_date($set->due_date + TWO_DAYS);
92+
# This may require also extending the answer date.
93+
$userSet->answer_date($userSet->due_date) if ($userSet->due_date > $set->answer_date);
7894
$db->putUserSet($userSet);
7995

8096
$globalData->{ $self->{id} }--;

0 commit comments

Comments
 (0)