Diff for /loncom/homework/caparesponse/caparesponse.pm between versions 1.158 and 1.165

version 1.158, 2004/12/23 22:53:41 version 1.165, 2005/02/23 23:41:23
Line 128  sub end_numericalresponse { Line 128  sub end_numericalresponse {
     }      }
     my $tag;      my $tag;
     if (scalar(@$tagstack)) { $tag=$$tagstack[-1]; }      if (scalar(@$tagstack)) { $tag=$$tagstack[-1]; }
     if ( $target eq 'grade' && defined($ENV{'form.submitted'})) {      if ( $target eq 'grade' && &Apache::response::submitted() ) {
  &Apache::response::setup_params($tag,$safeeval);   &Apache::response::setup_params($tag,$safeeval);
  $safeeval->share_from('capa',['&caparesponse_capa_check_answer']);   $safeeval->share_from('capa',['&caparesponse_capa_check_answer']);
  my $partid = $Apache::inputtags::part;   my $partid = $Apache::inputtags::part;
Line 136  sub end_numericalresponse { Line 136  sub end_numericalresponse {
  if ($Apache::lonhomework::type eq 'exam' &&    if ($Apache::lonhomework::type eq 'exam' && 
     $tag eq 'formularesponse') {      $tag eq 'formularesponse') {
     $increment=&Apache::response::scored_response($partid,$id);      $increment=&Apache::response::scored_response($partid,$id);
  } elsif ($Apache::lonhomework::type eq 'survey') {  
     if ( !defined($ENV{'form.submitted'})) { return ''; }  
     my $response = &Apache::response::getresponse();  
     if ( $response =~ /[^\s]/) {  
  my %previous=&Apache::response::check_for_previous($response,  
  $partid,$id);  
  $Apache::lonhomework::results{"resource.$partid.$id.submission"}=$response;  
  my $ad=$Apache::lonhomework::results{"resource.$partid.$id.awarddetail"}='SUBMITTED';  
  &Apache::response::handle_previous(\%previous,$ad);  
     }  
  } else {   } else {
     my $response = &Apache::response::getresponse();      my $response = &Apache::response::getresponse();
     if ( $response =~ /[^\s]/) {      if ( $response =~ /[^\s]/) {
Line 154  sub end_numericalresponse { Line 144  sub end_numericalresponse {
  &Apache::lonxml::debug("submitted a $response<br>\n");   &Apache::lonxml::debug("submitted a $response<br>\n");
  &Apache::lonxml::debug($$parstack[-1] . "\n<br>");   &Apache::lonxml::debug($$parstack[-1] . "\n<br>");
   
  if ($ENV{'form.submitted'} eq 'scantron') {   if ( &Apache::response::submitted('scantron')) {
     my $number_of_bubbles = &Apache::lonnet::EXT('resource.'.$partid.'_'.$id.'.numbubbles');      my $number_of_bubbles = &Apache::lonnet::EXT('resource.'.$partid.'_'.$id.'.numbubbles');
     if (!$number_of_bubbles) { $number_of_bubbles=8; }      if (!$number_of_bubbles) { $number_of_bubbles=8; }
     my (@formats)=&Apache::lonxml::get_param_var('format',$parstack,$safeeval);      my (@formats)=&Apache::lonxml::get_param_var('format',$parstack,$safeeval);
     my (@answers)=&Apache::lonxml::get_param_var('answer',$parstack,$safeeval);      my (@answers)=&Apache::lonxml::get_param_var('answer',$parstack,$safeeval);
     my (@incorrect)=&Apache::lonxml::get_param_var('incorrect',$parstack,$safeeval);      my (@incorrect)=&Apache::lonxml::get_param_var('incorrect',$parstack,$safeeval);
       if ($#incorrect eq 0) { @incorrect=(split(/,/,$incorrect[0])); }
     my ($values,$display)=&make_numerical_bubbles($number_of_bubbles,$target,$answers[0],$formats[0],\@incorrect,$safeeval);      my ($values,$display)=&make_numerical_bubbles($number_of_bubbles,$target,$answers[0],$formats[0],\@incorrect,$safeeval);
     $response=$values->[$response];      $response=$values->[$response];
  }   }
Line 184  sub end_numericalresponse { Line 175  sub end_numericalresponse {
  }   }
  #sig fig don't make much sense either   #sig fig don't make much sense either
  if (($Apache::lonhomework::type eq 'exam' ||   if (($Apache::lonhomework::type eq 'exam' ||
      $ENV{'form.submitted'} eq 'scantron') &&       &Apache::response::submitted('scantron')) &&
     $tag eq 'numericalresponse') {      $tag eq 'numericalresponse') {
     delete($$args_ref{'sig'});      delete($$args_ref{'sig'});
  }   }
Line 213  sub end_numericalresponse { Line 204  sub end_numericalresponse {
    $Apache::inputtags::params{'sig'});     $Apache::inputtags::params{'sig'});
  }   }
  &Apache::lonxml::debug("\n<br>result:$result:$Apache::lonxml::curdepth<br>\n");   &Apache::lonxml::debug("\n<br>result:$result:$Apache::lonxml::curdepth<br>\n");
    if ($Apache::lonhomework::type eq 'survey' &&
       ($ad eq 'INCORRECT' || $ad eq 'APPROX_ANS' ||
        $ad eq 'EXACT_ANS')) {
       $ad='SUBMITTED';
    }
  &Apache::response::handle_previous(\%previous,$ad);   &Apache::response::handle_previous(\%previous,$ad);
  $Apache::lonhomework::results{"resource.$partid.$id.awarddetail"}=$ad;   $Apache::lonhomework::results{"resource.$partid.$id.awarddetail"}=$ad;
  $Apache::lonhomework::results{"resource.$partid.$id.awardmsg"}=$msg;   $Apache::lonhomework::results{"resource.$partid.$id.awardmsg"}=$msg;
Line 238  sub end_numericalresponse { Line 234  sub end_numericalresponse {
     my $unit=&Apache::lonxml::get_param_var('unit',$parstack,      my $unit=&Apache::lonxml::get_param_var('unit',$parstack,
     $safeeval);      $safeeval);
     my (@incorrect)=&Apache::lonxml::get_param_var('incorrect',$parstack,$safeeval);      my (@incorrect)=&Apache::lonxml::get_param_var('incorrect',$parstack,$safeeval);
       if ($#incorrect eq 0) { @incorrect=(split(/,/,$incorrect[0])); }
     my ($bubble_values,$bubble_display)=      my ($bubble_values,$bubble_display)=
  &make_numerical_bubbles($number_of_bubbles,   &make_numerical_bubbles($number_of_bubbles,
  $target,$answers[0],   $target,$answers[0],
Line 270  sub end_numericalresponse { Line 267  sub end_numericalresponse {
  }   }
  if ($tag eq 'numericalresponse') {   if ($tag eq 'numericalresponse') {
     my ($celllength,$number_of_tables,@table_range)=      my ($celllength,$number_of_tables,@table_range)=
  &get_table_sizes($number_of_bubbles,$bubble_values);   &get_table_sizes($number_of_bubbles,$bubble_display);
     my $j=0;      my $j=0;
     my $cou=0;      my $cou=0;
     $result.='\vskip -1 mm \noindent \begin{enumerate}\item[\textbf{'.$Apache::lonxml::counter.'}.]';      $result.='\vskip -1 mm \noindent \begin{enumerate}\item[\textbf{'.$Apache::lonxml::counter.'}.]';
Line 281  sub end_numericalresponse { Line 278  sub end_numericalresponse {
  }   }
  $result.='}';   $result.='}';
  for (my $ind=$cou;$ind<$cou+$table_range[$j];$ind++) {   for (my $ind=$cou;$ind<$cou+$table_range[$j];$ind++) {
     $result.='\hskip -4 mm {\small \textbf{'.$alphabet[$ind].'}}$\bigcirc$ & \hskip -3 mm {\small '.$bubble_values->[$ind].'} ';      $result.='\hskip -4 mm {\small \textbf{'.$alphabet[$ind].'}}$\bigcirc$ & \hskip -3 mm {\small '.$bubble_display->[$ind].'} ';
     if ($ind != $cou+$table_range[$j]-1) {$result.=' & ';}      if ($ind != $cou+$table_range[$j]-1) {$result.=' & ';}
  }   }
  $cou += $table_range[$j];   $cou += $table_range[$j];
Line 310  sub end_numericalresponse { Line 307  sub end_numericalresponse {
     push (@{ $Apache::lonhomework::analyze{"parts"} },$part_id);      push (@{ $Apache::lonhomework::analyze{"parts"} },$part_id);
     $Apache::lonhomework::analyze{"$part_id.type"} = $tag;      $Apache::lonhomework::analyze{"$part_id.type"} = $tag;
     my (@incorrect)=&Apache::lonxml::get_param_var('incorrect',$parstack,$safeeval);      my (@incorrect)=&Apache::lonxml::get_param_var('incorrect',$parstack,$safeeval);
       if ($#incorrect eq 0) { @incorrect=(split(/,/,$incorrect[0])); }
     push (@{ $Apache::lonhomework::analyze{"$part_id.incorrect"} }, @incorrect);      push (@{ $Apache::lonhomework::analyze{"$part_id.incorrect"} }, @incorrect);
     &Apache::response::check_if_computed($token,$parstack,      &Apache::response::check_if_computed($token,$parstack,
  $safeeval,'answer');   $safeeval,'answer');
Line 363  sub end_numericalresponse { Line 361  sub end_numericalresponse {
     push (@{ $Apache::lonhomework::analyze{"$part_id.ans_high"} }, $high);      push (@{ $Apache::lonhomework::analyze{"$part_id.ans_high"} }, $high);
     push (@{ $Apache::lonhomework::analyze{"$part_id.ans_low"} }, $low);      push (@{ $Apache::lonhomework::analyze{"$part_id.ans_low"} }, $low);
  }   }
    if ($fmt) {
       push (@{ $Apache::lonhomework::analyze{"$part_id.format"} }, $fmt);
    }
     }      }
  }   }
  if (defined($unit) and ($unit ne '') and   if (defined($unit) and ($unit ne '') and
Line 401  sub get_table_sizes { Line 402  sub get_table_sizes {
     my $cell_width=0;      my $cell_width=0;
     foreach my $member (@$rbubble_values) {      foreach my $member (@$rbubble_values) {
  my $cell_width_real=0;   my $cell_width_real=0;
  if ($member=~/(\+|-)?(\d*)\.?(\d*)\s*\$\\times\s*10\^{(\+|-)?(\d+)}\$/) {   if ($member=~/(\+|-)?(\d*)\.?(\d*)\s*\$?\\times\s*10\^{(\+|-)?(\d+)}\$?/) {
     $cell_width_real=(length($2)+length($3)+length($5)+7)*$scale;      $cell_width_real=(length($2)+length($3)+length($5)+7)*$scale;
  } elsif ($member=~/(\d*)\.?(\d*)(E|e)(\+|-)?(\d*)/) {   } elsif ($member=~/(\d*)\.?(\d*)(E|e)(\+|-)?(\d*)/) {
     $cell_width_real=(length($1)+length($2)+length($5)+9)*$scale;      $cell_width_real=(length($1)+length($2)+length($5)+9)*$scale;
Line 486  sub make_numerical_bubbles { Line 487  sub make_numerical_bubbles {
  }   }
  if (defined($$incorrect[0]) &&   if (defined($$incorrect[0]) &&
     scalar(@$incorrect)+1 < $number_of_bubbles) {      scalar(@$incorrect)+1 < $number_of_bubbles) {
     &Apache::lonxml::warning("Not enough incorrect answers were specified in the incorrect array, ignoring the specified incorrect answers and instead generating them.");      &Apache::lonxml::warning("Not enough incorrect answers were specified in the incorrect array, ignoring the specified incorrect answers and instead generating them (".join(',',@$incorrect).").");
  }   }
     }      }
     my @factors = (1.13,1.17,1.25,1.33,1.45); #default values of factors      my @factors = (1.13,1.17,1.25,1.33,1.45); #default values of factors
Line 609  sub end_stringresponse { Line 610  sub end_stringresponse {
     if (!$Apache::lonxml::default_homework_loaded) {      if (!$Apache::lonxml::default_homework_loaded) {
  &Apache::lonxml::default_homework_load($safeeval);   &Apache::lonxml::default_homework_load($safeeval);
     }      }
     if ( $target eq 'grade' && defined($ENV{'form.submitted'})) {      if ( $target eq 'grade' && &Apache::response::submitted() ) {
  &Apache::response::setup_params('stringresponse',$safeeval);   &Apache::response::setup_params('stringresponse',$safeeval);
  $safeeval->share_from('capa',['&caparesponse_capa_check_answer']);   $safeeval->share_from('capa',['&caparesponse_capa_check_answer']);
  if ($Apache::lonhomework::type eq 'exam' ||   if ($Apache::lonhomework::type eq 'exam' ||
     $ENV{'form.submitted'} eq 'scantron') {      &Apache::response::submitted('scantron')) {
     $increment=&Apache::response::scored_response($part,$id);      $increment=&Apache::response::scored_response($part,$id);
  } elsif ($Apache::lonhomework::type eq 'survey') {  
     if ( !defined($ENV{'form.submitted'})) { return ''; }  
     my $response = &Apache::response::getresponse();  
     if ( $response =~ /[^\s]/) {  
  my %previous=&Apache::response::check_for_previous($response,  
    $part,$id);  
  $Apache::lonhomework::results{"resource.$part.$id.submission"}=  
     $response;  
  my $ad=$Apache::lonhomework::results{"resource.$part.$id.awarddetail"}='SUBMITTED';  
  &Apache::response::handle_previous(\%previous,$ad);  
     }  
  } else {   } else {
     my $response = &Apache::response::getresponse();      my $response = &Apache::response::getresponse();
     if ( $response =~ /[^\s]/) {      if ( $response =~ /[^\s]/) {
Line 668  sub end_stringresponse { Line 658  sub end_stringresponse {
     ($ad,$msg) = &Apache::inputtags::finalizeawards(\@awards,\@msgs);      ($ad,$msg) = &Apache::inputtags::finalizeawards(\@awards,\@msgs);
     &Apache::lonxml::debug("\n<br>result:$result:$Apache::lonxml::curdepth<br>\n");      &Apache::lonxml::debug("\n<br>result:$result:$Apache::lonxml::curdepth<br>\n");
  }   }
    if ($Apache::lonhomework::type eq 'survey' &&
       ($ad eq 'INCORRECT' || $ad eq 'APPROX_ANS' ||
        $ad eq 'EXACT_ANS')) {
       $ad='SUBMITTED';
    }
  &Apache::response::handle_previous(\%previous,$ad);   &Apache::response::handle_previous(\%previous,$ad);
  $Apache::lonhomework::results{"resource.$part.$id.awarddetail"}=$ad;   $Apache::lonhomework::results{"resource.$part.$id.awarddetail"}=$ad;
  $Apache::lonhomework::results{"resource.$part.$id.awardmsg"}=$msg;   $Apache::lonhomework::results{"resource.$part.$id.awardmsg"}=$msg;

Removed from v.1.158  
changed lines
  Added in v.1.165


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