--- loncom/homework/inputtags.pm 2000/12/04 22:08:57 1.11 +++ loncom/homework/inputtags.pm 2000/12/11 23:47:36 1.14 @@ -11,6 +11,7 @@ sub BEGIN { sub initialize_inputtags { @Apache::inputtags::input=(); + @Apache::inputtags::inputlist=(); @Apache::inputtags::response=(); @Apache::inputtags::responselist=(); @Apache::inputtags::answergroup=(); @@ -18,11 +19,27 @@ sub initialize_inputtags { %Apache::inputtags::params=(); } +sub start_input { + my ($parstack,$safeeval)=@_; + my $args =''; + if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; } + my $id = &Apache::run::run("{$args;".'return $id}',$safeeval); + push (@Apache::inputtags::input,$id); + push (@Apache::inputtags::inputlist,$id); + return $id; +} + +sub end_input { + pop @Apache::inputtags::input; + return ''; +} + sub start_textarea { my ($target,$token,$parstack,$parser,$safeeval)=@_; my $result = ""; + my $id = &start_input($parstack,$safeeval); if ($target eq 'web') { - $result= '"; } + &end_input; return ''; } @@ -43,7 +61,8 @@ sub start_textline { if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; } my $size = &Apache::run::run("{$args;".'return $size}',$safeeval); if ($size eq '') { $size=20; } - $result= ''; + my $oldresponse = $Apache::lonhomework::history{"resource.submission.$Apache::inputtags::part.$Apache::inputtags::response['-1']"}; + $result= ''; } return $result; } @@ -113,28 +132,22 @@ sub finalizeawards { } } } - &Apache::lonxml::debug("1 $result"); if ($result eq '' ) { foreach $award (@_) { if ($award eq 'WANTED_NUMERIC' || $award eq 'BAD_FORMULA') {$result=$award; last;} } } - &Apache::lonxml::debug("2 $result"); if ($result eq '' ) { foreach $award (@_) { if ($award eq 'SIG_FAIL') {$result=$award; last;} } } - &Apache::lonxml::debug("3 $result"); if ($result eq '' ) { foreach $award (@_) { if ($award eq 'INCORRECT') {$result=$award; last;} } } - &Apache::lonxml::debug("4 $result"); if ($result eq '' ) { foreach $award (@_) { if ($award eq 'APPROX_ANS') {$result=$award; last;} } } - &Apache::lonxml::debug("5 $result"); if ($result eq '' ) { $result='EXACT_ANS'; } - &Apache::lonxml::debug("6 $result"); return $result } @@ -142,37 +155,61 @@ sub decideoutput { my ($award)=@_; my $message=''; my $button=0; - my $tries=0; if ($award eq 'EXACT_ANS' || $award eq 'APPROX_ANS' ) { - $message = "Yes, Computer gets: "; - $tries=1; $button=0; - + $message = "Correct computer gets %s"; + $button=0; + } elsif ($award eq 'NO_RESPONSE') { + $message = ''; + $button=1; + } elsif ($award eq 'MISSING_ANSWER') { + $message = 'Some parts were not submitted'; + $button = 1; } elsif ($award eq 'WANTED_NUMERIC') { $message = "This question expects a numeric answer"; - $tries=0; $button=1; + $button=1; } elsif ($award eq 'SIG_FAIL') { $message = "Please adjust significant figures, you provided %s significant figures"; - $tries=0; $button=1; + $button=1; } elsif ($award eq 'UNIT_FAIL') { $message = "Units incorrect, Computer reads units as %s"; - $tries=0; $button=1; + $button=1; } elsif ($award eq 'UNIT_NOTNEEDED') { $message = "Only a number required, Computer reads units of %s"; - $tries=0; $button=1; + $button=1; } elsif ($award eq 'NO_UNIT') { $message = "Units required"; - $tries=0; $button=1; + $button=1; } elsif ($award eq 'BAD_FORMULA') { $message = "Unable to understand formula"; - $tries=0; $button=1; + $button=1; } elsif ($award eq 'INCORRECT') { $message = "Incorrect"; - $tries=0; $button=1; + $button=1; } else { $message = "Unknown message: $award"; - $tries=0; $button=1; + $button=1; + } + return ($button,$message); +} + +sub setgradedata { + my ($award,$id) = @_; + if ( $award eq 'APPROX_ANS' || $award eq 'EXACT_ANS' ) { + $Apache::lonhomework::results{"resource.tries.$id"} = + $Apache::lonhomework::history{"resource.tries.$id"} + 1; + $Apache::lonhomework::results{"resource.solved.$id"} = + 'correct_by_student'; + $Apache::lonhomework::results{"resource.awarded.$id"} = '1'; + } elsif ( $award eq 'INCORRECT' ) { + $Apache::lonhomework::results{"resource.tries.$id"} = + $Apache::lonhomework::history{"resource.tries.$id"} + 1; + $Apache::lonhomework::results{"resource.solved.$id"} = + 'incorrect_attempted'; + } else { + $Apache::lonhomework::results{"resource.solved.$id"} = + 'incorrect_attempted'; } - return ($tries,$button,$message); + $Apache::lonhomework::results{"resource.award.$id"} = $award; } sub grade { @@ -195,19 +232,37 @@ sub grade { } } my $finalaward = &finalizeawards(@awards); - my ($triesinc,$showbutton,$message) = &decideoutput($finalaward); - $Apache::lonhomework::results{"resource.tries.$id"} = - $Apache::lonhomework::history{"resource.tries.$id"} + 1; &Apache::lonxml::debug("final award $finalaward"); - #if ($showbutton > 0) { $result.=$button } + &setgradedata($finalaward,$id); } } return $result; } sub gradestatus { - my $button=''; - return 'Grade Status is Unknown'.$button; + my ($id) = @_; + my $showbutton = 1; + my $message = ''; + my $award = $Apache::lonhomework::history{"resource.award.$id"}; + &Apache::lonxml::debug("Found Award |$award|"); + if ( $award ne '' ) { + &Apache::lonxml::debug('Getting message'); + ($showbutton,$message) = &decideoutput($award); + } + my $button=''; + my $tries = $Apache::lonhomework::history{"resource.tries.$id"}; + my $maxtries = $Apache::lonhomework::history{"resource.maxtries.$id"}; + if ( $tries eq '' ) { $tries = '0'; } + if ( $maxtries eq '' ) { $maxtries = '2'; } + my $trystr=''; + if ( $showbutton ) { + $trystr = "

Tries $tries/$maxtries"; + } + if ( $tries >= $maxtries ) { $showbutton = 0; } + if ( $showbutton ) { + $button = '

'; + } + return $button.$message.$trystr; } 1; __END__