Diff for /loncom/homework/caparesponse/caparesponse.pm between versions 1.134 and 1.142

version 1.134, 2004/02/23 20:57:50 version 1.142, 2004/03/13 00:36:11
Line 99  sub end_numericalresponse { Line 99  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' && defined($ENV{'form.submitted'})) {
  &Apache::response::setup_params($tag);   &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;
  my $id = $Apache::inputtags::response['-1'];   my $id = $Apache::inputtags::response['-1'];
Line 133  sub end_numericalresponse { Line 133  sub end_numericalresponse {
  my $hideunit=&Apache::lonnet::EXT('resource.'.$partid.'_'.$id.'.turnoffunit');   my $hideunit=&Apache::lonnet::EXT('resource.'.$partid.'_'.$id.'.turnoffunit');
   
  foreach my $key (keys(%Apache::inputtags::params)) {   foreach my $key (keys(%Apache::inputtags::params)) {
     $expression.= ';my $'. #'      $expression.= ';my $__LC__'. #'
  $key.'="'.$Apache::inputtags::params{$key}.'"';   $key.'="'.$Apache::inputtags::params{$key}.'"';
  }   }
   
  #no way to enter units, with radio buttons   #no way to enter units, with radio buttons
  if ($Apache::lonhomework::type eq 'exam' ||   if ($Apache::lonhomework::type eq 'exam' ||
     lc($hideunit) eq "yes") {      lc($hideunit) eq "yes") {
     $expression.=';my $unit=undef;';      $expression.=';my $__LC__unit=undef;';
  }   }
  #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') &&       $ENV{'form.submitted'} eq 'scantron') &&
     $tag eq 'numericalresponse') {      $tag eq 'numericalresponse') {
     $expression.=';my $sig=undef;';      $expression.=';my $__LC__sig=undef;';
  }   }
   
  if ($tag eq 'formularesponse') {   if ($tag eq 'formularesponse') {
     $expression.=';my $type="fml";';      $expression.=';my $__LC__type="fml";';
  } elsif ($tag eq 'numericalresponse') {   } elsif ($tag eq 'numericalresponse') {
     $expression.=';my $type="float";';      $expression.=';my $__LC__type="float";';
  }   }
  $expression.="');";   $expression.="');";
  my @answer=&Apache::lonxml::get_param_var('answer',$parstack,$safeeval);   my @answer=&Apache::lonxml::get_param_var('answer',$parstack,$safeeval);
  &Apache::lonxml::debug('answer is'.join(':',@answer));   &Apache::lonxml::debug('answer is'.join(':',@answer));
  @{$safeeval->varglob('CAPARESPONSE_CHECK_LIST_answer')}=@answer;   @{$safeeval->varglob('CAPARESPONSE_CHECK_LIST_answer')}=@answer;
   
  $result = &Apache::run::run($expression,$safeeval);   ($result,my @msgs) = &Apache::run::run($expression,$safeeval);
  my ($awards) = split /:/ , $result;   &Apache::lonxml::debug('msgs are'.join(':',@msgs));
  ($ad) = &Apache::inputtags::finalizeawards(split /,/ , $awards);   my ($awards)=split(/:/,$result);
    my (@awards) = split(/,/,$awards);
    ($ad,my $msg) = &Apache::inputtags::finalizeawards(\@awards,\@msgs);
    &Apache::lonxml::debug('ad is'.$ad);
    if ($ad eq 'SIG_FAIL') {
       my ($sig_u,$sig_l)=
    &get_sigrange($Apache::inputtags::params{'sig'});
       $msg=join(':',$msg,$sig_l,$sig_u);
       &Apache::lonxml::debug("sigs bad $sig_u $sig_l ".
      $Apache::inputtags::params{'sig'});
    }
  &Apache::lonxml::debug("$expression");   &Apache::lonxml::debug("$expression");
  &Apache::lonxml::debug("\n<br>result:$result:$Apache::lonxml::curdepth<br>\n");   &Apache::lonxml::debug("\n<br>result:$result:$Apache::lonxml::curdepth<br>\n");
  &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;
  $result='';   $result='';
     }      }
  }   }
Line 298  sub end_numericalresponse { Line 309  sub end_numericalresponse {
     push (@{ $Apache::lonhomework::analyze{"$part_id.incorrect"} }, @incorrect);      push (@{ $Apache::lonhomework::analyze{"$part_id.incorrect"} }, @incorrect);
  }   }
  if (scalar(@$tagstack)) {   if (scalar(@$tagstack)) {
     &Apache::response::setup_params($tag);      &Apache::response::setup_params($tag,$safeeval);
  }   }
  my (@answers)=&Apache::lonxml::get_param_var('answer',$parstack,$safeeval);   my (@answers)=&Apache::lonxml::get_param_var('answer',$parstack,$safeeval);
  my (@formats)=&Apache::lonxml::get_param_var('format',$parstack,$safeeval);   my (@formats)=&Apache::lonxml::get_param_var('format',$parstack,$safeeval);
