--- loncom/homework/inputtags.pm 2000/09/19 20:12:17 1.4
+++ loncom/homework/inputtags.pm 2000/12/04 21:15:33 1.10
@@ -5,35 +5,205 @@ package Apache::inputtags;
use strict;
sub BEGIN {
- &Apache::lonxml::register('Apache::inputtags',('textline','answergroup'));
+ &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=();
+}
+
+sub start_textarea {
+ my ($target,$token,$parstack,$parser,$safeeval)=@_;
+ my $result = "";
+ if ($target eq 'web') {
+ $result= '";
+ }
+ return '';
}
sub start_textline {
my ($target,$token,$parstack,$parser,$safeeval)=@_;
my $result = "";
- $Apache::inputtags::curvalue++;
if ($target eq 'web') {
- $result= '';
+ 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;
}
sub end_textline {
my ($target,$token,$parstack,$parser,$safeeval)=@_;
+ 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_answergroup {
+sub end_datasubmission {
my ($target,$token,$parstack,$parser,$safeeval)=@_;
if ( $target == 'web' ) {
- return '';
+ return '';
}
+ return '';
+}
+
+sub finalizeawards {
+ my $result='';
+ 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;
+ }
+ }
+ }
+ &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 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 grade {
+ my ($target) = @_;
+ my $id = $Apache::inputtags::part;
+ my $result='';
+ my $button='';
+ my $response='';
+ if ( $target == 'web' ) {
+ 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;
}
1;