--- loncom/homework/inputtags.pm 2002/01/11 16:32:29 1.49
+++ loncom/homework/inputtags.pm 2002/07/25 20:55:13 1.58
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# input definitons
#
-# $Id: inputtags.pm,v 1.49 2002/01/11 16:32:29 matthew Exp $
+# $Id: inputtags.pm,v 1.58 2002/07/25 20:55:13 ng Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -28,9 +28,10 @@
# 2/19 Guy
package Apache::inputtags;
+use HTML::Entities();
use strict;
-sub BEGIN {
+BEGIN {
&Apache::lonxml::register('Apache::inputtags',('textfield','textline','datasubmission'));
}
@@ -75,21 +76,31 @@ sub start_textfield {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
my $result = "";
my $id = &start_input($parstack,$safeeval);
+ my $resid=$Apache::inputtags::response[-1];
if ($target eq 'web') {
- my $oldresponse = $Apache::lonhomework::history{"resource.$Apache::inputtags::part.$Apache::inputtags::response['-1'].submission"};
+ $Apache::lonxml::evaluate--;
+ my $partid=$Apache::inputtags::part;
+ my $oldresponse = &HTML::Entities::encode($Apache::lonhomework::history{"resource.$partid.$resid.submission"});
my $cols = &Apache::lonxml::get_param('cols',$parstack,$safeeval);
if ( $cols eq '') { $cols = 80; }
my $rows = &Apache::lonxml::get_param('rows',$parstack,$safeeval);
if ( $rows eq '') { $rows = 10; }
if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') {
- $result= '";
}
@@ -110,12 +122,12 @@ sub start_textline {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
my $result = "";
if ($target eq 'web') {
+ $Apache::lonxml::evaluate--;
my $size = &Apache::lonxml::get_param('size',$parstack,$safeeval);
if ($size eq '') { $size=20; }
my $partid=$Apache::inputtags::part;
- my $id=$Apache::inputtags::response['-1'];
- my $oldresponse =
- $Apache::lonhomework::history{"resource.$partid.$id.submission"};
+ my $id=$Apache::inputtags::response[-1];
+ my $oldresponse = &HTML::Entities::encode($Apache::lonhomework::history{"resource.$partid.$id.submission"});
if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') {
$result= '';
@@ -135,7 +147,8 @@ sub start_textline {
sub end_textline {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
- if ($target eq 'edit') { return ('','no'); }
+ if ($target eq 'web') { $Apache::lonxml::evaluate++; }
+ elsif ($target eq 'edit') { return ('','no'); }
return "";
}
@@ -178,7 +191,17 @@ sub finalizeawards {
my $award;
if ($#_ == '-1') { $result = "NO_RESPONSE"; }
if ($result eq '' ) {
- foreach $award (@_) { if ($award eq '') {$result='MISSING_ANSWER'; last;}}
+ my $blankcount;
+ foreach $award (@_) {
+ if ($award eq '') {
+ $result='MISSING_ANSWER';
+ $blankcount++;
+ }
+ }
+ if ($blankcount == ($#_ + 1)) { $result = 'NO_RESPONSE'; }
+ }
+ if ($result eq '' ) {
+ foreach $award (@_) { if ($award eq 'MISSING_ANSWER') {$result='MISSING_ANSWER'; last;}}
}
if ($result eq '' ) {
foreach $award (@_) { if ($award eq 'ERROR') {$result='ERROR'; last;}}
@@ -285,9 +308,15 @@ sub decideoutput {
sub setgradedata {
my ($award,$id,$previously_used) = @_;
# if the student already has it correct, don't modify the status
- if ( $Apache::lonhomework::history{"resource.$id.solved"} !~
+ if ($Apache::inputtags::status['-1'] ne 'CAN_ANSWER') {
+ $Apache::lonhomework::results{"resource.$id.afterduedate"}=$award;
+ return '';
+ } elsif ( $Apache::lonhomework::history{"resource.$id.solved"} !~
/^correct/ ) {
#handle assignment of tries and solved status
+ if ($Apache::lonhomework::history{"resource.$id.afterduedate"}) {
+ $Apache::lonhomework::results{"resource.$id.afterduedate"}='';
+ }
if ( $award eq 'APPROX_ANS' || $award eq 'EXACT_ANS' ) {
$Apache::lonhomework::results{"resource.$id.tries"} =
$Apache::lonhomework::history{"resource.$id.tries"} + 1;
@@ -317,9 +346,10 @@ sub setgradedata {
delete($Apache::lonhomework::results{"resource.$id.tries"});
$Apache::lonhomework::results{"resource.$id.previous"} = '1';
} elsif ( $previously_used eq 'PREVIOUSLY_LAST') {
- #delete all data as they student didn't do anything
+ #delete all data as they student didn't do anything, but save
+ #the list of collaborators.
foreach my $key (keys(%Apache::lonhomework::results)) {
- if ($key =~ /^resource\.$id\./) {
+ if (($key =~ /^resource\.$id\./) && ($key !~ /\.collaborators$/)) {
&Apache::lonxml::debug("Removing $key");
delete($Apache::lonhomework::results{$key});
}
@@ -342,12 +372,8 @@ sub grade {
foreach $response (@Apache::inputtags::responselist) {
&Apache::lonxml::debug("looking for response.$id.$response.awarddetail");
my $value=$Apache::lonhomework::results{"resource.$id.$response.awarddetail"};
- if ( $value ne '' ) {
- &Apache::lonxml::debug("keeping $value from $response for $id");
- push (@awards,$value);
- } else {
- &Apache::lonxml::debug("skipping $value from $response for $id");
- }
+ &Apache::lonxml::debug("keeping $value from $response for $id");
+ push (@awards,$value);
}
my $finalaward = &finalizeawards(@awards);
my $previously_used;
@@ -370,6 +396,7 @@ sub gradestatus {
my ($id) = @_;
my $showbutton = 1;
my $message = '';
+ my $latemessage = '';
my $trystr='';
my $button='';
my $previousmsg='';
@@ -401,14 +428,18 @@ sub gradestatus {
}
if ( $status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER') {$showbutton = 0;}
if ( $showbutton ) {
- $button = '
';
+ $button = '
';
+ }
+ if ($Apache::lonhomework::history{"resource.$id.afterduedate"}) {
+ #last submissions was after due date
+ $latemessage="