--- loncom/homework/optionresponse.pm 2005/01/31 22:00:40 1.124
+++ loncom/homework/optionresponse.pm 2006/03/15 17:10:49 1.135
@@ -1,7 +1,7 @@
# LearningOnline Network with CAPA
# option list style responses
#
-# $Id: optionresponse.pm,v 1.124 2005/01/31 22:00:40 albertel Exp $
+# $Id: optionresponse.pm,v 1.135 2006/03/15 17:10:49 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -29,6 +29,7 @@ package Apache::optionresponse;
use strict;
use Apache::response();
use Apache::lonlocal;
+use Apache::lonnet;
BEGIN {
&Apache::lonxml::register('Apache::optionresponse',('optionresponse'));
@@ -113,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.' ';
@@ -121,14 +125,14 @@ ENDTABLE
my @options;
my $optchanged=0;
eval '@options ='.&Apache::lonxml::get_param('options',$parstack,$safeeval);
- if ($ENV{"form.$Apache::lonxml::curdepth.deleteopt"}) {
- my $delopt=$ENV{"form.$Apache::lonxml::curdepth.deleteopt"};
+ if ($env{"form.$Apache::lonxml::curdepth.deleteopt"}) {
+ my $delopt=$env{"form.$Apache::lonxml::curdepth.deleteopt"};
&Apache::lonxml::debug("Deleting :$delopt:");
splice(@options,$delopt-1,1);
$optchanged=1;
}
- if ($ENV{"form.$Apache::lonxml::curdepth.options"}) {
- my $newopt = $ENV{"form.$Apache::lonxml::curdepth.options"};
+ if ($env{"form.$Apache::lonxml::curdepth.options"}) {
+ my $newopt = $env{"form.$Apache::lonxml::curdepth.options"};
if ($options[0]) {
push(@options,$newopt);
} else {
@@ -136,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') {
@@ -164,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=();}
@@ -192,7 +202,7 @@ sub end_foilgroup {
my $ignored=0;
foreach $name (@whichopt) {
my $response=&Apache::response::getresponse($temp);
- if ($ENV{'form.submitted'} eq 'scantron' && $response=~/\S/) {
+ if ($env{'form.submitted'} eq 'scantron' && $response=~/\S/) {
$response = $opt[$response];
}
if ( $response =~ /[^\s]/) {
@@ -292,17 +302,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 {
@@ -357,7 +384,7 @@ sub displayfoils {
if ($text=~/^\s*$/) {
$text=$value.$text;
} else {
- $text=$value.': '.$text;
+ $text=''.$value.': '.$text;
}
} else {
$text=''.$text;
@@ -384,13 +411,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') {
@@ -511,11 +538,11 @@ sub bubbles {
my $number_of_bubbles = $#opt + 1;
my $current_length = 0;
my $textwidth;
- if ($ENV{'form.textwidth'} ne '') {
- $ENV{'form.textwidth'}=~/(\d+)/;
+ if ($env{'form.textwidth'} ne '') {
+ $env{'form.textwidth'}=~/(\d+)/;
$textwidth=$1;
} else {
- $ENV{'textwidth'}=~/(\d*)\.?(\d*)/;
+ $env{'form.textwidth'}=~/(\d*)\.?(\d*)/;
$textwidth=$1.'.'.$2;
}
for (my $ind=0;$ind<=$number_of_bubbles;$ind++) {
@@ -529,7 +556,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;
@@ -629,8 +656,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:");
|