--- loncom/homework/imageresponse.pm 2006/05/18 22:02:03 1.77 +++ loncom/homework/imageresponse.pm 2007/04/18 01:06:22 1.82 @@ -2,7 +2,7 @@ # The LearningOnline Network with CAPA # image click response style # -# $Id: imageresponse.pm,v 1.77 2006/05/18 22:02:03 albertel Exp $ +# $Id: imageresponse.pm,v 1.82 2007/04/18 01:06:22 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -37,6 +37,9 @@ use Apache::londefdef(); use Apache::Constants qw(:common :http); use Apache::lonlocal; use Apache::lonnet; +use lib '/home/httpd/lib/perl/'; +use LONCAPA; + BEGIN { &Apache::lonxml::register('Apache::imageresponse',('imageresponse')); @@ -129,15 +132,24 @@ 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"}); + &draw_image($mode,$image,$x,$y,$Apache::response::foilgroup{"$name.area"}); +} + +sub draw_image { + my ($mode,$image,$x,$y,$areas) = @_; + my $id=&Apache::loncommon::get_cgi_id(); + my (%x,$i); - $x{"cgi.$id.BGIMG"}=&Apache::lonnet::escape($image); - my ($x,$y)=split(/:/,$Apache::lonhomework::history{"resource.$part.$respid.submission"}); + $x{"cgi.$id.BGIMG"}=&escape($image); + #draws 2 xs on the image at the clicked location #one in white and then one in red on top of the one in white + if (defined($x) && $x =~/\S/ && defined($y) && $y =~/\S/ - && !&Apache::response::show_answer() + && ($mode eq 'submission' || !&Apache::response::show_answer()) && $mode ne 'answeronly') { my $length = 6; my $width = 1; @@ -167,8 +179,7 @@ sub prep_image { if ($mode eq 'answer' || $mode eq 'answeronly') { my $width = 1; my $extrawidth = 2; - my @areas = @{ $Apache::response::foilgroup{"$name.area"} }; - foreach my $area (@areas) { + foreach my $area (@{ $areas }) { if ($area=~/^rectangle:/) { $x{"cgi.$id.OBJTYPE"}.='RECTANGLE:'; $i=$x{"cgi.$id.OBJCOUNT"}++; @@ -200,6 +211,7 @@ sub displayfoils { my $result =''; my $name; my $temp=1; + my @images; foreach $name (@whichopt) { $result.=$Apache::response::foilgroup{"$name.text"}; &Apache::lonxml::debug("Text is $result"); @@ -208,7 +220,8 @@ sub displayfoils { &Apache::lonxml::debug("image is $image"); if ( $target eq 'web' && $image !~ /^http:/ ) { $image=&clean_up_image($image); - } + } + push(@images,$image); &Apache::lonxml::debug("image is $image"); if ( &Apache::response::show_answer() ) { if ($target eq 'tex') { @@ -230,9 +243,24 @@ sub displayfoils { } $temp++; } + if ($target eq 'web') { + &Apache::response::setup_prior_tries_hash(\&format_prior_response, + [\@images]); + } 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 ""; + +} + sub display_answers { my ($target,$whichopt)=@_; @@ -343,6 +371,7 @@ sub end_foilgroup { if ($target eq 'web' || $target eq 'tex') { $result=&displayfoils($target,@whichopt); + $Apache::lonxml::post_evaluate=0; } elsif ($target eq 'grade') { if ( defined $env{'form.submitted'}) { &gradefoils(@whichopt); } } elsif ( $target eq 'analyze') {