--- loncom/homework/caparesponse/caparesponse.pm 2001/08/03 22:12:07 1.38
+++ loncom/homework/caparesponse/caparesponse.pm 2001/09/18 02:21:13 1.43
@@ -80,6 +80,8 @@ sub start_numericalresponse {
$result = &Apache::edit::rebuild_tag($token);
$result.=&Apache::edit::handle_insert();
}
+ } elsif ($target eq 'meta') {
+ $result=&Apache::response::meta_package_write('numericalresponse');
}
return $result;
}
@@ -89,6 +91,7 @@ sub end_numericalresponse {
my $result = '';
if ( $target eq 'grade' ) {
if ( defined $ENV{'form.submitted'}) {
+ &Apache::response::setup_params('numericalresponse');
$safeeval->share_from('capa',['&caparesponse_capa_check_answer']);
my $partid = $Apache::inputtags::part;
my $id = $Apache::inputtags::response['-1'];
@@ -102,10 +105,12 @@ sub end_numericalresponse {
$response =~ s/\'/\\\'/g;
&Apache::lonxml::debug("current $response");
my $expression="&caparesponse_check_list('".$response."','".
- $$parstack[$#$parstack].
- ';my $tol="'.$Apache::inputtags::params{'tol'}.'"'.
- ';my $sig="'.$Apache::inputtags::params{'sig'}.'"'.
- "');";
+ $$parstack[$#$parstack];
+ foreach my $key (keys(%Apache::inputtags::params)) {
+ $expression.= ';my $'. #'
+ $key.'="'.$Apache::inputtags::params{$key}.'"';
+ }
+ $expression.="');";
$result = &Apache::run::run($expression,$safeeval);
my ($awards) = split /:/ , $result;
my ($ad) = &Apache::inputtags::finalizeawards(split /,/ , $awards);
@@ -160,13 +165,34 @@ sub end_numericalresponse {
}
} elsif ($target eq 'edit') {
$result.=''.&Apache::edit::end_table;
+ } elsif ($target eq 'answer') {
+ my $answer= &Apache::run::run('eval \''.$$parstack[-1].';return $answer\'',
+ $safeeval);
+ my (@answers) = &Apache::run::run("eval ".$answer,$safeeval);
+ # if the eval fails just use what is in the answer exactly
+ if (!defined(@answers) || !defined($answers[0])) {
+ $result.="list zero is undefined
";
+ $answers[0]=$answer;
+ }
+ $result.="
An answers: $answer";
+ foreach my $ans (@answers) {
+ $result.="
An answer: $ans";
+ }
+ $result .= "
".&Apache::run::run('return $result',$safeeval);
}
&Apache::response::end_response;
return $result;
}
sub start_stringresponse {
- return start_numericalresponse(@_);
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
+ my $result;
+ if ($target eq 'meta') {
+ $result=&Apache::response::meta_package_write('stringresponse');
+ } else {
+ $result.=&start_numericalresponse(@_);
+ }
+ return $result;
}
sub end_stringresponse {