Diff for /loncom/homework/imageresponse.pm between versions 1.19 and 1.24

version 1.19, 2002/07/23 14:41:06 version 1.24, 2003/02/25 16:09:01
Line 30 Line 30
   
 package Apache::imageresponse;  package Apache::imageresponse;
 use strict;  use strict;
   use Image::Magick;
   
 BEGIN {  BEGIN {
   &Apache::lonxml::register('Apache::imageresponse',('imageresponse'));    &Apache::lonxml::register('Apache::imageresponse',('imageresponse'));
Line 55  sub end_imageresponse { Line 56  sub end_imageresponse {
   return '';    return '';
 }  }
   
 %Apache::response::foilgroup={};  %Apache::response::foilgroup=();
 sub start_foilgroup {  sub start_foilgroup {
   %Apache::response::foilgroup={};    %Apache::response::foilgroup=();
   $Apache::imageresponse::conceptgroup=0;    $Apache::imageresponse::conceptgroup=0;
   &Apache::response::setrandomnumber();    &Apache::response::setrandomnumber();
   return '';    return '';
Line 84  sub whichfoils { Line 85  sub whichfoils {
     if (&Apache::response::showallfoils()) {      if (&Apache::response::showallfoils()) {
       $aopt=0;        $aopt=0;
     } else {      } else {
       $aopt=int(rand($#names+1));        $aopt=int(&Math::Random::random_uniform() * ($#names+1));
     }      }
     &Apache::lonxml::debug("From $#names elms, picking $aopt");      &Apache::lonxml::debug("From $#names elms, picking $aopt");
     $aopt=splice(@names,$aopt,1);      $aopt=splice(@names,$aopt,1);
Line 95  sub whichfoils { Line 96  sub whichfoils {
 }  }
   
 sub displayfoils {  sub displayfoils {
   my (@whichopt) = @_;    my ($target,@whichopt) = @_;
   my $result ='';    my $result ='';
   my $name;    my $name;
   my $temp=1;    my $temp=1;
   foreach $name (@whichopt) {    foreach $name (@whichopt) {
     $result.=$Apache::response::foilgroup{"$name.text"}."<br />\n";      $result.=$Apache::response::foilgroup{"$name.text"};
       if ($target eq 'tex') {$result.="\\vskip 0 mm \n";} else {$result.="<br />\n";}
     my $image=$Apache::response::foilgroup{"$name.image"};      my $image=$Apache::response::foilgroup{"$name.image"};
     if ($Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"} =~ /^correct/ ) {      if ($Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"} =~ /^correct/ ) {
       $result.="<img src=\"$image\"/> <br />\n";        if ($target eq 'tex') {
    $result.=$Apache::response::foilgroup{"$name.image"}."\\vskip 0 mm \n";
         } else {
           $result.="<img src=\"$image\"/> <br />\n";
         }
     } else {      } else {
       $result.="<input type=\"image\" name=\"HWVAL_$Apache::inputtags::response['-1']:$temp\" src=\"$image\"/> <br />\n";        if ($target eq 'tex') {
    $result.=$Apache::response::foilgroup{"$name.image"}."\\vskip 0 mm \n";
         } else {
           $result.="<input type=\"image\" name=\"HWVAL_$Apache::inputtags::response['-1']:$temp\" src=\"$image\"/> <br />\n";
         }
     }      }
     $temp++;      $temp++;
   }    }
Line 114  sub displayfoils { Line 124  sub displayfoils {
   
 sub gradefoils {  sub gradefoils {
   my (@whichopt) = @_;    my (@whichopt) = @_;
   my $result='';  
   my $x;    my $x;
   my $y;    my $y;
   my $result;    my $result;
Line 155  sub end_foilgroup { Line 164  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') {    if ($target eq 'web' || $target eq 'grade' || $target eq 'tex') {
     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') {    if ($target eq 'web' || $target eq 'tex') {
     $result=&displayfoils(@whichopt);      $result=&displayfoils($target,@whichopt);
   }    }
   if ($target eq 'grade') {    if ($target eq 'grade') {
     if ( defined $ENV{'form.submitted'}) {      if ( defined $ENV{'form.submitted'}) {
Line 174  sub end_foilgroup { Line 183  sub end_foilgroup {
   
 sub start_conceptgroup {  sub start_conceptgroup {
   $Apache::imageresponse::conceptgroup=1;    $Apache::imageresponse::conceptgroup=1;
   %Apache::response::conceptgroup={};    %Apache::response::conceptgroup=();
   return '';    return '';
 }  }
   
 sub end_conceptgroup {  sub end_conceptgroup {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   $Apache::imageresponse::conceptgroup=0;      $Apache::imageresponse::conceptgroup=0;  
   if ($target eq 'web' || $target eq 'grade') {    if ($target eq 'web' || $target eq 'grade' || $target eq 'tex') {
     if (defined(@{ $Apache::response::conceptgroup{'names'} })) {      if (defined(@{ $Apache::response::conceptgroup{'names'} })) {
       my @names = @{ $Apache::response::conceptgroup{'names'} };        my @names = @{ $Apache::response::conceptgroup{'names'} };
       my $pick=int(rand($#names+1));        my $pick=int(&Math::Random::random_uniform() * ($#names+1));
       my $name=$names[$pick];        my $name=$names[$pick];
       if (defined(@{ $Apache::response::conceptgroup{"$name.area"} })) {        if (defined(@{ $Apache::response::conceptgroup{"$name.area"} })) {
  push @{ $Apache::response::foilgroup{'names'} }, $name;   push @{ $Apache::response::foilgroup{'names'} }, $name;
Line 203  sub end_conceptgroup { Line 212  sub end_conceptgroup {
 $Apache::imageresponse::curname='';  $Apache::imageresponse::curname='';
 sub start_foil {  sub start_foil {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   if ($target eq 'web' || $target eq 'grade') {    if ($target eq 'web' || $target eq 'grade' || $target eq 'tex') {
     my $name = &Apache::lonxml::get_param('name',$parstack,$safeeval);      my $name = &Apache::lonxml::get_param('name',$parstack,$safeeval);
     if ($name eq '') { $name=$Apache::lonxml::curdepth; }      if ($name eq '') { $name=$Apache::lonxml::curdepth; }
     if ( $Apache::imageresponse::conceptgroup      if ( $Apache::imageresponse::conceptgroup
Line 224  sub end_foil { Line 233  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)=@_;
   if ($target eq 'web') { &Apache::lonxml::startredirection; }    if ($target eq 'web' || $target eq 'tex') { &Apache::lonxml::startredirection; }
   return '';    return '';
 }  }
   
 sub end_text {  sub end_text {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   if ($target eq 'web') {    if ($target eq 'web' || $target eq 'tex') {
     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 250  sub start_image { Line 259  sub start_image {
   
 sub end_image {  sub end_image {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;                my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;            
   my $currentstring = '';    my $name = $Apache::imageresponse::curname;
   if ($target eq 'web') {    if ($target eq 'web') {
     my $name = $Apache::imageresponse::curname;  
     my $image = &Apache::lonxml::endredirection;      my $image = &Apache::lonxml::endredirection;
     &Apache::lonxml::debug("out is $image");      &Apache::lonxml::debug("out is $image");
     if ( $Apache::imageresponse::conceptgroup      if ( $Apache::imageresponse::conceptgroup
Line 324  sub end_image { Line 332  sub end_image {
     #where can we find the picture?      #where can we find the picture?
     if (-e $newsrc) {      if (-e $newsrc) {
  if ($path) {   if ($path) {
     $currentstring .= '\vskip 0 mm \noindent\graphicspath{{'.$path.'}}\fbox{\includegraphics[width='.$width_param.' mm]{'.$file.'}} ';    $Apache::response::foilgroup{"$name.image"} ='\vskip 0 mm \noindent\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
  }   }
     } else {      } else {
  my $temp_file;   my $temp_file;
  my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.dat";   my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.dat";
  $temp_file = Apache::File->new('>>'.$filename);    $temp_file = Apache::File->new('>>'.$filename); 
  print $temp_file "$src\n";   print $temp_file "$src\n";
  $currentstring .= '\vskip 0 mm \graphicspath{{/home/httpd/prtspool/}}\fbox{\includegraphics[width='.$width_param.' mm]{'.$file.'}} ';  $Apache::response::foilgroup{"$name.image"} ='\vskip 0 mm \graphicspath{{/home/httpd/prtspool/}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
     }      }
  }     } 
   return $currentstring;    return '';
 }  }
   
 sub start_rectangle {  sub start_rectangle {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   if ($target eq 'web' || $target eq 'grade') { &Apache::lonxml::startredirection; }    if ($target eq 'web' || $target eq 'grade' || $target eq 'tex') { &Apache::lonxml::startredirection; }
   return '';    return '';
 }  }
   
Line 362  sub grade_rectangle { Line 370  sub grade_rectangle {
   
 sub end_rectangle {  sub end_rectangle {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   if ($target eq 'web' || $target eq 'grade') {    if ($target eq 'web' || $target eq 'grade' || $target eq 'tex') {
     my $name = $Apache::imageresponse::curname;      my $name = $Apache::imageresponse::curname;
     my $area = &Apache::lonxml::endredirection;      my $area = &Apache::lonxml::endredirection;
     &Apache::lonxml::debug("out is $area for $name");      &Apache::lonxml::debug("out is $area for $name");

Removed from v.1.19  
changed lines
  Added in v.1.24


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