Line 382  sub get_table_sizes { Line 393  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*)(E|e)(\+|-)?(\d*)/) {   if ($member=~/(\+|-)?(\d*)\.?(\d*)\s*\$\\times\s*10\^{(\+|-)?(\d+)}\$/) {
       $cell_width_real=(length($2)+length($3)+length($5)+7)*$scale;
    } 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;
  } elsif ($member=~/(\d*)\.?(\d*)/) {          } elsif ($member=~/(\d*)\.(\d*)/) {
     $cell_width_real=(length($1)+length($2)+3)*$scale;      $cell_width_real=(length($1)+length($2)+3)*$scale;
  } else {   } else {
     $cell_width_real=(length($member)+1)*$scale;      $cell_width_real=(length($member)+1)*$scale*0.9;
  }   }
  if ($cell_width_real>$cell_width) {$cell_width=$cell_width_real;}   if ($cell_width_real>$cell_width) {$cell_width=$cell_width_real;}
     }      }
Line 401  sub get_table_sizes { Line 414  sub get_table_sizes {
  $textwidth=$1.'.'.$2;   $textwidth=$1.'.'.$2;
     }      }
     my $bubbles_per_line=int($textwidth/$cell_width);      my $bubbles_per_line=int($textwidth/$cell_width);
     if (($bubbles_per_line > $number_of_bubbles/2) && ($number_of_bubbles % 2==2)) {$bubbles_per_line=$number_of_bubbles/2;}      if (($bubbles_per_line > $number_of_bubbles/2) && ($number_of_bubbles % 2==0)) {$bubbles_per_line=$number_of_bubbles/2;}
     my $number_of_tables = int($number_of_bubbles/$bubbles_per_line);      my $number_of_tables = int($number_of_bubbles/$bubbles_per_line);
     my @table_range = ();      my @table_range = ();
     for (my $i=0;$i<$number_of_tables;$i++) {push @table_range,$bubbles_per_line;}      for (my $i=0;$i<$number_of_tables;$i++) {push @table_range,$bubbles_per_line;}
Line 410  sub get_table_sizes { Line 423  sub get_table_sizes {
  push @table_range,($number_of_bubbles % $bubbles_per_line);   push @table_range,($number_of_bubbles % $bubbles_per_line);
     }      }
     $cell_width-=8;      $cell_width-=8;
       $cell_width=$cell_width*3/4;
     return ($cell_width,$number_of_tables,@table_range);      return ($cell_width,$number_of_tables,@table_range);
 }  }
   
Line 579  sub end_stringresponse { Line 593  sub end_stringresponse {
  &Apache::lonxml::default_homework_load($safeeval);   &Apache::lonxml::default_homework_load($safeeval);
     }      }
     if ( $target eq 'grade' && defined($ENV{'form.submitted'})) {      if ( $target eq 'grade' && defined($ENV{'form.submitted'})) {
  &Apache::response::setup_params('stringresponse');   &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') {      $ENV{'form.submitted'} eq 'scantron') {
Line 594  sub end_stringresponse { Line 608  sub end_stringresponse {
   
  $Apache::lonhomework::results{"resource.$part.$id.submission"}=   $Apache::lonhomework::results{"resource.$part.$id.submission"}=
     $response;      $response;
  my $ad;   my ($ad,$msg);
  if ($type eq 're' ) {    if ($type eq 're' ) { 
     # if the RE wasn't in a var it likely got munged,      # if the RE wasn't in a var it likely got munged,
                     # thus grab it from the var directly                      # thus grab it from the var directly
Line 621  sub end_stringresponse { Line 635  sub end_stringresponse {
     $expression.="');";      $expression.="');";
     &Apache::lonxml::debug('answer is'.join(':',$answer));      &Apache::lonxml::debug('answer is'.join(':',$answer));
     @{$safeeval->varglob('CAPARESPONSE_CHECK_LIST_answer')}=($answer);      @{$safeeval->varglob('CAPARESPONSE_CHECK_LIST_answer')}=($answer);
     $result = &Apache::run::run($expression,$safeeval);      ($result, my @msgs) = &Apache::run::run($expression,$safeeval);
     my ($awards) = split /:/ , $result;      &Apache::lonxml::debug('msgs are'.join(':',@msgs));
     ($ad) = &Apache::inputtags::finalizeawards(split /,/ , $awards);      my ($awards)=split(/:/,$result);
       my (@awards) = split(/,/,$awards);
       ($ad,$msg) = &Apache::inputtags::finalizeawards(\@awards,\@msgs);
     &Apache::lonxml::debug("$expression");      &Apache::lonxml::debug("$expression");
     &Apache::lonxml::debug("\n<br>result:$result:$Apache::lonxml::curdepth<br>\n");      &Apache::lonxml::debug("\n<br>result:$result:$Apache::lonxml::curdepth<br>\n");
  }   }
  &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;
     }      }
  }   }
     } elsif ($target eq 'web' || $target eq 'tex') {      } elsif ($target eq 'web' || $target eq 'tex') {
Line 656  sub end_stringresponse { Line 673  sub end_stringresponse {
     push (@{ $Apache::lonhomework::analyze{"parts"} },"$part.$id");      push (@{ $Apache::lonhomework::analyze{"parts"} },"$part.$id");
     $Apache::lonhomework::analyze{"$part.$id.type"} = 'stringresponse';      $Apache::lonhomework::analyze{"$part.$id.type"} = 'stringresponse';
  }   }
  &Apache::response::setup_params('stringresponse');   &Apache::response::setup_params('stringresponse',$safeeval);
  if ($target eq 'answer') {   if ($target eq 'answer') {
     $result.=&Apache::response::answer_header('stringresponse');      $result.=&Apache::response::answer_header('stringresponse');
  }   }

Removed from v.1.134  
changed lines
  Added in v.1.142


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