version 1.69, 2005/05/23 11:02:59
|
version 1.81, 2007/02/22 01:25:31
|
Line 37 use Apache::londefdef();
|
Line 37 use Apache::londefdef();
|
use Apache::Constants qw(:common :http); |
use Apache::Constants qw(:common :http); |
use Apache::lonlocal; |
use Apache::lonlocal; |
use Apache::lonnet; |
use Apache::lonnet; |
|
use lib '/home/httpd/lib/perl/'; |
|
use LONCAPA; |
|
|
|
|
BEGIN { |
BEGIN { |
&Apache::lonxml::register('Apache::imageresponse',('imageresponse')); |
&Apache::lonxml::register('Apache::imageresponse',('imageresponse')); |
Line 63 sub start_imageresponse {
|
Line 66 sub start_imageresponse {
|
|
|
sub end_imageresponse { |
sub end_imageresponse { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
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')); |
&Apache::lonxml::deregister('Apache::imageresponse',('foilgroup','foil','text','image','rectangle','conceptgroup')); |
|
|
my $result; |
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); |
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; |
return $result; |
} |
} |
|
|
Line 117 sub prep_image {
|
Line 134 sub prep_image {
|
my $respid=$Apache::inputtags::response['-1']; |
my $respid=$Apache::inputtags::response['-1']; |
my $id=&Apache::loncommon::get_cgi_id(); |
my $id=&Apache::loncommon::get_cgi_id(); |
my (%x,$i); |
my (%x,$i); |
$x{"cgi.$id.BGIMG"}=&Apache::lonnet::escape($image); |
$x{"cgi.$id.BGIMG"}=&escape($image); |
my ($x,$y)=split(/:/,$Apache::lonhomework::history{"resource.$part.$respid.submission"}); |
my ($x,$y)=split(/:/,$Apache::lonhomework::history{"resource.$part.$respid.submission"}); |
#draws 2 xs on the image at the clicked location |
#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 |
#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 $length = 6; |
my $width = 1; |
my $width = 1; |
my $extrawidth = 2; |
my $extrawidth = 2; |
Line 147 sub prep_image {
|
Line 167 sub prep_image {
|
$x{"cgi.$id.OBJ$i"}=join(':',(($xmin),($ymax),($xmax),($ymin), |
$x{"cgi.$id.OBJ$i"}=join(':',(($xmin),($ymax),($xmax),($ymin), |
"FF0000",($width))); |
"FF0000",($width))); |
} |
} |
if ($mode eq 'answer') { |
if ($mode eq 'answer' || $mode eq 'answeronly') { |
my $width = 1; |
my $width = 1; |
my $extrawidth = 2; |
my $extrawidth = 2; |
my @areas = @{ $Apache::response::foilgroup{"$name.area"} }; |
my @areas = @{ $Apache::response::foilgroup{"$name.area"} }; |
Line 216 sub displayfoils {
|
Line 236 sub displayfoils {
|
return $result; |
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',"<img src=\"/adm/randomlabel.png?token=$token\" /><br />\n"); |
|
$result.=&Apache::response::answer_footer('imageresponse'); |
|
} |
|
return $result; |
|
} |
|
|
sub clean_up_image { |
sub clean_up_image { |
my ($image)=@_; |
my ($image)=@_; |
if ($image =~ /\s*<img\s*/) { |
if ($image =~ /\s*<img\s*/) { |
Line 238 sub clean_up_image {
|
Line 277 sub clean_up_image {
|
|
|
sub gradefoils { |
sub gradefoils { |
my (@whichopt) = @_; |
my (@whichopt) = @_; |
|
|
|
my $partid = $Apache::inputtags::part; |
|
my $id = $Apache::inputtags::response['-1']; |
|
|
|
if ($Apache::lonhomework::type eq 'exam') { |
|
&Apache::response::scored_response($partid,$id); |
|
return; |
|
} |
|
|
my $x; |
my $x; |
my $y; |
my $y; |
my $result; |
my $result; |
my $id=$Apache::inputtags::response['-1']; |
|
my $temp=1; |
my $temp=1; |
foreach my $name (@whichopt) { |
foreach my $name (@whichopt) { |
$x=$env{"form.HWVAL_$id:$temp.x"}; |
$x=$env{"form.HWVAL_$id:$temp.x"}; |
Line 280 sub gradefoils {
|
Line 327 sub gradefoils {
|
&Apache::response::handle_previous(\%previous,$result); |
&Apache::response::handle_previous(\%previous,$result); |
$Apache::lonhomework::results{"resource.$part.$id.submission"}=$responsestr; |
$Apache::lonhomework::results{"resource.$part.$id.submission"}=$responsestr; |
$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}=$result; |
$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}=$result; |
return ''; |
return; |
} |
} |
|
|
sub end_foilgroup { |
sub end_foilgroup { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result=''; |
my $result=''; |
my @whichopt; |
my @whichopt; |
|
|
if ($target eq 'web' || $target eq 'grade' || $target eq 'tex' || |
if ($target eq 'web' || $target eq 'grade' || $target eq 'tex' || |
$target eq 'analyze') { |
$target eq 'analyze' || $target eq 'answer') { |
|
|
my ($count,$max) = &getfoilcounts($parstack,$safeeval); |
my ($count,$max) = &getfoilcounts($parstack,$safeeval); |
if ($count>$max) { $count=$max } |
if ($count>$max) { $count=$max } |
&Apache::lonxml::debug("Count is $count from $max"); |
&Apache::lonxml::debug("Count is $count from $max"); |
|
|
@whichopt = &whichfoils($max); |
@whichopt = &whichfoils($max); |
|
|
if ($target eq 'web' || $target eq 'tex') { |
if ($target eq 'web' || $target eq 'tex') { |
$result=&displayfoils($target,@whichopt); |
$result=&displayfoils($target,@whichopt); |
|
$Apache::lonxml::post_evaluate=0; |
} elsif ($target eq 'grade') { |
} elsif ($target eq 'grade') { |
if ( defined $env{'form.submitted'}) { &gradefoils(@whichopt); } |
if ( defined $env{'form.submitted'}) { &gradefoils(@whichopt); } |
} elsif ( $target eq 'analyze') { |
} elsif ( $target eq 'analyze') { |
&Apache::response::analyze_store_foilgroup(\@whichopt, |
&Apache::response::analyze_store_foilgroup(\@whichopt, |
['text','image','area']); |
['text','image','area']); |
|
} elsif ($target eq 'answer' |
|
&& $env{'form.answer_output_mode'} ne 'tex') { |
|
$result=&display_answers($target,\@whichopt); |
} |
} |
|
|
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result=&Apache::edit::end_table(); |
$result=&Apache::edit::end_table(); |
} |
} |
Line 345 sub start_foil {
|
Line 401 sub start_foil {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result; |
my $result; |
if ($target eq 'web' || $target eq 'grade' || $target eq 'tex' || |
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); |
my $name = &Apache::lonxml::get_param('name',$parstack,$safeeval); |
if (!$name) { |
if ($name eq "") { |
&Apache::lonxml::error("Foils without names exist. This can cause problems to malfunction."); |
&Apache::lonxml::warning("Foils without names exist. This can cause problems to malfunction."); |
$name=$Apache::lonxml::curdepth; |
$name=$Apache::lonxml::curdepth; |
} |
} |
if (defined($Apache::response::foilnames{$name})) { |
if (defined($Apache::response::foilnames{$name})) { |
Line 388 sub end_foil {
|
Line 444 sub end_foil {
|
sub start_text { |
sub start_text { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result=''; |
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; |
&Apache::lonxml::startredirection; |
} elsif ($target eq 'edit') { |
} 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'). |
$result=&Apache::edit::tag_start($target,$token,'Task Description'). |
&Apache::edit::editfield($token->[1],$descr,'Text',60,2). |
&Apache::edit::editfield($token->[1],$descr,'Text',60,2). |
&Apache::edit::end_row(); |
&Apache::edit::end_row(); |
Line 404 sub start_text {
|
Line 461 sub start_text {
|
sub end_text { |
sub end_text { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result; |
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; |
my $name = $Apache::imageresponse::curname; |
if ( $Apache::imageresponse::conceptgroup |
if ( $Apache::imageresponse::conceptgroup |
#&& !&Apache::response::showallfoils() |
#&& !&Apache::response::showallfoils() |
Line 422 sub end_text {
|
Line 480 sub end_text {
|
sub start_image { |
sub start_image { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result=''; |
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; |
&Apache::lonxml::startredirection; |
} elsif ($target eq 'edit') { |
} 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::bgimgsrc=$bgimg; |
$Apache::edit::bgimgsrcdepth=$Apache::lonxml::curdepth; |
$Apache::edit::bgimgsrcdepth=$Apache::lonxml::curdepth; |
|
|
Line 444 sub end_image {
|
Line 503 sub end_image {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result; |
my $result; |
my $name = $Apache::imageresponse::curname; |
my $name = $Apache::imageresponse::curname; |
if ($target eq 'web') { |
if ($target eq 'web' || $target eq 'answer') { |
my $image = &Apache::lonxml::endredirection(); |
my $image = &Apache::lonxml::endredirection(); |
&Apache::lonxml::debug("original image is $image"); |
&Apache::lonxml::debug("original image is $image"); |
if ( $Apache::imageresponse::conceptgroup |
if ( $Apache::imageresponse::conceptgroup |
Line 477 sub end_image {
|
Line 536 sub end_image {
|
# Gnuplot e.g. just generates the latex to put inplace. |
# Gnuplot e.g. just generates the latex to put inplace. |
# |
# |
my $graphinclude; |
my $graphinclude; |
if ($src =~ /^\\graphicspath/) { |
if ($src =~ /^%DYNAMICIMAGE/) { |
|
# This is needed because the newline is not always passed -> tex. |
|
# At present we don't care about the sizing info. |
|
|
|
my ($commentline, $restofstuff) = split(/\n/, $src); |
$graphinclude = $src; |
$graphinclude = $src; |
|
$graphinclude =~ s/^$commentline//; |
} else { |
} else { |
my ($path,$file) = &Apache::londefdef::get_eps_image($src); |
my ($path,$file) = &Apache::londefdef::get_eps_image($src); |
my ($height_param,$width_param)= |
my ($height_param,$width_param)= |
Line 494 sub start_rectangle {
|
Line 558 sub start_rectangle {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result=''; |
my $result=''; |
if ($target eq 'web' || $target eq 'grade' || $target eq 'tex' || |
if ($target eq 'web' || $target eq 'grade' || $target eq 'tex' || |
$target eq 'analyze') { |
$target eq 'analyze' || $target eq 'answer') { |
&Apache::lonxml::startredirection; |
&Apache::lonxml::startredirection; |
} elsif ($target eq 'edit') { |
} 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'). |
$result=&Apache::edit::tag_start($target,$token,'Rectangle'). |
&Apache::edit::editline($token->[1],$coords,'Coordinate Pairs',40). |
&Apache::edit::editline($token->[1],$coords,'Coordinate Pairs',40). |
&Apache::edit::entercoord(undef,'textnode',undef,undef,'box'). |
&Apache::edit::entercoord(undef,'textnode',undef,undef,'box'). |
Line 526 sub end_rectangle {
|
Line 590 sub end_rectangle {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result; |
my $result; |
if ($target eq 'web' || $target eq 'grade' || $target eq 'tex' || |
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 $name = $Apache::imageresponse::curname; |
my $area = &Apache::lonxml::endredirection; |
my $area = &Apache::lonxml::endredirection; |
$area=~s/\s//g; |
$area=~s/\s//g; |
Line 548 sub start_polygon {
|
Line 612 sub start_polygon {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result=''; |
my $result=''; |
if ($target eq 'web' || $target eq 'grade' || $target eq 'tex' || |
if ($target eq 'web' || $target eq 'grade' || $target eq 'tex' || |
$target eq 'analyze') { |
$target eq 'analyze' || $target eq 'answer') { |
&Apache::lonxml::startredirection; |
&Apache::lonxml::startredirection; |
} elsif ($target eq 'edit') { |
} 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'). |
$result=&Apache::edit::tag_start($target,$token,'Polygon'). |
&Apache::edit::editline($token->[1],$coords,'Coordinate list',40). |
&Apache::edit::editline($token->[1],$coords,'Coordinate list',40). |
&Apache::edit::entercoord(undef,'textnode',undef,undef,'polygon'). |
&Apache::edit::entercoord(undef,'textnode',undef,undef,'polygon'). |
Line 607 sub end_polygon {
|
Line 671 sub end_polygon {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result; |
my $result; |
if ($target eq 'web' || $target eq 'grade' || $target eq 'tex' || |
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 $name = $Apache::imageresponse::curname; |
my $area = &Apache::lonxml::endredirection; |
my $area = &Apache::lonxml::endredirection; |
$area=~s/\s*//g; |
$area=~s/\s*//g; |