--- loncom/homework/imageresponse.pm 2001/02/07 00:29:59 1.1
+++ loncom/homework/imageresponse.pm 2001/02/09 03:42:59 1.2
@@ -37,9 +37,61 @@ sub setrandomnumber {
return '';
}
+sub getfoilcounts {
+ my ($parstack,$safeeval)=@_;
+ my $rrargs ='';
+ if ( $#$parstack > 0 ) { $rrargs=$$parstack['-2']; }
+ my $max = &Apache::run::run("{$rrargs;".'return $max}',$safeeval);
+ my $count = $#{ $Apache::response::foilgroup{'names'} };
+ return ($count,$max);
+}
+
+sub whichfoils {
+ my ($max)=@_;
+ my @names = @{ $Apache::response::foilgroup{'names'} };
+ my @whichopt =();
+ while ((($#whichopt+1) < $max) && ($#names > -1)) {
+ my $aopt=int rand $#names;
+ &Apache::lonxml::debug("From $#names elms, picking $aopt");
+ $aopt=splice(@names,$aopt,1);
+ &Apache::lonxml::debug("Picked $aopt");
+ push (@whichopt,$aopt);
+ }
+ return @whichopt;
+}
+
+sub displayfoils {
+ my (@whichopt) = @_;
+ my $result ='';
+ #
+ my $name;
+ my $temp=1;
+ foreach $name (@whichopt) {
+ $result.=$Apache::response::foilgroup{"$name.text"}."
\n";
+ my $image=$Apache::response::foilgroup{"$name.image"};
+ $result.="
\n";
+ $temp++;
+ }
+ return $result;
+}
+
sub end_foilgroup {
my ($target,$token,$parstack,$parser,$safeeval,$style)=@_;
-
+ my $result='';
+ if ($target eq 'web' || $target eq 'grade') {
+ &setrandomnumber();
+ my ($count,$max) = &getfoilcounts($parstack,$safeeval);
+ if ($count>$max) { $count=$max }
+ &Apache::lonxml::debug("Count is $count from $max");
+ my @whichopt = &whichfoils($max);
+ }
+ if ($target eq 'web') {
+ $result=&displayfoils(@whichopt);
+ }
+ if ($target eq 'grade') {
+ &gradefoils(@whichopt);
+ }
+ return $result;
}
sub start_conceptgroup {
@@ -91,19 +143,39 @@ sub end_text {
sub start_image {
my ($target,$token,$parstack,$parser,$safeeval,$style)=@_;
-
+ if ($target eq 'web') { $Apache::lonxml::redirection--; }
+ return '';
}
sub end_image {
my ($target,$token,$parstack,$parser,$safeeval,$style)=@_;
+ if ($target eq 'web') {
+ my $name = $Apache::imageresponse::curname;
+ $Apache::response::foilgroup{"$name.image"} = $Apache::lonxml::outputstack;
+ if ($target eq 'web' ) {
+ $Apache::lonxml::redirection++;
+ if ($Apache::lonxml::redirection == 1) {$Apache::lonxml::outputstack='';}
+ }
+ }
+ return '';
}
sub start_rectangle {
my ($target,$token,$parstack,$parser,$safeeval,$style)=@_;
+ if ($target eq 'web') { $Apache::lonxml::redirection--; }
+ return '';
}
sub end_rectangle {
my ($target,$token,$parstack,$parser,$safeeval,$style)=@_;
+ if ($target eq 'web') {
+ my $name = $Apache::imageresponse::curname;
+ push ${ $Apache::response::foilgroup{"$name.area"}},"rectangle:$Apache::lonxml::outputstack";
+ if ($target eq 'web' ) {
+ $Apache::lonxml::redirection++;
+ if ($Apache::lonxml::redirection == 1) {$Apache::lonxml::outputstack='';}
+ }
+ }
}
1;
__END__