--- loncom/homework/radiobuttonresponse.pm 2003/05/16 19:25:08 1.71 +++ loncom/homework/radiobuttonresponse.pm 2003/10/13 19:25:30 1.74 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # mutliple choice style responses # -# $Id: radiobuttonresponse.pm,v 1.71 2003/05/16 19:25:08 albertel Exp $ +# $Id: radiobuttonresponse.pm,v 1.74 2003/10/13 19:25:30 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -205,7 +205,7 @@ sub displayallfoils { my $part=$Apache::inputtags::part; my $lastresponse=$Apache::lonhomework::history{"resource.$part.$id.submission"}; my %lastresponse=&Apache::lonnet::str2hash($lastresponse); - if (($Apache::lonhomework::history{"resource.$part.solved"} =~ /^correct/) || ($Apache::inputtags::status[-1] eq 'SHOW_ANSWER')) { + if (&Apache::response::show_answer() ) { foreach my $name (@names) { if ($Apache::response::foilgroup{$name.'.value'} ne 'unused') { $result.="
".$Apache::response::foilgroup{$name.'.value'}; @@ -291,6 +291,8 @@ sub whichfoils { } } #pick a true statement + my $notrue=0; + if (scalar(@truelist) == 0) { $notrue=1; } my $whichtrue = int(&Math::Random::random_uniform() * ($#truelist+1)); &Apache::lonxml::debug("Max is $max, From $#truelist elms, picking $whichtrue"); my (@toplist, @bottomlist); @@ -319,8 +321,12 @@ sub whichfoils { &Apache::lonxml::debug("Answer wants $answer"); my $truename=$truelist[$whichtrue]; my $dosplice=1; + if ($notrue) { + $dosplice=0; + &Apache::lonxml::error("There are no true statements available.
"); + } #insert the true statement, keeping track of where it wants to be - if ($Apache::response::foilgroup{$truename.'.location'} eq 'top' ) { + if ($Apache::response::foilgroup{$truename.'.location'} eq 'top' && $dosplice) { $toplist[$top{$truename}]=$truename; $answer=-1; foreach my $top (reverse(@toplist)) { @@ -328,7 +334,7 @@ sub whichfoils { if ($top eq $truename) { last; } } $dosplice=0; - } elsif ($Apache::response::foilgroup{$truename.'.location'} eq 'bottom') { + } elsif ($Apache::response::foilgroup{$truename.'.location'} eq 'bottom' && $dosplice) { $bottomlist[$bottom{$truename}]=$truename; $answer=-1; foreach my $bot (@bottomlist) { @@ -365,9 +371,8 @@ sub displayfoils { my ($answer,@whichfoils)=&whichfoils($max,$randomize); my $part=$Apache::inputtags::part; my $solved=$Apache::lonhomework::history{"resource.$part.solved"}; - my $status=$Apache::inputtags::status[-1]; if ( ($target ne 'tex') && - (($solved =~ /^correct/) || ($status eq 'SHOW_ANSWER')) ) { + &Apache::response::show_answer() ) { foreach my $name (@whichfoils) { if ($target ne 'tex') { $result.="
";