--- 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__