--- loncom/homework/optionresponse.pm 2005/04/07 06:56:22 1.125
+++ loncom/homework/optionresponse.pm 2007/01/17 10:46:13 1.136
@@ -1,7 +1,7 @@
# LearningOnline Network with CAPA
# option list style responses
#
-# $Id: optionresponse.pm,v 1.125 2005/04/07 06:56:22 albertel Exp $
+# $Id: optionresponse.pm,v 1.136 2007/01/17 10:46:13 foxr Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -114,6 +114,9 @@ sub start_foilgroup {
Delete an Option:
ENDTABLE
+ $result.= &Apache::edit::checked_arg('Print options:','texoptions',
+ [ ['nochoice','Don\'t show option list'] ]
+ ,$token);
$result.= &Apache::edit::end_row();
$result.= &Apache::edit::start_spanning_row();
$result.= $insertlist.' ';
@@ -137,7 +140,9 @@ ENDTABLE
}
$optchanged=1;
}
- if ($optchanged) {
+ my $rebuildtag = &Apache::edit::get_new_args($token,$parstack,$safeeval,
+ ('texoptions'));
+ if ($optchanged || $rebuildtag ) {
$result = "';
+ $result.=')" ';
+ $result .= 'texoptions="'.$token->[2]{'texoptions'}.'" ';
+ $result .= '>';
} # else nothing changed so just use the default mechanism
}
if ($target eq 'tex' and $Apache::lonhomework::type ne 'exam') {
@@ -165,6 +172,8 @@ sub end_foilgroup {
my $name;
my @opt;
eval '@opt ='.&Apache::lonxml::get_param('options',$parstack,$safeeval);
+ &Apache::lonxml::debug("options:".join(':',@opt));
+
my $TeXlayout=&Apache::lonxml::get_param('TeXlayout',$parstack,$safeeval,
-2,0);
if ($target eq 'tex' && $tex_option_switch eq 'nochoice') {@opt=();}
@@ -176,6 +185,7 @@ sub end_foilgroup {
$result.=&displayfoils($target,$max,$randomize,$TeXlayout,@opt);
} elsif ( $target eq 'answer') {
$result.=&displayanswers($max,$randomize,@opt);
+
} elsif ( $target eq 'analyze') {
my @shown = &whichfoils($max,$randomize);
&Apache::response::analyze_store_foilgroup(\@shown,
@@ -293,17 +303,34 @@ sub whichfoils {
}
sub displayanswers {
- my ($max,$randomize,@opt)=@_;
- if (!defined(@{ $Apache::response::foilgroup{'names'} })) {return;}
- my @names = @{ $Apache::response::foilgroup{'names'} };
- my @whichopt = &whichfoils($max,$randomize);
- my $result=&Apache::response::answer_header('optionresponse');
- foreach my $name (@whichopt) {
- $result.=&Apache::response::answer_part('optionresponse',
- $Apache::response::foilgroup{$name.'.value'})
- }
- $result.=&Apache::response::answer_footer('optionresponse');
- return $result;
+ my ($max,$randomize,@opt)=@_;
+ if (!defined(@{ $Apache::response::foilgroup{'names'} })) {return;}
+ my @names = @{ $Apache::response::foilgroup{'names'} };
+ my @whichopt = &whichfoils($max,$randomize);
+ my $result;
+ if ($Apache::lonhomework::type eq 'exam') {
+ my $i = 0;
+ my %opt = map { ($_,$i++) } @opt;
+
+ $i = 0;
+ my @alphabet = ('A'..'Z');
+ foreach my $name (@whichopt) {
+ $result.=&Apache::response::answer_header('optionresponse',$i++);
+ $result.=&Apache::response::answer_part('optionresponse',
+ $alphabet[$opt{$Apache::response::foilgroup{$name.'.value'}}]);
+ $result.=&Apache::response::answer_part('optionresponse',
+ $Apache::response::foilgroup{$name.'.value'});
+ $result.=&Apache::response::answer_footer('optionresponse');
+ }
+ } else {
+ $result=&Apache::response::answer_header('optionresponse');
+ foreach my $name (@whichopt) {
+ $result.=&Apache::response::answer_part('optionresponse',
+ $Apache::response::foilgroup{$name.'.value'});
+ }
+ $result.=&Apache::response::answer_footer('optionresponse');
+ }
+ return $result;
}
sub check_for_invalid {
@@ -358,7 +385,7 @@ sub displayfoils {
if ($text=~/^\s*$/) {
$text=$value.$text;
} else {
- $text=$value.': '.$text;
+ $text=''.$value.': '.$text;
}
} else {
$text=''.$text;
@@ -385,13 +412,13 @@ sub displayfoils {
}
my $lastopt=$lastresponse{$name};
my $optionlist="\n";
- my $option;
- foreach $option (@opt) {
- if ($option eq $lastopt) {
- $optionlist.="\n";
- } else {
- $optionlist.="\n";
- }
+ foreach my $option (@opt) {
+ my $escopt=&HTML::Entities::encode($option,'\'"&<>');
+ if ($option eq $lastopt) {
+ $optionlist.="\n";
+ } else {
+ $optionlist.="\n";
+ }
}
if ($target ne 'tex') {
if ($Apache::lonhomework::type ne 'exam') {
@@ -422,7 +449,7 @@ sub displayfoils {
$texoptionlist = &optionlist_correction($TeXlayout,@opt);
}
if ($text=~//) {
- $text=~s|| \\makebox\[0\.3in\]\[b\]\{\\hrulefill\} |;
+ $text=~s|| \\makebox\[0\.3in\]\[b\]\{\\hrulefill\} |g;
}
if ($text=~m/\\item /) {
@@ -530,7 +557,7 @@ sub bubbles {
$head.='lr';
} else {
$line=~s/\&\s*$//;
- $result.='\vskip -2 mm\noindent\begin{tabular}{'.$head.'}'.$line.'\\\\\end{tabular}\vskip 0 mm';
+ $result.='\vskip -2 mm\noindent\setlength{\tabcolsep}{2 mm}\begin{tabular}{'.$head.'}'.$line.'\\\\\end{tabular}\vskip 0 mm';
$line = '\hskip -1 mm {\small \textbf{'.$alphabet[$ind].'}}$\bigcirc$\hskip -1 mm & \hskip -3 mm {\small '.$opt[$ind].'} & ';;
$head ='lr';
$current_length = (length($opt[$ind])+length($alphabet[$ind]))*2;
@@ -630,8 +657,8 @@ sub end_foil {
if ($value ne 'unused') {
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.");
+ if ($name eq "") {
+ &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:");
@@ -662,14 +689,14 @@ sub end_foil {
sub start_drawoptionlist {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
- if ($target ne 'meta') {
+ if (($target ne 'meta') && ($target ne 'answer')) {
return $token->[4];
}
}
sub end_drawoptionlist {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
- if ($target ne 'meta') {
+ if (($target ne 'meta') && ($target ne 'answer')) {
return $token->[2];
}
}
|