--- loncom/homework/radiobuttonresponse.pm 2002/05/03 19:44:13 1.40
+++ loncom/homework/radiobuttonresponse.pm 2002/08/05 15:55:21 1.45
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# mutliple choice style responses
#
-# $Id: radiobuttonresponse.pm,v 1.40 2002/05/03 19:44:13 albertel Exp $
+# $Id: radiobuttonresponse.pm,v 1.45 2002/08/05 15:55:21 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -29,6 +29,7 @@
package Apache::radiobuttonresponse;
use strict;
+use HTML::Entities();
BEGIN {
&Apache::lonxml::register('Apache::radiobuttonresponse',('radiobuttonresponse'));
@@ -73,9 +74,9 @@ sub end_radiobuttonresponse {
return $result;
}
-%Apache::response::foilgroup={};
+%Apache::response::foilgroup=();
sub start_foilgroup {
- %Apache::response::foilgroup={};
+ %Apache::response::foilgroup=();
$Apache::radiobuttonresponse::conceptgroup=0;
&Apache::response::setrandomnumber();
return '';
@@ -183,13 +184,27 @@ sub displayallfoils {
my $part=$Apache::inputtags::part;
my $lastresponse=$Apache::lonhomework::history{"resource.$part.$id.submission"};
my %lastresponse=&Apache::lonnet::str2hash($lastresponse);
- &Apache::lonhomework::showhash(%lastresponse);
- foreach my $name (@names) {
- if ($Apache::response::foilgroup{$name.'.value'} ne 'unused') {
- $result.="
\n";
- $temp++;
+ if (($Apache::lonhomework::history{"resource.$part.solved"} =~ /^correct/) || ($Apache::inputtags::status[-1] eq '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.='';
+ }
+ $result .= $Apache::response::foilgroup{$name.'.text'};
+ if ($Apache::response::foilgroup{$name.'.value'} eq 'true') {
+ $result.='';
+ }
+ }
+ }
+ } else {
+ foreach my $name (@names) {
+ if ($Apache::response::foilgroup{$name.'.value'} ne 'unused') {
+ $result.="
\n";
+ $temp++;
+ }
}
}
return $result;
@@ -200,35 +215,39 @@ sub whichfoils {
my @truelist;
my @falselist;
+ my @whichfalse =();
my @names;
if ( $Apache::response::foilgroup{'names'} ) {
@names= @{ $Apache::response::foilgroup{'names'} };
}
- foreach my $name (@names) {
- #result.="
$name is $Apache::response::foilgroup{$name.'.value'} ";
- if ($Apache::response::foilgroup{$name.'.value'} eq 'true') {
- push (@truelist,$name);
- } elsif ($Apache::response::foilgroup{$name.'.value'} eq 'false') {
- push (@falselist,$name);
- } elsif ($Apache::response::foilgroup{$name.'.value'} eq 'unused') {
- } else {
- &Apache::lonxml::error(&HTML::Entites::encode("No valid value assigned ($Apache::response::foilgroup{$name.'.value'}) for foil $name in "));
+ if (&Apache::response::showallfoils()) {
+ @whichfalse=@names;
+ } else {
+ foreach my $name (@names) {
+ #result.="
$name is $Apache::response::foilgroup{$name.'.value'} ";
+ if ($Apache::response::foilgroup{$name.'.value'} eq 'true') {
+ push (@truelist,$name);
+ } elsif ($Apache::response::foilgroup{$name.'.value'} eq 'false') {
+ push (@falselist,$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 "));
+ }
}
+ my $whichtrue = int(rand($#truelist+1));
+ &Apache::lonxml::debug("Max is $max, From $#truelist elms, picking $whichtrue");
+ while ((($#whichfalse+1) < $max-1) && ($#falselist > -1)) {
+ &Apache::lonxml::debug("Have $#whichfalse max is $max");
+ my $afalse=int(rand($#falselist+1));
+ &Apache::lonxml::debug("From $#falselist elms, picking $afalse");
+ $afalse=splice(@falselist,$afalse,1);
+ &Apache::lonxml::debug("Picked $afalse");
+ push (@whichfalse,$afalse);
+ }
+ splice(@whichfalse,$answer,0,$truelist[$whichtrue]);
+ &Apache::lonxml::debug("the true statement is $answer");
}
- my $whichtrue = int(rand($#truelist+1));
- &Apache::lonxml::debug("Max is $max, From $#truelist elms, picking $whichtrue");
- my @whichfalse =();
- while ((($#whichfalse+1) < $max-1) && ($#falselist > -1)) {
- &Apache::lonxml::debug("Have $#whichfalse max is $max");
- my $afalse=int(rand($#falselist+1));
- &Apache::lonxml::debug("From $#falselist elms, picking $afalse");
- $afalse=splice(@falselist,$afalse,1);
- &Apache::lonxml::debug("Picked $afalse");
- push (@whichfalse,$afalse);
- }
- splice(@whichfalse,$answer,0,$truelist[$whichtrue]);
- &Apache::lonxml::debug("the true statement is $answer");
return @whichfalse;
}
@@ -237,17 +256,22 @@ sub displayfoils {
my $result;
my @whichfoils=&whichfoils($max,$answer);
- if ($Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"} =~ /^correct/ ) {
+ if ($Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"} =~ /^correct/ || ($Apache::inputtags::status[-1] eq 'SHOW_ANSWER')) {
foreach my $name (@whichfoils) {
if ($target ne 'tex') {
$result.="
";
+ } else {
+ $result.='\vskip 0 mm ';
}
if ($Apache::response::foilgroup{$name.'.value'} eq 'true') {
- $result.='Correct';
+ $result.='Correct:';
} else {
- $result.='Incorrect';
+ $result.='Incorrect:';
+ }
+ $result.=$Apache::response::foilgroup{$name.'.text'}."\n";
+ if ($Apache::response::foilgroup{$name.'.value'} eq 'true') {
+ $result.='';
}
- $result.=":".$Apache::response::foilgroup{$name.'.text'}."\n";
}
} else {
my $temp=0;
@@ -261,12 +285,12 @@ sub displayfoils {
if (defined($lastresponse{$name})) { $result .= 'checked="on"'; }
$result .= '>'.$Apache::response::foilgroup{$name.'.text'}."\n";
} else {
- $result .= $Apache::response::foilgroup{$name.'.text'};
+ $result .= '\item '.$Apache::response::foilgroup{$name.'.text'};
}
$temp++;
}
}
- if ($target ne 'tex') { $result.="
"; }
+ if ($target ne 'tex') { $result.="
"; } else { $result.='\vskip 0 mm '; }
return $result;
}
@@ -285,7 +309,7 @@ sub displayanswers {
sub start_conceptgroup {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
$Apache::radiobuttonresponse::conceptgroup=1;
- %Apache::response::conceptgroup={};
+ %Apache::response::conceptgroup=();
my $result;
if ($target eq 'edit') {
$result.=&Apache::edit::tag_start($target,$token);
@@ -331,13 +355,10 @@ sub start_foil {
my $result='';
if ($target eq 'web' || $target eq 'tex') {
&Apache::lonxml::startredirection;
- if ($target eq 'tex') {
- $result .= '\item ';
- }
} elsif ($target eq 'edit') {
$result=&Apache::edit::tag_start($target,$token);
$result.=&Apache::edit::text_arg('Name:','name',$token);
- $result.=&Apache::edit::select_arg('Correct Option:','value',
+ $result.=&Apache::edit::select_or_text_arg('Correct Option:','value',
['unused','true','false'],$token);
$result.=&Apache::edit::end_row().&Apache::edit::start_spanning_row();
} elsif ($target eq 'modified') {
@@ -357,7 +378,8 @@ sub end_foil {
if ($value ne 'unused') {
my $name = &Apache::lonxml::get_param('name',$parstack,$safeeval);
if (!$name) { $name=$Apache::lonxml::curdepth; }
- if ( $Apache::radiobuttonresponse::conceptgroup ) {
+ if ( $Apache::radiobuttonresponse::conceptgroup
+ && !&Apache::response::showallfoils() ) {
push @{ $Apache::response::conceptgroup{'names'} }, $name;
$Apache::response::conceptgroup{"$name.value"} = $value;
$Apache::response::conceptgroup{"$name.text"} = $text;