--- loncom/homework/imageresponse.pm 2005/06/07 22:43:08 1.70 +++ loncom/homework/imageresponse.pm 2006/05/18 22:02:03 1.77 @@ -2,7 +2,7 @@ # The LearningOnline Network with CAPA # image click response style # -# $Id: imageresponse.pm,v 1.70 2005/06/07 22:43:08 foxr Exp $ +# $Id: imageresponse.pm,v 1.77 2006/05/18 22:02:03 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -63,12 +63,26 @@ sub start_imageresponse { sub end_imageresponse { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; - &Apache::response::end_response; - pop @Apache::lonxml::namespace; + + pop(@Apache::lonxml::namespace); &Apache::lonxml::deregister('Apache::imageresponse',('foilgroup','foil','text','image','rectangle','conceptgroup')); + my $result; - if ($target eq 'edit') { $result=&Apache::edit::end_table(); } + if ($target eq 'edit') { + $result=&Apache::edit::end_table(); + } elsif ($target eq 'tex' + && $Apache::lonhomework::type eq 'exam') { + $result=&Apache::inputtags::exam_score_line($target); + } + undef(%Apache::response::foilnames); + + if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' || + $target eq 'tex' || $target eq 'analyze') { + &Apache::lonxml::increment_counter(&Apache::response::repetition()); + } + &Apache::response::end_response(); + return $result; } @@ -121,7 +135,10 @@ sub prep_image { my ($x,$y)=split(/:/,$Apache::lonhomework::history{"resource.$part.$respid.submission"}); #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()) { + if (defined($x) && $x =~/\S/ + && defined($y) && $y =~/\S/ + && !&Apache::response::show_answer() + && $mode ne 'answeronly') { my $length = 6; my $width = 1; my $extrawidth = 2; @@ -147,7 +164,7 @@ sub prep_image { $x{"cgi.$id.OBJ$i"}=join(':',(($xmin),($ymax),($xmax),($ymin), "FF0000",($width))); } - if ($mode eq 'answer') { + if ($mode eq 'answer' || $mode eq 'answeronly') { my $width = 1; my $extrawidth = 2; my @areas = @{ $Apache::response::foilgroup{"$name.area"} }; @@ -216,6 +233,25 @@ sub displayfoils { return $result; } +sub display_answers { + my ($target,$whichopt)=@_; + + my $result; + foreach my $name (@$whichopt) { + my $image=$Apache::response::foilgroup{"$name.image"}; + &Apache::lonxml::debug("image is $image"); + if ( $target eq 'web' && $image !~ /^http:/ ) { + $image = &clean_up_image($image); + } + my $token=&prep_image($image,'answeronly',$name); + + $result.=&Apache::response::answer_header('imageresponse'); + $result.=&Apache::response::answer_part('imageresponse',"
\n"); + $result.=&Apache::response::answer_footer('imageresponse'); + } + return $result; +} + sub clean_up_image { my ($image)=@_; if ($image =~ /\s*$max) { $count=$max } &Apache::lonxml::debug("Count is $count from $max"); + @whichopt = &whichfoils($max); + if ($target eq 'web' || $target eq 'tex') { $result=&displayfoils($target,@whichopt); } elsif ($target eq 'grade') { @@ -300,7 +348,11 @@ sub end_foilgroup { } elsif ( $target eq 'analyze') { &Apache::response::analyze_store_foilgroup(\@whichopt, ['text','image','area']); + } elsif ($target eq 'answer' + && $env{'form.answer_output_mode'} ne 'tex') { + $result=&display_answers($target,\@whichopt); } + } elsif ($target eq 'edit') { $result=&Apache::edit::end_table(); } @@ -345,10 +397,10 @@ sub start_foil { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result; if ($target eq 'web' || $target eq 'grade' || $target eq 'tex' || - $target eq 'analyze') { + $target eq 'analyze' || $target eq 'answer') { my $name = &Apache::lonxml::get_param('name',$parstack,$safeeval); - if (!$name) { - &Apache::lonxml::error("Foils without names exist. This can cause problems to malfunction."); + if ($name eq "") { + &Apache::lonxml::warning("Foils without names exist. This can cause problems to malfunction."); $name=$Apache::lonxml::curdepth; } if (defined($Apache::response::foilnames{$name})) { @@ -388,10 +440,11 @@ sub end_foil { sub start_text { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result=''; - if ($target eq 'web' || $target eq 'tex' || $target eq 'analyze') { + if ($target eq 'web' || $target eq 'tex' || $target eq 'analyze' + || $target eq 'answer') { &Apache::lonxml::startredirection; } elsif ($target eq 'edit') { - my $descr=&Apache::lonxml::get_all_text('/text',$parser); + my $descr=&Apache::lonxml::get_all_text('/text',$parser,$style); $result=&Apache::edit::tag_start($target,$token,'Task Description'). &Apache::edit::editfield($token->[1],$descr,'Text',60,2). &Apache::edit::end_row(); @@ -404,7 +457,8 @@ sub start_text { sub end_text { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result; - if ($target eq 'web' || $target eq 'tex' || $target eq 'analyze') { + if ($target eq 'web' || $target eq 'tex' || $target eq 'analyze' + || $target eq 'answer') { my $name = $Apache::imageresponse::curname; if ( $Apache::imageresponse::conceptgroup #&& !&Apache::response::showallfoils() @@ -422,10 +476,11 @@ sub end_text { sub start_image { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result=''; - if ($target eq 'web' || $target eq 'tex' || $target eq 'analyze') { + if ($target eq 'web' || $target eq 'tex' || $target eq 'analyze' + || $target eq 'answer') { &Apache::lonxml::startredirection; } elsif ($target eq 'edit') { - my $bgimg=&Apache::lonxml::get_all_text('/image',$parser); + my $bgimg=&Apache::lonxml::get_all_text('/image',$parser,$style); $Apache::edit::bgimgsrc=$bgimg; $Apache::edit::bgimgsrcdepth=$Apache::lonxml::curdepth; @@ -444,7 +499,7 @@ sub end_image { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result; my $name = $Apache::imageresponse::curname; - if ($target eq 'web') { + if ($target eq 'web' || $target eq 'answer') { my $image = &Apache::lonxml::endredirection(); &Apache::lonxml::debug("original image is $image"); if ( $Apache::imageresponse::conceptgroup @@ -499,10 +554,10 @@ sub start_rectangle { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result=''; if ($target eq 'web' || $target eq 'grade' || $target eq 'tex' || - $target eq 'analyze') { + $target eq 'analyze' || $target eq 'answer') { &Apache::lonxml::startredirection; } elsif ($target eq 'edit') { - my $coords=&Apache::lonxml::get_all_text('/rectangle',$parser); + my $coords=&Apache::lonxml::get_all_text('/rectangle',$parser,$style); $result=&Apache::edit::tag_start($target,$token,'Rectangle'). &Apache::edit::editline($token->[1],$coords,'Coordinate Pairs',40). &Apache::edit::entercoord(undef,'textnode',undef,undef,'box'). @@ -531,7 +586,7 @@ sub end_rectangle { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result; if ($target eq 'web' || $target eq 'grade' || $target eq 'tex' || - $target eq 'analyze') { + $target eq 'analyze' || $target eq 'answer') { my $name = $Apache::imageresponse::curname; my $area = &Apache::lonxml::endredirection; $area=~s/\s//g; @@ -553,10 +608,10 @@ sub start_polygon { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result=''; if ($target eq 'web' || $target eq 'grade' || $target eq 'tex' || - $target eq 'analyze') { + $target eq 'analyze' || $target eq 'answer') { &Apache::lonxml::startredirection; } elsif ($target eq 'edit') { - my $coords=&Apache::lonxml::get_all_text('/polygon',$parser); + my $coords=&Apache::lonxml::get_all_text('/polygon',$parser,$style); $result=&Apache::edit::tag_start($target,$token,'Polygon'). &Apache::edit::editline($token->[1],$coords,'Coordinate list',40). &Apache::edit::entercoord(undef,'textnode',undef,undef,'polygon'). @@ -612,7 +667,7 @@ sub end_polygon { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result; if ($target eq 'web' || $target eq 'grade' || $target eq 'tex' || - $target eq 'analyze') { + $target eq 'analyze' || $target eq 'answer') { my $name = $Apache::imageresponse::curname; my $area = &Apache::lonxml::endredirection; $area=~s/\s*//g;