Diff for /loncom/homework/imageresponse.pm between versions 1.67 and 1.77

version 1.67, 2005/04/22 14:03:56 version 1.77, 2006/05/18 22:02:03
Line 63  sub start_imageresponse { Line 63  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 121  sub prep_image { Line 135  sub prep_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 164  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 233  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 274  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 324  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);
  } elsif ($target eq 'grade') {   } elsif ($target eq 'grade') {
Line 300  sub end_foilgroup { Line 348  sub end_foilgroup {
  } 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 397  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 440  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 457  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 476  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 499  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 467  sub end_image { Line 522  sub end_image {
  $result=&Apache::edit::end_table();   $result=&Apache::edit::end_table();
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  my $src = &Apache::lonxml::endredirection();   my $src = &Apache::lonxml::endredirection();
  my ($path,$file) = &Apache::londefdef::get_eps_image($src);  
  my ($height_param,$width_param)=   #  There may be all sorts of whitespace on fore and aft:
     &Apache::londefdef::image_size($src,0.3,$parstack,$safeeval);  
  $Apache::response::foilgroup{"$name.image"} ='\vskip 0 mm \noindent\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';   $src =~ s/\s+$//s;
    $src =~ s/^\s+//s;
   
    #
    #  Gnuplot e.g. just generates the latex to put inplace.
    #
    my $graphinclude;
    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 =~ s/^$commentline//;
    } else {
       my ($path,$file) = &Apache::londefdef::get_eps_image($src);
       my ($height_param,$width_param)=
    &Apache::londefdef::image_size($src,0.3,$parstack,$safeeval);
       $graphinclude = '\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'}';
    }
    $Apache::response::foilgroup{"$name.image"} ='\vskip 0 mm \noindent '.$graphinclude;
     }       } 
     return $result;      return $result;
 }  }
Line 479  sub start_rectangle { Line 554  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 511  sub end_rectangle { Line 586  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 533  sub start_polygon { Line 608  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 592  sub end_polygon { Line 667  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;

Removed from v.1.67  
changed lines
  Added in v.1.77


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>