--- 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:");