--- loncom/homework/inputtags.pm 2001/07/30 22:24:01 1.39 +++ loncom/homework/inputtags.pm 2001/08/03 22:12:07 1.40 @@ -17,8 +17,10 @@ sub initialize_inputtags { @Apache::inputtags::inputlist=(); # list of all current response ids @Apache::inputtags::response=(); - #list of all response ids seen in this problem + # list of all response ids seen in this problem @Apache::inputtags::responselist=(); + # list of whether or not a specific response was previously used + @Apache::inputtags::previous=(); # id of current part, 0 means that no part is current (inside only $Apache::inputtags::part=''; # list of problem date statuses, the first element is for @@ -156,16 +158,22 @@ sub finalizeawards { } sub decideoutput { - my ($award,$solved)=@_; + my ($award,$solved,$previous)=@_; my $message=''; my $button=0; + my $previousmsg; + + if ($previous) { $previousmsg='You have entered that answer before'; } + if ($solved =~ /^correct/) { $message = "You are correct. Your receipt is ". &Apache::lonnet::receipt; $button=0; + $previousmsg=''; } elsif ($solved =~ /^excused/) { $message = "You are excused from the problem."; $button=0; + $previousmsg=''; } elsif ($award eq 'EXACT_ANS' || $award eq 'APPROX_ANS' ) { if ($solved =~ /^incorrect/ || $solved eq '') { $message = "Incorrect"; @@ -174,6 +182,7 @@ sub decideoutput { $message = "You are correct. Your receipt is ". &Apache::lonnet::receipt; $button=0; + $previousmsg=''; } } elsif ($award eq 'NO_RESPONSE') { $message = ''; @@ -209,14 +218,15 @@ sub decideoutput { $message = "Unknown message: $award"; $button=1; } - return ($button,$message); + return ($button,$message,$previousmsg); } sub setgradedata { - my ($award,$id) = @_; + my ($award,$id,$previously_used) = @_; # if the student already has it correct, don't modify the status if ( $Apache::lonhomework::history{"resource.$id.solved"} !~ /^correct/ ) { + #handle assignment of tries and solved status if ( $award eq 'APPROX_ANS' || $award eq 'EXACT_ANS' ) { $Apache::lonhomework::results{"resource.$id.tries"} = $Apache::lonhomework::history{"resource.$id.tries"} + 1; @@ -239,6 +249,25 @@ sub setgradedata { $Apache::lonhomework::results{"resource.$id.solved"} = 'incorrect_attempted'; } + + # check if this was a previous submission if it was delete the + # unneeded data and update the previously_used attribute + if ( $previously_used eq 'PREVIOUSLY_USED') { + 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 + foreach my $key (keys(%Apache::lonhomework::results)) { + if ($key =~ /^resource\.$id\./) { + &Apache::lonxml::debug("Removing $key"); + delete($Apache::lonhomework::results{$key}); + } + } + #and since they didn't do anything we were never here + return ''; + } else { + $Apache::lonhomework::results{"resource.$id.previous"} = '0'; + } } $Apache::lonhomework::results{"resource.$id.award"} = $award; } @@ -246,26 +275,32 @@ sub setgradedata { sub grade { my ($target) = @_; my $id = $Apache::inputtags::part; -# my $result=''; my $response=''; - if ( $target == 'web' ) { - if ( defined $ENV{'form.submitted'}) { - my @awards = (); - &Apache::lonxml::debug("$#Apache::inputtags::responselist"); - 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"); + if ( defined $ENV{'form.submitted'}) { + my @awards = (); + 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"); + } + } + my $finalaward = &finalizeawards(@awards); + my $previously_used; + if ( $#Apache::inputtags::previous eq $#awards ) { + $previously_used = 'PREVIOUSLY_LAST'; + foreach my $value (@Apache::inputtags::previous) { + if ($value eq 'PREVIOUSLY_USED' ) { + $previously_used = $value; + last; } } - my $finalaward = &finalizeawards(@awards); - &Apache::lonxml::debug("final award $finalaward"); - &setgradedata($finalaward,$id); } + &Apache::lonxml::debug("final award $finalaward, $previously_used"); + &setgradedata($finalaward,$id,$previously_used); } return ''; } @@ -276,17 +311,23 @@ sub gradestatus { my $message = ''; my $trystr=''; my $button=''; - + my $previousmsg=''; + my $status = $Apache::inputtags::status['-1']; &Apache::lonxml::debug("gradestatus has :$status:"); if ( $status ne 'CLOSED' ) { my $award = $Apache::lonhomework::history{"resource.$id.award"}; my $solved = $Apache::lonhomework::history{"resource.$id.solved"}; + my $previous = $Apache::lonhomework::history{"resource.$id.previous"}; &Apache::lonxml::debug("Found Award |$award|$solved|"); if ( $award ne '' ) { &Apache::lonxml::debug('Getting message'); - ($showbutton,$message) = &decideoutput($award,$solved); + ($showbutton,$message,$previousmsg) = + &decideoutput($award,$solved,$previous); $message="$message"; + if ($previousmsg) { + $previousmsg="$previousmsg"; + } } my $tries = $Apache::lonhomework::history{"resource.$id.tries"}; my $maxtries = &Apache::lonnet::EXT("resource.$id.maxtries"); @@ -302,7 +343,12 @@ sub gradestatus { $button = '
'; } } - return $button.''.$message.$trystr.'
'; + my $output= $previousmsg.$message.$trystr; + if ($output =~ /^\s*$/) { + return $button; + } else { + return $button.''.$previousmsg.$message.$trystr.'
'; + } } 1; __END__