--- loncom/homework/optionresponse.pm 2005/06/21 21:00:55 1.128 +++ 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.128 2005/06/21 21:00:55 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 = "[2]{'texoptions'}.'" '; + $result .= '>'; } # else nothing changed so just use the default mechanism } if ($target eq 'tex' and $Apache::lonhomework::type ne 'exam') { @@ -178,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, @@ -295,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 { @@ -390,7 +415,7 @@ sub displayfoils { foreach my $option (@opt) { my $escopt=&HTML::Entities::encode($option,'\'"&<>'); if ($option eq $lastopt) { - $optionlist.="\n"; + $optionlist.="\n"; } else { $optionlist.="\n"; } @@ -424,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 /) { @@ -532,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; @@ -632,7 +657,7 @@ 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) { + if ($name eq "") { &Apache::lonxml::warning("Foils without names exist. This can cause problems to malfunction."); $name=$Apache::lonxml::curdepth; } @@ -664,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]; } }