--- loncom/homework/matchresponse.pm 2005/02/12 01:13:56 1.51
+++ loncom/homework/matchresponse.pm 2006/04/04 22:24:08 1.58
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Full matching style response
#
-# $Id: matchresponse.pm,v 1.51 2005/02/12 01:13:56 albertel Exp $
+# $Id: matchresponse.pm,v 1.58 2006/04/04 22:24:08 foxr Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -32,6 +32,7 @@ use HTML::Entities();
use Math::Random();
use Apache::optionresponse();
use Apache::lonlocal;
+use Apache::lonnet;
BEGIN {
&Apache::lonxml::register('Apache::matchresponse',('matchresponse'));
@@ -148,7 +149,8 @@ sub end_itemgroup {
$Apache::response::itemgroup{'name_letter_map'}=\%name_letter_map;
my $direction=&Apache::lonxml::get_param('direction',$parstack,$safeeval);
if ($target eq 'web') {
- my $table='
';
+
+ my $table='
'; # extra space to match what latex does.
my $i=0;
if ($direction eq 'horizontal') { $table .='';}
foreach my $name (@names) {
@@ -215,7 +217,7 @@ sub end_item {
my $location=&Apache::lonxml::get_param('location',$parstack,
$safeeval);
&Apache::lonxml::debug("Got a name of :$name:");
- if (!$name) { $name=$Apache::lonxml::curdepth; }
+ if ($name eq "") { $name=$Apache::lonxml::curdepth; }
&Apache::lonxml::debug("Using a name of :$name:");
push @{ $Apache::response::itemgroup{'names'} }, $name;
$Apache::response::itemgroup{"$name.text"} = $text;
@@ -295,18 +297,30 @@ sub displayanswers {
$randomize,
&Apache::response::showallfoils(),
\%Apache::response::foilgroup);
- my $result=&Apache::response::answer_header('matchresponse');
my %name_letter_map;
if (defined(%{ $Apache::response::itemgroup{'name_letter_map'} })) {
%name_letter_map=
%{ $Apache::response::itemgroup{'name_letter_map'} };
}
- foreach my $name (@whichfoils) {
- my $value_name=$Apache::response::foilgroup{$name.'.value'};
- my $letter=$name_letter_map{$value_name};
- $result.=&Apache::response::answer_part('matchresponse',$letter);
+ my $result;
+ if ($Apache::lonhomework::type eq 'exam') {
+ my $i=0;
+ foreach my $name (@whichfoils) {
+ $result.=&Apache::response::answer_header('matchresponse',$i++);
+ my $value_name=$Apache::response::foilgroup{$name.'.value'};
+ my $letter=$name_letter_map{$value_name};
+ $result.=&Apache::response::answer_part('matchresponse',$letter);
+ $result.=&Apache::response::answer_footer('matchresponse');
+ }
+ } else {
+ $result=&Apache::response::answer_header('matchresponse');
+ foreach my $name (@whichfoils) {
+ my $value_name=$Apache::response::foilgroup{$name.'.value'};
+ my $letter=$name_letter_map{$value_name};
+ $result.=&Apache::response::answer_part('matchresponse',$letter);
+ }
+ $result.=&Apache::response::answer_footer('matchresponse');
}
- $result.=&Apache::response::answer_footer('matchresponse');
return $result;
}
@@ -437,7 +451,7 @@ sub displayfoils {
if ($target eq 'tex') {
$question.=' \\\\ '.$letter.':'.$text;
} else {
- $question.='
'.$letter.':'.$text;
+ $question.='
'.$letter.': '.$text;
}
}
} else {
@@ -510,7 +524,7 @@ sub displayfoils {
$result=''.$question.
' | '.$result.' |
';
} else {
- my $tabsize=&Apache::londefdef::recalc($ENV{'form.textwidth'});
+ my $tabsize=&Apache::londefdef::recalc($env{'form.textwidth'});
my ($lefttabsize,$righttabsize)=(0,0);
if ($Apache::matchresponse::TeXitemgroupwidth ne '') {
$Apache::matchresponse::TeXitemgroupwidth=~/(\d*.?\d*)/;
@@ -532,7 +546,7 @@ sub displayfoils {
$result=''.$result.
' | '.$question.' |
';
} else {
- my $tabsize=&Apache::londefdef::recalc($ENV{'form.textwidth'});
+ my $tabsize=&Apache::londefdef::recalc($env{'form.textwidth'});
my ($lefttabsize,$righttabsize)=(0,0);
if ($Apache::matchresponse::TeXitemgroupwidth ne '') {
$Apache::matchresponse::TeXitemgroupwidth=~/(\d*.?\d*)/;
@@ -655,7 +669,7 @@ sub end_foil {
my $name = &Apache::lonxml::get_param('name',$parstack,$safeeval);
&Apache::lonxml::debug("Got a name of :$name:");
if (!$name) {
- &Apache::lonxml::error("Foils without names exist. This can cause problems to malfunction.");
+ &Apache::lonxml::warning("Foils without names exist. This can cause problems to malfunction.");
$name=$Apache::lonxml::curdepth;
}
&Apache::lonxml::debug("Using a name of :$name:");