[prev in list] [next in list] [prev in thread] [next in thread] 

List:       lon-capa-cvs
Subject:    [LON-CAPA-cvs] cvs: loncom /homework/caparesponse caparesponse.pm
From:       raeburn <raeburn () source ! lon-capa ! org>
Date:       2018-09-13 17:00:05
Message-ID: cvsraeburn1536858005 () cvsserver
[Download RAW message or body]

raeburn		Thu Sep 13 17:00:05 2018 EDT

  Modified files:              
    /loncom/homework/caparesponse	caparesponse.pm 
  Log:
  - Better error messages about "Computer's answer" where unit includes
    $ or , (in numericalresponse), and format lacks that character.
  
  
Index: loncom/homework/caparesponse/caparesponse.pm
diff -u loncom/homework/caparesponse/caparesponse.pm:1.258 \
                loncom/homework/caparesponse/caparesponse.pm:1.259
--- loncom/homework/caparesponse/caparesponse.pm:1.258	Tue Aug  9 23:43:45 2016
+++ loncom/homework/caparesponse/caparesponse.pm	Thu Sep 13 17:00:05 2018
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # caparesponse definition
 #
-# $Id: caparesponse.pm,v 1.258 2016/08/09 23:43:45 raeburn Exp $
+# $Id: caparesponse.pm,v 1.259 2018/09/13 17:00:05 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -664,7 +664,14 @@
 	my (@formats)=&Apache::lonxml::get_param_var('format',$parstack,$safeeval);
 
 	my $unit=&Apache::lonxml::get_param_var('unit',$parstack,$safeeval);
-	
+	my ($needsdollar,$needscomma);
+	if ($unit =~ /\$/) {
+	    $needsdollar = 1;
+	}
+	if ($unit =~ /\,/) {
+	    $needscomma = 1;
+	}
+
 	if ($target eq 'answer') {
 	    $result.=&Apache::response::answer_header($tag,undef,
 						      scalar(keys(%answer)));
@@ -760,7 +767,7 @@
 			if ($unit=~/\,/) { $fmt="\,".$fmt; $unit=~s/\,//g; }
 			$element = &format_number($element,$fmt,$target,
 						  $safeeval);
-			if ($fmt=~/\$/ && $unit!~/\$/) { $element=~s/\$//; }
+			if ($fmt=~/\$/ && !$needsdollar) { $element=~s/\$//; }
 		    }
 		}
 		push(@fmt_ans,join(',',@$ans));
@@ -773,7 +780,7 @@
 		! ($Apache::lonhomework::type eq 'exam' ||
 		   lc($hideunit) eq "yes") )  {
 		my $cleanunit=$unit;
-		$cleanunit=~s/\$\,//g;
+		$cleanunit=~s/[\$,]//g;
 		foreach my $ans (@fmt_ans) {
 		    $ans.=" $cleanunit";
 		}
@@ -790,7 +797,13 @@
 						    $tag,$parstack,
 						    $safeeval,1);
 		    $error=&mt("Computer's answer is incorrect ([_1]).",'"'.join(', \
                ',@$response).'"').' ';
-                    if ($ad eq 'UNIT_INVALID_STUDENT') {
+                    if (($ad eq 'NO_UNIT') && $needsdollar) {
+                        $error.=&mt('The unit attribute includes [_1] but the answer \
format does not.','$').' '. +                                &mt('Either remove the \
[_1] from the unit or prepend [_1] to the answer format.','$');     +                 \
} elsif (($ad eq 'COMMA_FAIL') && $needscomma) { +                        \
$error.=&mt('The unit attribute includes [_1] but the answer format does not.',',').' \
'. +                                &mt('Either remove the [_1] from the unit or \
prepend [_1] to the answer format.',','); +                    } elsif ($ad eq \
                'UNIT_INVALID_STUDENT') {
                         $error.=&mt('Unable to interpret units. Computer reads units \
                as "[_1]".',$msg).' '.
                                 &mt('The unit attribute in the numericalresponse \
item needs to be a supported physical unit.');  } elsif ($sigline ne '') {


_______________________________________________
LON-CAPA-cvs mailing list
LON-CAPA-cvs@mail.lon-capa.org
http://mail.lon-capa.org/mailman/listinfo/lon-capa-cvs


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic