Diff for /loncom/homework/imageresponse.pm between versions 1.95 and 1.101

version 1.95, 2008/11/12 20:01:21 version 1.101, 2011/06/07 17:27:37
Line 41  Coordinates the response to clicking an Line 41  Coordinates the response to clicking an
 This is part of the LearningOnline Network with CAPA project  This is part of the LearningOnline Network with CAPA project
 described at http://www.lon-capa.org.  described at http://www.lon-capa.org.
   
 =head1 HANDLER SUBROUTINE  =head1 SUBROUTINES
   
   
   
 =head1 OTHER SUBROUTINES  
   
 =over  =over
   
 =item *  =item start_imageresponse()
   
 start_imageresponse()  
   
 =item *  
   
 end_imageresponse()  
   
 =item *  
   
 start_foilgroup()  
   
 =item *  
   
 getfoilcounts()  
   
 =item *  
   
 whichfoils()  
   
 =item *  
   
 prep_image()  
   
 =item *  
   
 draw_image()  
   
 =item *  
   
 displayfoils()  
   
 =item *  
   
 format_prior_response()  
   
 =item *  
   
 display_answers()  
   
 =item *  
   
 clean_up_image()  =item end_imageresponse()
   
 =item *  =item start_foilgroup()
   
 gradefoils()  =item getfoilcounts()
   
 =item *  =item whichfoils()
   
 stringify_submission()  =item prep_image()
   
 =item *  =item draw_image()
   
 get_submission()  =item displayfoils()
   
 =item *  =item format_prior_response()
   
 end_foilgroup()  =item display_answers()
   
 =item *  =item clean_up_image()
   
 start_conceptgroup()  =item gradefoils()
   
 =item *  =item stringify_submission()
   
 end_conceptgroup()  =item get_submission()
   
 =item *  =item end_foilgroup()
   
 insert_foil()  =item start_conceptgroup()
   
 =item *  =item end_conceptgroup()
   
 start_foil()  =item insert_foil()
   
 =item *  =item start_foil()
   
 end_foil()  =item end_foil()
   
 =item *  =item start_text()
   
 start_text()  =item end_text()
   
 =item *  =item start_image()
   
 end_text()  =item end_image()
   
 =item *  =item start_rectangle()
   
 start_image()  =item grade_rectangle()
   
   =item end_rectangle()
   
 =item *  =item start_polygon()
   
 end_image()  =item grade_polygon()
   
 =item *  =item end_polygon()
   
 start_rectangle()  
   
 =item *  
   
 grade_rectangle()  
   
 =item *  
   
 end_rectangle()  
   
 =item *  
   
 start_polygon()  
   
 =item *  
   
 grade_polygon()  
   
 =item *  
   
 end_polygon()  
   
 =back  =back
   
Line 252  sub end_imageresponse { Line 187  sub end_imageresponse {
   
     }      }
     &Apache::response::end_response();      &Apache::response::end_response();
   
     return $result;      return $result;
 }  }
   
 %Apache::response::foilgroup=();  %Apache::response::foilgroup=();
 sub start_foilgroup {  sub start_foilgroup {
       my ($target) = @_;
     %Apache::response::foilgroup=();      %Apache::response::foilgroup=();
     $Apache::imageresponse::conceptgroup=0;      $Apache::imageresponse::conceptgroup=0;
     &Apache::response::pushrandomnumber();      &Apache::response::pushrandomnumber(undef,$target);
     return '';      return '';
 }  }
   
