Log Message:
-----------
Correct handling of null max_attempts fields in the problem_user
database table.
Modified Files:
--------------
webwork2/lib/WeBWorK/ContentGenerator:
GatewayQuiz.pm
Revision Data
-------------
Index: GatewayQuiz.pm
===================================================================
RCS file: /webwork/cvs/system/webwork2/lib/WeBWorK/ContentGenerator/GatewayQuiz.pm,v
retrieving revision 1.50
retrieving revision 1.51
diff -Llib/WeBWorK/ContentGenerator/GatewayQuiz.pm -Llib/WeBWorK/ContentGenerator/GatewayQuiz.pm -u -r1.50 -r1.51
--- lib/WeBWorK/ContentGenerator/GatewayQuiz.pm
+++ lib/WeBWorK/ContentGenerator/GatewayQuiz.pm
@@ -479,6 +479,11 @@
my $effectiveUserName = $r->param('effectiveUser');
my $key = $r->param('key');
+ # should we allow a new version to be created when
+ # acting as a user?
+ my $verCreateOK = ( defined( $r->param('createnew_ok') ) ) ?
+ $r->param('createnew_ok') : 0;
+
# user checks
my $User = $db->getUser($userName);
die "record for user $userName (real user) does not exist."
@@ -614,12 +619,13 @@
$Problem->num_correct() +
$Problem->num_incorrect() : 0 );
- # $maxAttempts turns into the maximum number of versions we can create;
- # if $Problem isn't defined, we can't have made any attempts, so it
+ # $maxAttempts turns into the maximum number of versions we can create;
+ # if $Problem isn't defined, we can't have made any attempts, so it
# doesn't matter
my $maxAttempts = ( defined($Problem) &&
- defined($Problem->max_attempts()) ?
- $Problem->max_attempts() : -1 );
+ defined($Problem->max_attempts()) &&
+ $Problem->max_attempts() ) ?
+ $Problem->max_attempts() : -1;
# finding the number of versions per time interval is a little harder.
# we interpret the time interval as a rolling interval: that is,
@@ -661,25 +667,27 @@
# if no specific version is requested, we can create a new one if
# need be
- if ( ! $requestedVersion ) {
- if ( ( $maxAttempts == -1 ||
+ if ( ! $requestedVersion ) {
+ if ( ( $maxAttempts == -1 ||
$totalNumVersions < $maxAttempts )
&&
( $setVersionNumber == 0 ||
- (
- ( $currentNumAttempts>=$maxAttemptsPerVersion
+ (
+ ( $currentNumAttempts>=$maxAttemptsPerVersion
||
$timeNow >= $set->due_date + $grace )
&&
( ! $versionsPerInterval
||
- $currentNumVersions < $versionsPerInterval )
- )
+ $currentNumVersions < $versionsPerInterval )
+ )
)
&&
( $effectiveUserName eq $userName ||
- $authz->hasPermissions($userName, "record_answers_when_acting_as_student") )
- ) {
+ ( $authz->hasPermissions($userName, "record_answers_when_acting_as_student") ||
+ $verCreateOK ) )
+
+ ) {
# assign set, get the right name, version
# number, etc., and redefine the $set
# and $Problem we're working with
@@ -751,6 +759,7 @@
"as. When acting as another user, " .
"new versions of the set cannot be " .
"created.";
+ $self->{invalidVersionCreation} = 1;
} elsif ($currentNumAttempts < $maxAttemptsPerVersion &&
$timeNow < $set->due_date() + $grace ) {
@@ -1143,11 +1152,26 @@
}
}
+ my $newlink = '';
+ if ( defined( $self->{invalidVersionCreation} ) &&
+ $self->{invalidVersionCreation} ) {
+ my $gwpage = $urlpath->newFromModule($urlpath->module,
+ courseID=>$urlpath->arg("courseID"),
+ setID=>$urlpath->arg("setID"));
+ my $link = $self->systemLink( $gwpage,
+ params=>{effectiveUser => $effectiveUser,
+ user => $user,
+ createnew_ok => 1} );
+ $newlink = CGI::p(CGI::a({href=>$link},
+ "Create new set version."));
+ }
+
return CGI::div({class=>"ResultsWithError"},
CGI::p("The selected problem set (" .
$urlpath->arg("setID") . ") is not " .
"a valid set for $effectiveUser:"),
- CGI::p($self->{invalidSet}));
+ CGI::p($self->{invalidSet}),
+ $newlink);
}
my $tmplSet = $self->{tmplSet};
|