--- loncom/homework/radiobuttonresponse.pm 2004/03/05 22:59:48 1.83 +++ loncom/homework/radiobuttonresponse.pm 2004/05/27 04:25:13 1.89 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # mutliple choice style responses # -# $Id: radiobuttonresponse.pm,v 1.83 2004/03/05 22:59:48 albertel Exp $ +# $Id: radiobuttonresponse.pm,v 1.89 2004/05/27 04:25:13 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.'}.]'; } @@ -192,6 +197,7 @@ sub end_foilgroup { } } } + &Apache::response::poprandomnumber(); &Apache::lonxml::increment_counter(); return $result; } @@ -227,12 +233,12 @@ sub displayallfoils { if (&Apache::response::show_answer() ) { foreach my $name (@names) { if ($Apache::response::foilgroup{$name.'.value'} ne 'unused') { - $result.="
".$Apache::response::foilgroup{$name.'.value'}; - if ($Apache::response::foilgroup{$name.'.value'} eq 'true') { + $result.="
"; + if (defined($lastresponse{$name})) { $result.=''; } $result .= $Apache::response::foilgroup{$name.'.text'}; - if ($Apache::response::foilgroup{$name.'.value'} eq 'true') { + if (defined($lastresponse{$name})) { $result.=''; } } @@ -280,7 +286,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 +312,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 @@ -535,12 +541,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;