--- loncom/homework/inputtags.pm 2000/11/28 19:15:48 1.8 +++ loncom/homework/inputtags.pm 2000/12/04 22:08:57 1.11 @@ -5,14 +5,14 @@ package Apache::inputtags; use strict; sub BEGIN { - &Apache::lonxml::register('Apache::inputtags',('textarea','textline','answergroup','datasubmission')); + &Apache::lonxml::register('Apache::inputtags',('textarea','textline','datasubmission')); } sub initialize_inputtags { - $Apache::inputtags::curvalue=0; @Apache::inputtags::input=(); @Apache::inputtags::response=(); + @Apache::inputtags::responselist=(); @Apache::inputtags::answergroup=(); $Apache::inputtags::part=''; %Apache::inputtags::params=(); @@ -21,7 +21,6 @@ sub initialize_inputtags { sub start_textarea { my ($target,$token,$parstack,$parser,$safeeval)=@_; my $result = ""; - $Apache::inputtags::curvalue++; if ($target eq 'web') { $result= '"; + if ($target eq 'web') { + return ""; + } + return ''; } sub start_textline { my ($target,$token,$parstack,$parser,$safeeval)=@_; my $result = ""; - $Apache::inputtags::curvalue++; - my $args =''; - if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; } - my $size = &Apache::run::run("{$args;".'return $size}',$safeeval); - if ($size eq '') { $size=20; } if ($target eq 'web') { + my $args =''; + if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; } + my $size = &Apache::run::run("{$args;".'return $size}',$safeeval); + if ($size eq '') { $size=20; } $result= ''; } return $result; @@ -52,49 +53,162 @@ sub end_textline { return ""; } -sub start_answergroup { +#answergroup is deprecated +#sub start_answergroup { +# my ($target,$token,$parstack,$parser,$safeeval)=@_; +# my $args =''; +# if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; } +# my $id = &Apache::run::run("{$args;".'return $id}',$safeeval); +# push (@Apache::inputtags::answergroup,$id); +# if ($target == 'web') { +# +# } +# return ''; +#} +# +#sub end_answergroup { +# my ($target,$token,$parstack,$parser,$safeeval)=@_; +# return ''; # has ben deprecated +# my $args =''; +# if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; } +# my $id = &Apache::run::run("{$args;".'return $id}',$safeeval); +# push (@Apache::inputtags::answergroup,$id); +# my $result=''; +# my $button=''; +# my $showbutton='1'; +# my $usedtry='1'; +# my $response=''; +# if ( $target == 'web' ) { +# if ( defined $ENV{'form.submit'}) { +# } +# if ($showbutton > 0) { $result.=$button } +# } +# pop @Apache::inputtags::answergroup; +# return $result; +#} + + +sub start_datasubmission { +} + +sub end_datasubmission { my ($target,$token,$parstack,$parser,$safeeval)=@_; - my $args =''; - if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; } - my $id = &Apache::run::run("{$args;".'return $id}',$safeeval); - push (@Apache::inputtags::answergroup,$id); - if ($target == 'web') { - + if ( $target == 'web' ) { + return ''; } return ''; } -sub end_answergroup { - my ($target,$token,$parstack,$parser,$safeeval)=@_; - my $args =''; - if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; } - my $id = &Apache::run::run("{$args;".'return $id}',$safeeval); - push (@Apache::inputtags::answergroup,$id); +sub finalizeawards { my $result=''; - my $button=''; - my $showbutton='1'; - my $usedtry='1'; - my $response=''; - if ( $target == 'web' ) { - if ( defined $ENV{'form.submit'}) { + my $award; + if ($#_ == '-1') { $result = "NO_RESPONSE"; } + foreach $award (@_) { if ($award eq '') {$result='MISSING_ANSWER'; last;}} + if ($result eq '' ) { + foreach $award (@_) { + if ($award eq 'UNIT_FAIL' || + $award eq 'NO_UNIT' || + $award eq 'UNIT_NOTNEEDED') { + $result=$award; last; + } } - if ($showbutton > 0) { $result.=$button } } - pop @Apache::inputtags::answergroup; - return $result; + &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 } - -sub start_datasubmission { +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; + + } elsif ($award eq 'WANTED_NUMERIC') { + $message = "This question expects a numeric answer"; + $tries=0; $button=1; + } elsif ($award eq 'SIG_FAIL') { + $message = "Please adjust significant figures, you provided %s significant figures"; + $tries=0; $button=1; + } elsif ($award eq 'UNIT_FAIL') { + $message = "Units incorrect, Computer reads units as %s"; + $tries=0; $button=1; + } elsif ($award eq 'UNIT_NOTNEEDED') { + $message = "Only a number required, Computer reads units of %s"; + $tries=0; $button=1; + } elsif ($award eq 'NO_UNIT') { + $message = "Units required"; + $tries=0; $button=1; + } elsif ($award eq 'BAD_FORMULA') { + $message = "Unable to understand formula"; + $tries=0; $button=1; + } elsif ($award eq 'INCORRECT') { + $message = "Incorrect"; + $tries=0; $button=1; + } else { + $message = "Unknown message: $award"; + $tries=0; $button=1; + } + return ($tries,$button,$message); } -sub end_datasubmission { - my ($target,$token,$parstack,$parser,$safeeval)=@_; +sub grade { + my ($target) = @_; + my $id = $Apache::inputtags::part; + my $result=''; + my $response=''; if ( $target == 'web' ) { - return ''; + if ( defined $ENV{'form.submit'}) { + my @awards = (); + &Apache::lonxml::debug("$#Apache::inputtags::responselist"); + foreach $response (@Apache::inputtags::responselist) { + &Apache::lonxml::debug("looking for response.awarddetail.$id.$response"); + my $value=$Apache::lonhomework::results{"resource.awarddetail.$id.$response"}; + if ( $value ne '' ) { + &Apache::lonxml::debug("keep ing $value from $response for $id"); + push (@awards,$value); + } else { + &Apache::lonxml::debug("skipping $value from $response for $id"); + } + } + 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 } + } } + return $result; } +sub gradestatus { + my $button=''; + return 'Grade Status is Unknown'.$button; +} 1; __END__ 500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.