| … | |
… | |
| 120 | my %can = ( |
120 | my %can = ( |
| 121 | showOldAnswers => 1, |
121 | showOldAnswers => 1, |
| 122 | showCorrectAnswers => canShowCorrectAnswers($permissionLevel, $set->answer_date), |
122 | showCorrectAnswers => canShowCorrectAnswers($permissionLevel, $set->answer_date), |
| 123 | showHints => 1, |
123 | showHints => 1, |
| 124 | showSolutions => canShowSolutions($permissionLevel, $set->answer_date), |
124 | showSolutions => canShowSolutions($permissionLevel, $set->answer_date), |
| 125 | # attempts=num_correct+num_incorrect+1, as this happens before updating $problem |
|
|
| 126 | recordAnswers => canRecordAnswers($permissionLevel, $set->open_date, $set->due_date, |
125 | recordAnswers => canRecordAnswers($permissionLevel, $set->open_date, $set->due_date, |
| 127 | $problem->max_attempts, $problem->num_correct + $problem->num_incorrect + 1), |
126 | $problem->max_attempts, $problem->num_correct + $problem->num_incorrect + 1), |
|
|
127 | # attempts=num_correct+num_incorrect+1, as this happens before updating $problem |
| 128 | checkAnswers => canCheckAnswers($permissionLevel, $set->open_date, |
128 | checkAnswers => canCheckAnswers($permissionLevel, $set->answer_date), |
| 129 | $set->due_date, $set->answer_date, $problem->max_attempts, |
|
|
| 130 | $problem->num_correct + $problem->num_incorrect + 1), |
|
|
| 131 | ); |
129 | ); |
| 132 | |
130 | |
| 133 | # final values for options |
131 | # final values for options |
| 134 | my %will; |
132 | my %will; |
| 135 | foreach (keys %must) { |
133 | foreach (keys %must) { |
| … | |
… | |
| 415 | ? "Your recorded score is $lastScore." . CGI::br() |
413 | ? "Your recorded score is $lastScore." . CGI::br() |
| 416 | : "", |
414 | : "", |
| 417 | $setClosed ? $setClosedMessage : "You have $attemptsLeft $attemptsLeftNoun remaining." |
415 | $setClosed ? $setClosedMessage : "You have $attemptsLeft $attemptsLeftNoun remaining." |
| 418 | ); |
416 | ); |
| 419 | |
417 | |
| 420 | |
|
|
| 421 | print |
418 | print |
| 422 | $self->viewOptions(), |
419 | $self->viewOptions(), |
| 423 | CGI::endform(); |
420 | CGI::endform(); |
| 424 | |
421 | |
| 425 | print CGI::end_div(); |
422 | print CGI::end_div(); |
| … | |
… | |
| 663 | my $attemptsOK = $maxAttempts == -1 || $attempts <= $maxAttempts; |
660 | my $attemptsOK = $maxAttempts == -1 || $attempts <= $maxAttempts; |
| 664 | my $recordAnswers = $permHigh || ($timeOK && $attemptsOK); |
661 | my $recordAnswers = $permHigh || ($timeOK && $attemptsOK); |
| 665 | return $recordAnswers; |
662 | return $recordAnswers; |
| 666 | } |
663 | } |
| 667 | |
664 | |
| 668 | sub canCheckAnswers($$$$$) { |
665 | sub canCheckAnswers($$) { |
| 669 | my ($permissionLevel, $openDate, $dueDate, $answerDate, $maxAttempts, $attempts) = @_; |
666 | my ($permissionLevel, $answerDate) = @_; |
| 670 | return time >= $answerDate or canRecordAnswers($permissionLevel, $openDate, $dueDate, $maxAttempts, $attempts); |
667 | my $permHigh = $permissionLevel > 0; |
|
|
668 | my $timeOK = time >= $answerDate; |
|
|
669 | my $recordAnswers = $permHigh || $timeOK; |
|
|
670 | return $recordAnswers; |
| 671 | } |
671 | } |
| 672 | |
672 | |
| 673 | sub mustRecordAnswers($) { |
673 | sub mustRecordAnswers($) { |
| 674 | my ($permissionLevel) = @_; |
674 | my ($permissionLevel) = @_; |
| 675 | return $permissionLevel == 0; |
675 | return $permissionLevel == 0; |