Line 385  sub displayfoils { Line 320  sub displayfoils {
  my $image=$Apache::response::foilgroup{"$name.image"};   my $image=$Apache::response::foilgroup{"$name.image"};
  &Apache::lonxml::debug("image is $image");   &Apache::lonxml::debug("image is $image");
  if ( ($target eq 'web' || $target eq 'answer')    if ( ($target eq 'web' || $target eq 'answer') 
      && $image !~ /^http:/ ) {       && $image !~ /^https?\:/ ) {
     $image=&clean_up_image($image);      $image=&clean_up_image($image);
  }   }
  push(@images,$image);   push(@images,$image);
Line 418  sub displayfoils { Line 353  sub displayfoils {
  $temp++;   $temp++;
     }      }
     if ($target eq 'web') {      if ($target eq 'web') {
  &Apache::response::setup_prior_tries_hash(\&format_prior_response,          &get_prior_options(\@images,\@whichopt);
   [\@images,\@whichopt]);  
     }      }
     return $result;      return $result;
 }  }
   
   sub get_prior_options {
       my ($currimages,$curropt) = @_;
       return unless((ref($curropt) eq 'ARRAY') && 
                     (ref($currimages) eq 'ARRAY'));
       my $part = $Apache::inputtags::part;
       my $respid   = $Apache::inputtags::response[-1];
       foreach my $i (1..$Apache::lonhomework::history{'version'}) {
           my $partprefix = "$i:resource.$part";
           my $sub_key = "$partprefix.$respid.submission";
           next if (!exists($Apache::lonhomework::history{$sub_key}));
           my $type_key = "$partprefix.type";
           my @whichopt = ();
           my @images = ();
           if ($Apache::lonhomework::history{$type_key} eq 'randomizetry') {
               my $order_key = "$partprefix.$respid.foilorder";
               @whichopt = &Apache::lonnet::str2array($Apache::lonhomework::history{$order_key});
               if (@whichopt > 0) {
                   foreach my $name (@whichopt) {
                       my $image=$Apache::response::foilgroup{"$name.image"};
                       if ($image !~ /^https?\:/ ) {
                           $image=&clean_up_image($image);
                       }
                       push(@images,$image);
                   }
               }
           } else {
               @whichopt = @{$curropt};
               @images = @{$currimages};
           }
           my $submission = $Apache::lonhomework::history{$sub_key};
           my $output =  &format_prior_response('grade',$submission,
                                                [\@images,\@whichopt]);
           if (defined($output)) {
               $Apache::inputtags::submission_display{$sub_key} = $output;
           }
       }
   }
   
 sub format_prior_response {  sub format_prior_response {
     my ($mode,$answer,$other_data) = @_;      my ($mode,$answer,$other_data) = @_;
           
Line 451  sub display_answers { Line 423  sub display_answers {
  my $image=$Apache::response::foilgroup{"$name.image"};   my $image=$Apache::response::foilgroup{"$name.image"};
  &Apache::lonxml::debug("image is $image");   &Apache::lonxml::debug("image is $image");
  if ( ($target eq 'web' || $target eq 'answer')   if ( ($target eq 'web' || $target eq 'answer')
      && $image !~ /^http:/ ) {       && $image !~ /^https?\:/ ) {
     $image = &clean_up_image($image);      $image = &clean_up_image($image);
  }    } 
  my $token=&prep_image($image,'answeronly',$name);   my $token=&prep_image($image,'answeronly',$name);
Line 466  sub clean_up_image { Line 438  sub clean_up_image {
     my ($image)=@_;      my ($image)=@_;
     if ($image =~ /\s*<img\s*/) {      if ($image =~ /\s*<img\s*/) {
  ($image) = ($image =~ /src\s*=\s*[\"\']([^\"\']+)[\"\']/i);   ($image) = ($image =~ /src\s*=\s*[\"\']([^\"\']+)[\"\']/i);
  if ($image !~ /^http:/) {   if ($image !~ /^https?\:/) {
     $image=&Apache::lonnet::hreflocation('',$image);      $image=&Apache::lonnet::hreflocation('',$image);
  }   }
  if (!$image) {   if (!$image) {
Line 525  sub gradefoils { Line 497  sub gradefoils {
  }   }
  $temp++;   $temp++;
     }      }
       if ($Apache::lonhomework::type eq 'randomizetry') {
           $Apache::lonhomework::results{"resource.$partid.$id.foilorder"} = &Apache::lonnet::array2str(@whichopt);
       }
     my ($result) = &Apache::inputtags::finalizeawards(\@results,[]);      my ($result) = &Apache::inputtags::finalizeawards(\@results,[]);
     &Apache::lonxml::debug("Question is $result");      &Apache::lonxml::debug("Question is $result");
   
Line 532  sub gradefoils { Line 507  sub gradefoils {
     my %previous=      my %previous=
  &Apache::response::check_for_previous(&stringify_submission(\%response),   &Apache::response::check_for_previous(&stringify_submission(\%response),
       $part,$id);        $part,$id);
     if ($result       if ($result) { 
  && $Apache::lonhomework::type eq 'survey') { $result='SUBMITTED'; }   if ($Apache::lonhomework::type eq 'survey') { 
               $result='SUBMITTED';
           } elsif ($Apache::lonhomework::type eq 'surveycred') { 
               $result='SUBMITTED_CREDIT'; 
           } elsif ($Apache::lonhomework::type eq 'anonsurvey') { 
               $result='ANONYMOUS'; 
           } elsif ($Apache::lonhomework::type eq 'anonsurveycred') { 
               $result='ANONYMOUS_CREDIT'; 
           }
       }
   
     &Apache::response::handle_previous(\%previous,$result);      &Apache::response::handle_previous(\%previous,$result);
     $Apache::lonhomework::results{"resource.$part.$id.submission"}=      $Apache::lonhomework::results{"resource.$part.$id.submission"}=
  &stringify_submission(\%response);   &stringify_submission(\%response);
Line 544  sub gradefoils { Line 529  sub gradefoils {
 sub stringify_submission {  sub stringify_submission {
     my ($response) = @_;      my ($response) = @_;
     return &Apache::lonnet::hash2str(%{ $response });      return &Apache::lonnet::hash2str(%{ $response });
   
       
 }  }
   
 sub get_submission {  sub get_submission {
Line 582  sub end_foilgroup { Line 565  sub end_foilgroup {
   
  if ($target eq 'web' || $target eq 'tex') {   if ($target eq 'web' || $target eq 'tex') {
     $result=&displayfoils($target,@whichopt);      $result=&displayfoils($target,@whichopt);
               if ($Apache::lonhomework::type eq 'randomizetry') {
                   if ($target eq 'web') {
                       &get_prior_options($target,@whichopt);
                   }
               }
     $Apache::lonxml::post_evaluate=0;      $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); }
Line 643  sub start_foil { Line 631  sub start_foil {
     &Apache::lonxml::warning(&mt('Foils without names exist. This can cause problems to malfunction.'));      &Apache::lonxml::warning(&mt('Foils without names exist. This can cause problems to malfunction.'));
     $name=$Apache::lonxml::curdepth;      $name=$Apache::lonxml::curdepth;
  }   }
           if ($name eq "0") {
               &Apache::lonxml::error(&mt('Foil name [_1] is not supported. Please choose another name.','<b><tt>'.$name.'</tt></b>'));
           }
  if (defined($Apache::response::foilnames{$name})) {   if (defined($Apache::response::foilnames{$name})) {
     &Apache::lonxml::error(&mt("Foil name [_1] appears more than once. Foil names need to be unique."      &Apache::lonxml::error(&mt("Foil name [_1] appears more than once. Foil names need to be unique."
                                       ,'<b><tt>'.$name.'</tt></b>'));                                        ,'<b><tt>'.$name.'</tt></b>'));
Line 781  sub end_image { Line 772  sub end_image {
     my ($commentline, $restofstuff) = split(/\n/, $src);      my ($commentline, $restofstuff) = split(/\n/, $src);
     $graphinclude = $src;      $graphinclude = $src;
     $graphinclude =~ s/^$commentline//;      $graphinclude =~ s/^$commentline//;
  } else {   } elsif (!($src =~ /\\/)) {
     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)=
  &Apache::londefdef::image_size($src,0.3,$parstack,$safeeval);   &Apache::londefdef::image_size($src,0.3,$parstack,$safeeval);
     $graphinclude = '\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'}';      $graphinclude = '\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'}';
    } else {
       $graphinclude = $src;   # Already fully formed.
  }   }
  $Apache::response::foilgroup{"$name.image"} ='\vskip 0 mm \noindent '.$graphinclude;   $Apache::response::foilgroup{"$name.image"} ='\vskip 0 mm \noindent '.$graphinclude;
     }       } 

Removed from v.1.95  
changed lines
  Added in v.1.101


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