--- loncom/homework/imageresponse.pm 2007/04/18 01:06:22 1.82 +++ loncom/homework/imageresponse.pm 2007/09/25 23:47:59 1.87 @@ -2,7 +2,7 @@ # The LearningOnline Network with CAPA # image click response style # -# $Id: imageresponse.pm,v 1.82 2007/04/18 01:06:22 albertel Exp $ +# $Id: imageresponse.pm,v 1.87 2007/09/25 23:47:59 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -60,6 +60,8 @@ sub start_imageresponse { } elsif ($target eq 'analyze') { my $part_id="$Apache::inputtags::part.$id"; push (@{ $Apache::lonhomework::analyze{"parts"} },$part_id); + push (@{ $Apache::lonhomework::analyze{"$part_id.bubble_lines"} }, + 1); } return $result; } @@ -130,9 +132,9 @@ sub whichfoils { sub prep_image { my ($image,$mode,$name)=@_; - my $part=$Apache::inputtags::part; - my $respid=$Apache::inputtags::response['-1']; - my ($x,$y)=split(/:/,$Apache::lonhomework::history{"resource.$part.$respid.submission"}); + + my ($x,$y)= &get_submission($name); + &Apache::lonxml::debug("for $name drawing click at $x and $y"); &draw_image($mode,$image,$x,$y,$Apache::response::foilgroup{"$name.area"}); } @@ -209,10 +211,9 @@ sub draw_image { sub displayfoils { my ($target,@whichopt) = @_; my $result =''; - my $name; my $temp=1; my @images; - foreach $name (@whichopt) { + foreach my $name (@whichopt) { $result.=$Apache::response::foilgroup{"$name.text"}; &Apache::lonxml::debug("Text is $result"); if ($target eq 'tex') {$result.="\\vskip 0 mm \n";} else {$result.="
\n";} @@ -234,31 +235,46 @@ sub displayfoils { if ($target eq 'tex') { $result.=$Apache::response::foilgroup{"$name.image"}."\\vskip 0 mm \n"; } else { - my $id=$Apache::inputtags::response['-1']; - my $token=&prep_image($image); - my $temp=1; - $result.="
\n"; + my $respid=$Apache::inputtags::response['-1']; + my $token=&prep_image($image,'submission',$name); + my $input_id = "HWVAL_$respid:$temp"; + my $id = $env{'form.request.prefix'}.$input_id; + $result.=''. + '
'. + ''. + ''; } } $temp++; } if ($target eq 'web') { &Apache::response::setup_prior_tries_hash(\&format_prior_response, - [\@images]); + [\@images,\@whichopt]); } return $result; } sub format_prior_response { my ($mode,$answer,$other_data) = @_; - my ($x,$y)=split(/:/,$answer); - my $images = $other_data->[0]; - - my $token = &draw_image('submission',$images->[0],$x,$y); - - return ""; + my $result; + + # make a copy of the data in the refs + my @images = @{ $other_data->[0] }; + my @foils = @{ $other_data->[1] }; + foreach my $name (@foils) { + my $image = pop(@images); + my ($x,$y) = &get_submission($name,$answer); + my $token = &draw_image('submission',$image,$x,$y); + $result .= + '
'; + } + return $result; } sub display_answers { @@ -311,13 +327,12 @@ sub gradefoils { return; } - my $x; - my $y; - my $result; + my @results; my $temp=1; + my %response; foreach my $name (@whichopt) { - $x=$env{"form.HWVAL_$id:$temp.x"}; - $y=$env{"form.HWVAL_$id:$temp.y"}; + my ($x,$y) = split(':',$env{"form.HWVAL_$id:$temp"}); + $response{$name} = $env{"form.HWVAL_$id:$temp"}; &Apache::lonxml::debug("Got a x of $x and a y of $y for $name"); if (defined($x) && defined($y) && defined(@{ $Apache::response::foilgroup{"$name.area"} })) { @@ -338,23 +353,53 @@ sub gradefoils { 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++; + push(@results, $grade) + } else { + push(@results, 'MISSING_ANSWER') } + $temp++; } - my $responsestr="$x:$y"; + my ($result) = &Apache::inputtags::finalizeawards(\@results,[]); + &Apache::lonxml::debug("Question is $result"); + my $part=$Apache::inputtags::part; - my %previous=&Apache::response::check_for_previous($responsestr,$part,$id); + my %previous= + &Apache::response::check_for_previous(&stringify_submission(\%response), + $part,$id); if ($result && $Apache::lonhomework::type eq 'survey') { $result='SUBMITTED'; } &Apache::response::handle_previous(\%previous,$result); - $Apache::lonhomework::results{"resource.$part.$id.submission"}=$responsestr; + $Apache::lonhomework::results{"resource.$part.$id.submission"}= + &stringify_submission(\%response); $Apache::lonhomework::results{"resource.$part.$id.awarddetail"}=$result; return; } +sub stringify_submission { + my ($response) = @_; + return &Apache::lonnet::hash2str(%{ $response }); + + +} + +sub get_submission { + my ($name,$string) = @_; + + if (!defined($string)) { + my $part=$Apache::inputtags::part; + my $respid=$Apache::inputtags::response['-1']; + $string = + $Apache::lonhomework::history{"resource.$part.$respid.submission"}; + } + + if ($string !~ /=/) { + return split(':',$string); + } else { + my %response = &Apache::lonnet::str2hash($string); + return split(':',$response{$name}); + } +} + sub end_foilgroup { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result=''; @@ -505,6 +550,7 @@ sub end_text { sub start_image { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result=''; + my $only = join(',',&Apache::loncommon::filecategorytypes('Pictures')); if ($target eq 'web' || $target eq 'tex' || $target eq 'analyze' || $target eq 'answer') { &Apache::lonxml::startredirection; @@ -515,7 +561,7 @@ sub start_image { $result=&Apache::edit::tag_start($target,$token,'Clickable Image'). &Apache::edit::editline($token->[1],$bgimg,'Image Source File',40); - $result.=&Apache::edit::browse(undef,'textnode').' '; + $result.=&Apache::edit::browse(undef,'textnode',undef,$only).' '; $result.=&Apache::edit::search(undef,'textnode'). &Apache::edit::end_row(); } elsif ($target eq "modified") {