--- loncom/homework/imageresponse.pm 2004/02/24 18:57:43 1.50 +++ loncom/homework/imageresponse.pm 2005/01/31 22:47:43 1.58.2.1 @@ -2,7 +2,7 @@ # The LearningOnline Network with CAPA # image click response style # -# $Id: imageresponse.pm,v 1.50 2004/02/24 18:57:43 albertel Exp $ +# $Id: imageresponse.pm,v 1.58.2.1 2005/01/31 22:47:43 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -31,10 +31,11 @@ package Apache::imageresponse; use strict; -use Image::Magick; -use Apache::randomlylabel; -use Apache::londefdef; +use Image::Magick(); +use Apache::randomlylabel(); +use Apache::londefdef(); use Apache::Constants qw(:common :http); +use Apache::lonlocal; BEGIN { &Apache::lonxml::register('Apache::imageresponse',('imageresponse')); @@ -49,6 +50,7 @@ sub start_imageresponse { 'polygon','conceptgroup')); push (@Apache::lonxml::namespace,'imageresponse'); my $id = &Apache::response::start_response($parstack,$safeeval); + undef(%Apache::response::foilnames); if ($target eq 'meta') { $result=&Apache::response::meta_package_write('imageresponse'); } elsif ($target eq 'analyze') { @@ -65,6 +67,7 @@ sub end_imageresponse { &Apache::lonxml::deregister('Apache::imageresponse',('foilgroup','foil','text','image','rectangle','conceptgroup')); my $result; if ($target eq 'edit') { $result=&Apache::edit::end_table(); } + undef(%Apache::response::foilnames); return $result; } @@ -72,7 +75,7 @@ sub end_imageresponse { sub start_foilgroup { %Apache::response::foilgroup=(); $Apache::imageresponse::conceptgroup=0; - &Apache::response::setrandomnumber(); + &Apache::response::pushrandomnumber(); return ''; } @@ -82,7 +85,7 @@ sub getfoilcounts { my $max = &Apache::lonxml::get_param('max',$parstack,$safeeval,'-2'); # +1 since instructors will count from 1 my $count = $#{ $Apache::response::foilgroup{'names'} }+1; - if (&Apache::response::showallfoils()) { $max=$count; } + #if (&Apache::response::showallfoils()) { $max=$count; } return ($count,$max); } @@ -94,11 +97,11 @@ sub whichfoils { while ((($#whichopt+1) < $max) && ($#names > -1)) { &Apache::lonxml::debug("Have $#whichopt max is $max"); my $aopt; - if (&Apache::response::showallfoils()) { - $aopt=0; - } else { +# if (&Apache::response::showallfoils()) { +# $aopt=0; +# } else { $aopt=int(&Math::Random::random_uniform() * ($#names+1)); - } +# } &Apache::lonxml::debug("From $#names elms, picking $aopt"); $aopt=splice(@names,$aopt,1); &Apache::lonxml::debug("Picked $aopt"); @@ -117,7 +120,7 @@ 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/) { + if (defined($x) && $x=~/\S/ && defined($y) && $y =~/\S/ && !&Apache::response::show_answer()) { my $length = 6; my $width = 1; my $extrawidth = 2; @@ -267,8 +270,15 @@ sub gradefoils { $temp++; } } - $Apache::lonhomework::results{"resource.$Apache::inputtags::part.$id.submission"}="$x:$y"; - $Apache::lonhomework::results{"resource.$Apache::inputtags::part.$id.awarddetail"}=$result; + my $responsestr="$x:$y"; + my $part=$Apache::inputtags::part; + my $id = $Apache::inputtags::response['-1']; + my %previous=&Apache::response::check_for_previous($responsestr,$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.awarddetail"}=$result; return ''; } @@ -293,6 +303,7 @@ sub end_foilgroup { } elsif ($target eq 'edit') { $result=&Apache::edit::end_table(); } + &Apache::response::poprandomnumber(); return $result; } @@ -335,8 +346,13 @@ sub start_foil { $target eq 'analyze') { my $name = &Apache::lonxml::get_param('name',$parstack,$safeeval); if ($name eq '') { $name=$Apache::lonxml::curdepth; } + if (defined($Apache::response::foilnames{$name})) { + &Apache::lonxml::error(&mt("Foil name [_1] appears more than once. Foil names need to be unique.",$name)); + } + $Apache::response::foilnames{$name}++; if ( $Apache::imageresponse::conceptgroup - && !&Apache::response::showallfoils()) { + #&& !&Apache::response::showallfoils() + ) { push(@{ $Apache::response::conceptgroup{'names'} }, $name); } else { push(@{ $Apache::response::foilgroup{'names'} }, $name); @@ -377,7 +393,8 @@ sub end_text { if ($target eq 'web' || $target eq 'tex' || $target eq 'analyze') { my $name = $Apache::imageresponse::curname; if ( $Apache::imageresponse::conceptgroup - && !&Apache::response::showallfoils() ) { + #&& !&Apache::response::showallfoils() + ) { $Apache::response::conceptgroup{"$name.text"} = &Apache::lonxml::endredirection; } else { $Apache::response::foilgroup{"$name.text"} = &Apache::lonxml::endredirection; @@ -417,7 +434,8 @@ sub end_image { my $image = &Apache::lonxml::endredirection; &Apache::lonxml::debug("original image is $image"); if ( $Apache::imageresponse::conceptgroup - && !&Apache::response::showallfoils()) { + #&& !&Apache::response::showallfoils() + ) { $Apache::response::conceptgroup{"$name.image"} = $image; } else { $Apache::response::foilgroup{"$name.image"} = $image; @@ -425,7 +443,8 @@ sub end_image { } elsif ($target eq 'analyze') { my $image = &Apache::lonxml::endredirection; if ( $Apache::imageresponse::conceptgroup - && !&Apache::response::showallfoils()) { + #&& !&Apache::response::showallfoils() + ) { $Apache::response::conceptgroup{"$name.image"} = $image; } else { $Apache::response::foilgroup{"$name.image"} = $image; @@ -492,6 +511,7 @@ sub end_image { } elsif ($width ne '') { $width_param = $width*$scaling; } + $width_param=&Apache::randomlabel::adjust_textwidth($width_param); #where can we find the picture? if (-e $newsrc) { if ($path) { @@ -544,9 +564,11 @@ sub end_rectangle { $target eq 'analyze') { my $name = $Apache::imageresponse::curname; my $area = &Apache::lonxml::endredirection; + $area=~s/\s//g; &Apache::lonxml::debug("out is $area for $name"); if ( $Apache::imageresponse::conceptgroup - && !&Apache::response::showallfoils()) { + #&& !&Apache::response::showallfoils() + ) { push @{ $Apache::response::conceptgroup{"$name.area"} },"rectangle:$area"; } else { push @{ $Apache::response::foilgroup{"$name.area"} },"rectangle:$area"; @@ -626,7 +648,8 @@ sub end_polygon { $area=~s/\s*//g; &Apache::lonxml::debug("out is $area for $name"); if ( $Apache::imageresponse::conceptgroup - && !&Apache::response::showallfoils()) { + #&& !&Apache::response::showallfoils() + ) { push @{ $Apache::response::conceptgroup{"$name.area"} },"polygon:$area"; } else { push @{ $Apache::response::foilgroup{"$name.area"} },"polygon:$area";