[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);