--- loncom/homework/radiobuttonresponse.pm 2004/03/05 23:04:31 1.84 +++ loncom/homework/radiobuttonresponse.pm 2004/08/30 02:03:44 1.93 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # mutliple choice style responses # -# $Id: radiobuttonresponse.pm,v 1.84 2004/03/05 23:04:31 albertel Exp $ +# $Id: radiobuttonresponse.pm,v 1.93 2004/08/30 02:03:44 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -29,6 +29,7 @@ package Apache::radiobuttonresponse; use strict; use HTML::Entities(); +use Apache::lonlocal; BEGIN { &Apache::lonxml::register('Apache::radiobuttonresponse',('radiobuttonresponse')); @@ -42,6 +43,7 @@ sub start_radiobuttonresponse { push (@Apache::lonxml::namespace,'radiobuttonresponse'); my $id = &Apache::response::start_response($parstack,$safeeval); %Apache::hint::radiobutton=(); + undef(%Apache::response::foilnames); if ($target eq 'meta') { $result=&Apache::response::meta_package_write('radiobuttonresponse'); } elsif ($target eq 'edit' ) { @@ -75,6 +77,8 @@ sub start_radiobuttonresponse { $result .= ' \renewcommand{\labelenumi}{\alph{enumi}.}'; } elsif ($type eq 'i') { $result .= ' \renewcommand{\labelenumi}{\roman{enumi}.}'; + } else { + $result .= ' \renewcommand{\labelenumi}{\Alph{enumi}.}'; } $result .= '\begin{enumerate}'; } elsif ($target eq 'analyze') { @@ -92,6 +96,7 @@ sub end_radiobuttonresponse { &Apache::response::end_response; pop @Apache::lonxml::namespace; &Apache::lonxml::deregister('Apache::radiobuttonresponse',('foilgroup','foil','conceptgroup')); + undef(%Apache::response::foilnames); return $result; } @@ -101,7 +106,7 @@ sub start_foilgroup { my $result; %Apache::response::foilgroup=(); $Apache::radiobuttonresponse::conceptgroup=0; - &Apache::response::setrandomnumber(); + &Apache::response::pushrandomnumber(); if ($target eq 'tex' && $Apache::lonhomework::type eq 'exam') { $result.='\item[\textbf{'.$Apache::lonxml::counter.'}.]'; } @@ -162,9 +167,11 @@ sub end_foilgroup { if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' || $target eq 'tex' || $target eq 'analyze') { my $style = $Apache::lonhomework::type; + my $direction = &Apache::lonxml::get_param('direction',$parstack, + $safeeval,'-2'); if ( $style eq 'survey' && $target ne 'analyze') { if ($target eq 'web' || $target eq 'tex') { - $result=&displayallfoils(); + $result=&displayallfoils($direction); } elsif ( $target eq 'answer' ) { $result=&displayallanswers(); } elsif ( $target eq 'grade' ) { @@ -177,7 +184,7 @@ sub end_foilgroup { my $randomize = &Apache::lonxml::get_param('randomize',$parstack, $safeeval,'-2'); if ($target eq 'web' || $target eq 'tex') { - $result=&displayfoils($target,$max,$randomize); + $result=&displayfoils($target,$max,$randomize,$direction); } elsif ($target eq 'answer' ) { $result=&displayanswers($max,$randomize); } elsif ( $target eq 'grade') { @@ -192,6 +199,7 @@ sub end_foilgroup { } } } + &Apache::response::poprandomnumber(); &Apache::lonxml::increment_counter(); return $result; } @@ -215,6 +223,7 @@ sub getfoilcounts { } sub displayallfoils { + my ($direction)=@_; my $result; &Apache::lonxml::debug("survey style display"); my @names = @{ $Apache::response::foilgroup{'names'} }; @@ -223,11 +232,16 @@ sub displayallfoils { my $part=$Apache::inputtags::part; my $lastresponse= $Apache::lonhomework::history{"resource.$part.$id.submission"}; + if ($direction eq 'horizontal') { $result.=''; } my %lastresponse=&Apache::lonnet::str2hash($lastresponse); if (&Apache::response::show_answer() ) { foreach my $name (@names) { if ($Apache::response::foilgroup{$name.'.value'} ne 'unused') { - $result.="
"; + if ($direction eq 'horizontal') { + $result.=""; } } } } else { foreach my $name (@names) { if ($Apache::response::foilgroup{$name.'.value'} ne 'unused') { - $result.="
\n"; + $result .= '>'.$Apache::response::foilgroup{$name.'.text'}.""; $temp++; + if ($direction eq 'horizontal') { $result.=""; } } } } + if ($direction eq 'horizontal') { $result.='
"; + } else { + $result.="
"; + } if (defined($lastresponse{$name})) { $result.=''; } @@ -235,18 +249,26 @@ sub displayallfoils { if (defined($lastresponse{$name})) { $result.=''; } + if ($direction eq 'horizontal') { $result.="
'; } return $result; } @@ -280,7 +302,7 @@ sub whichfoils { push (@whichfalse,$name); } elsif ($Apache::response::foilgroup{$name.'.value'} eq 'unused') { } else { - &Apache::lonxml::error(&HTML::Entities::encode("No valid value assigned ($Apache::response::foilgroup{$name.'.value'}) for foil $name in ")); + &Apache::lonxml::error(&HTML::Entities::encode("No valid value assigned ($Apache::response::foilgroup{$name.'.value'}) for foil $name in ",'<>&"')); } } } else { @@ -306,7 +328,7 @@ sub whichfoils { } } elsif ($Apache::response::foilgroup{$name.'.value'} eq 'unused') { } else { - &Apache::lonxml::error(&HTML::Entities::encode("No valid value assigned ($Apache::response::foilgroup{$name.'.value'}) for foil $name in ")); + &Apache::lonxml::error(&HTML::Entities::encode("No valid value assigned ($Apache::response::foilgroup{$name.'.value'}) for foil $name in ",'<>&"')); } } #pick a true statement @@ -384,7 +406,7 @@ sub whichfoils { } sub displayfoils { - my ($target,$max,$randomize)=@_; + my ($target,$max,$randomize,$direction)=@_; my $result; my ($answer,@whichfoils)=&whichfoils($max,$randomize); @@ -392,7 +414,15 @@ sub displayfoils { my $solved=$Apache::lonhomework::history{"resource.$part.solved"}; if ( ($target ne 'tex') && &Apache::response::show_answer() ) { + if ($direction eq 'horizontal') { + if ($target ne 'tex') { + $result.=''; + } + } foreach my $name (@whichfoils) { + if ($direction eq 'horizontal') { + if ($target ne 'tex') { $result.=''; } + } + } + if ($direction eq 'horizontal') { + if ($target ne 'tex') { + $result.='
'; } + } if ($target ne 'tex') { $result.="
"; } else { @@ -403,14 +433,19 @@ sub displayfoils { } else { $result.='Incorrect:'; } - if ($target ne 'tex') { - $result.=$Apache::response::foilgroup{$name.'.text'}."\n"; - } else { - $result.=$Apache::response::foilgroup{$name.'.text'}; - } + $result.=$Apache::response::foilgroup{$name.'.text'}; + if ($target eq 'web') { $result.=""; } if ($Apache::response::foilgroup{$name.'.value'} eq 'true') { if ($target ne 'tex') { $result.='';} else {$result.='}';} } + if ($direction eq 'horizontal') { + if ($target ne 'tex') { $result.='
'; + } } } else { my @alphabet = ('A'..'Z'); @@ -420,11 +455,21 @@ sub displayfoils { my $part=$Apache::inputtags::part; my $lastresponse=$Apache::lonhomework::history{"resource.$part.$id.submission"}; my %lastresponse=&Apache::lonnet::str2hash($lastresponse); + if ($target ne 'tex' && $direction eq 'horizontal') { + $result.=""; + } foreach my $name (@whichfoils) { if ($target ne 'tex') { - $result.="
\n"; + $result .= '>'.$Apache::response::foilgroup{$name.'.text'}.""; } else { if ($Apache::lonhomework::type eq 'exam') { $result .= '{\small \textbf{'.$alphabet[$i].'}}$\bigcirc$'.$Apache::response::foilgroup{$name.'.text'}.'\\\\'; #' stupid emacs @@ -433,10 +478,16 @@ sub displayfoils { $result .= '\vspace*{-2 mm}\item '.$Apache::response::foilgroup{$name.'.text'}; } } + if ($target ne 'tex' && $direction eq 'horizontal') { + $result.=""; + } $temp++; } + if ($target ne 'tex' && $direction eq 'horizontal') { + $result.="
"; + } } - if ($target ne 'tex') { $result.="
"; } else { $result.='\vskip 0 mm '; } + if ($target ne 'tex') { if ($direction ne 'horizontal') { $result.="
";} } else { $result.='\vskip 0 mm '; } return $result; } @@ -535,12 +586,18 @@ sub end_foil { if ($target eq 'web' || $target eq 'tex' || $target eq 'analyze') { $text=&Apache::lonxml::endredirection; } - if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || $target eq 'tex' || $target eq 'analyze') { + if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' + || $target eq 'tex' || $target eq 'analyze') { my $value = &Apache::lonxml::get_param('value',$parstack,$safeeval); if ($value ne 'unused') { my $name = &Apache::lonxml::get_param('name',$parstack,$safeeval); - my $location =&Apache::lonxml::get_param('location',$parstack,$safeeval); if (!$name) { $name=$Apache::lonxml::curdepth; } + if (defined($Apache::response::foilnames{$name})) { + &Apache::lonxml::error(&mt("Foil name [_1] appears more than once. Foil names need to be unique.",$name)); + } + $Apache::response::foilnames{$name}++; + my $location =&Apache::lonxml::get_param('location',$parstack, + $safeeval); if ( $Apache::radiobuttonresponse::conceptgroup && !&Apache::response::showallfoils() ) { push @{ $Apache::response::conceptgroup{'names'} }, $name;