--- loncom/homework/matchresponse.pm 2005/01/31 22:00:40 1.50
+++ loncom/homework/matchresponse.pm 2006/03/31 11:10:24 1.57
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Full matching style response
#
-# $Id: matchresponse.pm,v 1.50 2005/01/31 22:00:40 albertel Exp $
+# $Id: matchresponse.pm,v 1.57 2006/03/31 11:10:24 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'));
@@ -101,11 +102,15 @@ sub start_itemgroup {
'location',
['top','bottom','left','right'],
$token);
+ $result.=&Apache::edit::select_arg('Items Display Directection:',
+ 'direction',
+ ['vertical','horizontal'],
+ $token);
$result.=&Apache::edit::end_row().&Apache::edit::start_spanning_row();
} elsif ($target eq 'modified') {
my $constructtag=&Apache::edit::get_new_args($token,$parstack,
$safeeval,'randomize',
- 'location');
+ 'location','direction');
if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }
} elsif ($target eq 'web' or $target eq 'tex') {
$Apache::matchresponse::itemtable{'location'}=
@@ -142,27 +147,35 @@ sub end_itemgroup {
}
$Apache::response::itemgroup{'letter_name_map'}=\%letter_name_map;
$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 $i=0;
+ if ($direction eq 'horizontal') { $table .='';}
foreach my $name (@names) {
- $table.='
'.$alphabet[$i].' | '.
- $Apache::response::itemgroup{$name.'.text'}.
- ' |
';
+ if ($direction ne 'horizontal') { $table.=''; }
+ $table.=''.$alphabet[$i].' | '.
+ $Apache::response::itemgroup{$name.'.text'}.' | ';
+ if ($direction ne 'horizontal') { $table.='
'; }
$i++;
}
+ if ($direction eq 'horizontal') { $table .='';}
$table.='
';
$Apache::matchresponse::itemtable{'display'}=$table;
} elsif ($target eq 'tex') {
- my $table=' \begin{description}\setlength{\leftmargin}{2em}\setlength{\labelwidth}{1em}\setlength{\itemsep}{0.5pt plus1pt minus2pt}\setlength{\listparindent}{0em} ';
+ #my $table='\begin{description}\setlength{\leftmargin}{2em}\setlength{\labelwidth}{1em}\setlength{\itemsep}{0.5pt plus1pt minus2pt}\setlength{\listparindent}{0em} ';
+ my $table="\\\\ \\makebox[\\textwidth][l]{ \\begin{tabular}{ll}\n";
my $i=0;
foreach my $name (@names) {
$Apache::response::itemgroup{$name.'.text'}=~s/\$\$/\$/g;
- $table.='\item['.$alphabet[$i].'] '.
- $Apache::response::itemgroup{$name.'.text'};
+ # $table.='\item['.$alphabet[$i].'] '.
+ # $Apache::response::itemgroup{$name.'.text'};
+ my $response = $Apache::response::itemgroup{"$name.text"};
+ $table .= "$alphabet[$i] & $response \\\\ \n";
$i++;
}
- $table.=' \end{description} \strut ';
+ # $table.=' \end{description} \ \strut ';
+ $table .= "\\end{tabular}} \\strut \n\n \\vskip \\parskip ";
if ($Apache::lonhomework::type eq 'exam') {$table.='\vskip -13 mm \strut ';}
$Apache::matchresponse::itemtable{'display'}=$table;
}
@@ -207,7 +220,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;
@@ -287,18 +300,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;
}
@@ -429,7 +454,7 @@ sub displayfoils {
if ($target eq 'tex') {
$question.=' \\\\ '.$letter.':'.$text;
} else {
- $question.='
'.$letter.':'.$text;
+ $question.='
'.$letter.': '.$text;
}
}
} else {
@@ -502,7 +527,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*)/;
@@ -524,7 +549,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*)/;
@@ -647,7 +672,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:");