[LON-CAPA-cvs] cvs: loncom /homework default_homework.lcpm hint.pm /homework/caparesponse caparesponse.pm
albertel
lon-capa-cvs@mail.lon-capa.org
Tue, 24 Jun 2003 20:41:56 -0000
albertel Tue Jun 24 16:41:56 2003 EDT
Modified files:
/loncom/homework default_homework.lcpm hint.pm
/loncom/homework/caparesponse caparesponse.pm
Log:
= BUG#1849, answers that are in arrays didn't work, now pass the answer in through a varglob into the safe space, and then through a parameter to the capa_check_answer function
Index: loncom/homework/default_homework.lcpm
diff -u loncom/homework/default_homework.lcpm:1.63 loncom/homework/default_homework.lcpm:1.64
--- loncom/homework/default_homework.lcpm:1.63 Fri Jun 6 23:52:39 2003
+++ loncom/homework/default_homework.lcpm Tue Jun 24 16:41:56 2003
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# used by lonxml::xmlparse() as input variable $safeinit to Apache::run::run()
#
-# $Id: default_homework.lcpm,v 1.63 2003/06/07 03:52:39 albertel Exp $
+# $Id: default_homework.lcpm,v 1.64 2003/06/24 20:41:56 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -42,14 +42,14 @@
sub caparesponse_check {
#not properly used yet: calc
#not to be used: $ans_fmt
- my ($answer,$type,$tol,$sig,$ans_fmt,$unit,$calc,$samples) =
- eval $_[1].
- ';return ($answer,$type,$tol,$sig,$ans_fmt,$unit,$calc,$samples);';
+ my ($type,$tol,$sig,$ans_fmt,$unit,$calc,$samples) =
+ eval $_[2].
+ ';return ($type,$tol,$sig,$ans_fmt,$unit,$calc,$samples);';
my $tol_type=''; # gets it's value from whether tol has a % or not done
my $sig_lbound=''; #done
my $sig_ubound=''; #done
- my ($response,$expr)=@_;
+ my ($answer,$response,$expr)=@_;
#type's definitons come from capaParser.h
@@ -137,7 +137,7 @@
# do these first, because who knows what varname the instructor might have used
# but it probably isn't $CAPARESPONSE_CHECK_LIST_answer
my $CAPARESPONSE_CHECK_LIST_answer = eval $expr.';return $'.$arg; #' stupid emacs
- my $GET_ARRAY_ARGS_result;
+ my $GET_ARRAY_ARGS_result="expr is $expr\narg is $arg\nfirst answer guess is $CAPARESPONSE_CHECK_LIST_answer\n";
my @GET_ARRAY_ARGS_list;
if ($CAPARESPONSE_CHECK_LIST_answer =~ /^\s*[\$\@]/) {
(@GET_ARRAY_ARGS_list) = eval $CAPARESPONSE_CHECK_LIST_answer;
@@ -153,17 +153,19 @@
sub caparesponse_check_list {
my ($response,$expr)=@_;
- $expr =~ s/\\/\\\\/g;
- $expr =~ s/\'/\\\'/g;
- my ($result,@list) = &get_array_args($expr,'answer');
- $expr =~ s/\\\'/\'/g;
- $expr =~ s/\\\\/\\/g;
+# $expr =~ s/\\/\\\\/g;
+# $expr =~ s/\'/\\\'/g;
+# my ($result,@list) = &get_array_args($expr,'answer');
+# $expr =~ s/\\\'/\'/g;
+# $expr =~ s/\\\\/\\/g;
+ my ($result,@list);
+ @list=@CAPARESPONSE_CHECK_LIST_answer;
my $aresult='';
my $current_answer;
my $answers=join(':',@list);
$result.="Got response :$answers:\n";
my @responselist;
- my $type =eval $expr.';return $answer;';
+ my $type =eval $expr.';return $type;';
if ($type ne '' && $#list > 0) {
(@responselist)=split /,/,$response;
} else {
@@ -171,7 +173,7 @@
}
my $unit='';
$result.="Initial final response :$responselist['-1']:\n";
- if ($type eq '') {
+ if ($type eq '' || $type eq 'float') {
#for numerical problems split off the unit
if ( $responselist['-1']=~ /(.*[^\s])\s+([^\s]+)/ ) {
$responselist['-1']=$1;
@@ -186,14 +188,15 @@
for ($i=0; $i<@list;$i++) {
$result.="trying answer :$list[$i]:\n";
my $thisanswer=$list[$i];
- $thisanswer=~ s/\\/\\\\/g;
- $thisanswer =~ s/\'/\\\'/g;
+# $thisanswer=~ s/\\/\\\\/g;
+# $thisanswer =~ s/\'/\\\'/g;
+ $result.="trying answer :$thisanswer:\n";
if ($unit eq '') {
- $aresult=&caparesponse_check($responselist[$i],
- $expr.';my $answer=\''.$thisanswer.'\';');
+ $aresult=&caparesponse_check($thisanswer,$responselist[$i],
+ $expr);
} else {
- $aresult=&caparesponse_check($responselist[$i]." $unit",
- $expr.';my $answer=\''.$thisanswer.'\';');
+ $aresult=&caparesponse_check($thisanswer,$responselist[$i]." $unit",
+ $expr);
}
my ($temp)=split /:/, $aresult;
$awards.="$temp,";
Index: loncom/homework/hint.pm
diff -u loncom/homework/hint.pm:1.44 loncom/homework/hint.pm:1.45
--- loncom/homework/hint.pm:1.44 Fri Jun 20 00:18:49 2003
+++ loncom/homework/hint.pm Tue Jun 24 16:41:56 2003
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# implements the tags that control the hints
#
-# $Id: hint.pm,v 1.44 2003/06/20 04:18:49 albertel Exp $
+# $Id: hint.pm,v 1.45 2003/06/24 20:41:56 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -166,6 +166,10 @@
$expression.=';my $type="float";';
}
$expression.="');";
+ my @answer=&Apache::lonxml::get_param_var('answer',$parstack,$safeeval);
+ &Apache::lonxml::debug('answer is'.join(':',@answer));
+ @{$safeeval->varglob('CAPARESPONSE_CHECK_LIST_answer')}=@answer;
+
$result = &Apache::run::run($expression,$safeeval);
&Apache::lonxml::debug("$expression:result:$result:$Apache::lonxml::curdepth");
my ($awards) = split /:/ , $result;
Index: loncom/homework/caparesponse/caparesponse.pm
diff -u loncom/homework/caparesponse/caparesponse.pm:1.104 loncom/homework/caparesponse/caparesponse.pm:1.105
--- loncom/homework/caparesponse/caparesponse.pm:1.104 Wed Jun 4 11:23:08 2003
+++ loncom/homework/caparesponse/caparesponse.pm Tue Jun 24 16:41:56 2003
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# caparesponse definition
#
-# $Id: caparesponse.pm,v 1.104 2003/06/04 15:23:08 bowersj2 Exp $
+# $Id: caparesponse.pm,v 1.105 2003/06/24 20:41:56 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -150,6 +150,10 @@
$expression.=';my $type="float";';
}
$expression.="');";
+ my @answer=&Apache::lonxml::get_param_var('answer',$parstack,$safeeval);
+ &Apache::lonxml::debug('answer is'.join(':',@answer));
+ @{$safeeval->varglob('CAPARESPONSE_CHECK_LIST_answer')}=@answer;
+
$result = &Apache::run::run($expression,$safeeval);
my ($awards) = split /:/ , $result;
($ad) = &Apache::inputtags::finalizeawards(split /,/ , $awards);