--- loncom/homework/imageresponse.pm 2001/06/02 03:59:59 1.8 +++ loncom/homework/imageresponse.pm 2001/06/26 21:40:37 1.9 @@ -44,6 +44,7 @@ sub getfoilcounts { sub whichfoils { my ($max)=@_; + if (!defined(@{ $Apache::response::foilgroup{'names'} })) { return; } my @names = @{ $Apache::response::foilgroup{'names'} }; my @whichopt =(); while ((($#whichopt+1) < $max) && ($#names > -1)) { @@ -87,25 +88,27 @@ sub gradefoils { $x=$ENV{"form.HWVAL_$id:$temp.x"}; $y=$ENV{"form.HWVAL_$id:$temp.y"}; &Apache::lonxml::debug("Got a x of $x and a y of $y for $name"); - my @areas = @{ $Apache::response::foilgroup{"$name.area"} }; - my $grade="INCORRECT"; - foreach my $area (@areas) { - &Apache::lonxml::debug("Area is $area for $name"); - $area =~ m/([a-z]*):/; - &Apache::lonxml::debug("Area of type $1"); - if ($1 eq 'rectangle') { - $grade=&grade_rectangle($area,$x,$y); - } else { - &Apache::lonxml::error("Unknown area style $area"); + if (defined(@{ $Apache::response::foilgroup{"$name.area"} })) { + my @areas = @{ $Apache::response::foilgroup{"$name.area"} }; + my $grade="INCORRECT"; + foreach my $area (@areas) { + &Apache::lonxml::debug("Area is $area for $name"); + $area =~ m/([a-z]*):/; + &Apache::lonxml::debug("Area of type $1"); + if ($1 eq 'rectangle') { + $grade=&grade_rectangle($area,$x,$y); + } else { + &Apache::lonxml::error("Unknown area style $area"); + } + &Apache::lonxml::debug("Area said $grade"); + if ($grade eq 'APPROX_ANS') { last; } } - &Apache::lonxml::debug("Area said $grade"); - if ($grade eq 'APPROX_ANS') { last; } + &Apache::lonxml::debug("Foil was $grade"); + if ($grade eq 'INCORRECT') { $result= 'INCORRECT'; } + if (($grade eq 'APPROX_ANS') && ($result ne 'APPROX_ANS')) { $result=$grade; } + &Apache::lonxml::debug("Question is $result"); + $temp++; } - &Apache::lonxml::debug("Foil was $grade"); - if ($grade eq 'INCORRECT') { $result= 'INCORRECT'; } - if (($grade eq 'APPROX_ANS') && ($result ne 'APPROX_ANS')) { $result=$grade; } - &Apache::lonxml::debug("Question is $result"); - $temp++; } $Apache::lonhomework::results{"resource.$Apache::inputtags::part.$id.submission"}="$x:$y"; $Apache::lonhomework::results{"resource.$Apache::inputtags::part.$id.awarddetail"}=$result; @@ -143,16 +146,20 @@ sub end_conceptgroup { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; $Apache::imageresponse::conceptgroup=0; if ($target eq 'web' || $target eq 'grade') { - my @names = @{ $Apache::response::conceptgroup{'names'} }; - my $pick=int(rand($#names+1)); - my $name=$names[$pick]; - push @{ $Apache::response::foilgroup{'names'} }, $name; - $Apache::response::foilgroup{"$name.text"} = $Apache::response::conceptgroup{"$name.text"}; - $Apache::response::foilgroup{"$name.image"} = $Apache::response::conceptgroup{"$name.image"}; - push(@{ $Apache::response::foilgroup{"$name.area"} }, @{ $Apache::response::conceptgroup{"$name.area"} }); - my $concept = &Apache::lonxml::get_param('concept',$parstack,$safeeval); - $Apache::response::foilgroup{"$name.concept"} = $concept; - &Apache::lonxml::debug("Selecting $name in $concept"); + if (defined(@{ $Apache::response::conceptgroup{'names'} })) { + my @names = @{ $Apache::response::conceptgroup{'names'} }; + my $pick=int(rand($#names+1)); + my $name=$names[$pick]; + if (defined(@{ $Apache::response::conceptgroup{"$name.area"} })) { + push @{ $Apache::response::foilgroup{'names'} }, $name; + $Apache::response::foilgroup{"$name.text"} = $Apache::response::conceptgroup{"$name.text"}; + $Apache::response::foilgroup{"$name.image"} = $Apache::response::conceptgroup{"$name.image"}; + push(@{ $Apache::response::foilgroup{"$name.area"} }, @{ $Apache::response::conceptgroup{"$name.area"} }); + my $concept = &Apache::lonxml::get_param('concept',$parstack,$safeeval); + $Apache::response::foilgroup{"$name.concept"} = $concept; + &Apache::lonxml::debug("Selecting $name in $concept"); + } + } } return ''; }