--- loncom/homework/radiobuttonresponse.pm 2001/01/11 22:17:30 1.4
+++ loncom/homework/radiobuttonresponse.pm 2001/01/12 01:07:13 1.5
@@ -28,37 +28,68 @@ sub start_foilgroup {
%Apache::response::foilgroup={};
}
+sub setrandomnumber {
+ my $rndseed=&Apache::lonnet::rndseed();
+ $rndseed=unpack("%32i",$rndseed);
+ $rndseed=$rndseed
+ +&Apache::lonnet::numval($Apache::inputtags::part)
+ +&Apache::lonnet::numval($Apache::inputtags::response['-1']);
+ srand($rndseed);
+ return '';
+}
+
#FIXME needs to stablely do random picks
sub end_foilgroup {
my ($target,$token,$parstack,$parser,$safeeval,$style)=@_;
my $name;
my $result;
+ &setrandomnumber();
+ my $rrargs ='';
+ if ( $#$parstack > 0 ) { $rrargs=$$parstack['-2']; }
+ my $max = &Apache::run::run("{$rrargs;".'return $max}',$safeeval);
+ my $answer = int(rand $max);
+ if ($target eq 'web') {
+ $result=&displayfoils($max,$answer);
+ } elsif ( $target eq 'grade') {
+ if ( defined $ENV{'form.submit'}) {
+ my $response = $ENV{'form.HWVAL'.$Apache::inputtags::response['-1']};
+ if ( $response =~ /[^\s]/) {
+ my $id = $Apache::inputtags::response['-1'];
+ $Apache::lonhomework::results{"resource.$Apache::inputtags::part.$id.submission"}=$response;
+ &Apache::lonxml::debug("submitted a $response
\n");
+ if ($response == $answer) {
+ $Apache::lonhomework::results{"resource.$Apache::inputtags::part.$id.awarddetail"}='EXACT_ANS';
+ } else {
+ $Apache::lonhomework::results{"resource.$Apache::inputtags::part.$id.awarddetail"}='INCORRECT';
+ }
+ }
+ }
+ }
+ return $result;
+}
+
+sub displayfoils {
+ my ($max,$answer)=@_;
my @names = @{ $Apache::response::foilgroup{'names'} };
my @truelist;
my @falselist;
- my $rndseed=&Apache::lonnet::rndseed();
- $rndseed=$rndseed
- +&Apache::lonnet::numval($Apache::inputtags::part)
- +&Apache::lonnet::numval($Apache::inputtags::response['-1']);
- srand($rndseed*10);
+ my $result;
+ my $name;
+
foreach $name (@names) {
- $result.="
$name is $Apache::response::foilgroup{$name.'.value'} ";
+ #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("Unknow state $Apache::response::foilgroup{$name.'.value'} for $name in ");
+ &Apache::lonxml::error("Unknown state $Apache::response::foilgroup{$name.'.value'} for $name in ");
}
}
- my $rrargs ='';
- if ( $#$parstack > 0 ) { $rrargs=$$parstack['-2']; }
- my $max = &Apache::run::run("{$rrargs;".'return $max}',$safeeval);
my $whichtrue = rand $#truelist;
&Apache::lonxml::debug("Max is $max, From $#truelist elms, picking $whichtrue");
my @whichfalse =();
- my $temp=0;
while ((($#whichfalse+2) < $max) && ($#falselist > -1)) {
my $afalse=rand $#falselist;
&Apache::lonxml::debug("From $#falselist elms, picking $afalse");
@@ -66,18 +97,19 @@ sub end_foilgroup {
&Apache::lonxml::debug("Picked $afalse");
push (@whichfalse,$afalse);
}
- my $where = rand $max;
- splice(@whichfalse,$where,0,$truelist[$whichtrue]);
- my $temp;
- foreach $temp (@whichfalse) {
- $result.=''.$Apache::response::foilgroup{$temp.'.text'}."
\n";
+ splice(@whichfalse,$answer,0,$truelist[$whichtrue]);
+ my $temp=0;
+ &Apache::lonxml::debug("the true statement is $answer");
+ foreach $name (@whichfalse) {
+ $result.="
".$Apache::response::foilgroup{$name.'.text'}."\n";
+ $temp++;
}
- return $result;
+ return $result."
";
}
sub start_foil {
- &Apache::lonxml::debug("redirection be $Apache::lonxml::redirection");
$Apache::lonxml::redirection--;
+ return '';
}
sub end_foil {
@@ -93,9 +125,7 @@ sub end_foil {
}
$Apache::lonxml::redirection++;
- &Apache::lonxml::debug("redirection is $Apache::lonxml::redirection");
if ($Apache::lonxml::redirection == 1) {
- &Apache::lonxml::debug("reset $Apache::lonxml::outputstack");
$Apache::lonxml::outputstack='';
}
return '';