Diff for /loncom/homework/grades.pm between versions 1.478 and 1.480

version 1.478, 2007/11/03 00:18:37 version 1.480, 2007/11/05 11:46:08
Line 42  use Apache::Constants qw(:common); Line 42  use Apache::Constants qw(:common);
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonenc;  use Apache::lonenc;
 use String::Similarity;  use String::Similarity;
   use Data::Dumper;
 use LONCAPA;  use LONCAPA;
   
 use POSIX qw(floor);  use POSIX qw(floor);
Line 5116  sub username_to_idmap { Line 5117  sub username_to_idmap {
   
 sub scantron_fixup_scanline {  sub scantron_fixup_scanline {
     my ($scantron_config,$scan_data,$line,$whichline,$field,$args)=@_;      my ($scantron_config,$scan_data,$line,$whichline,$field,$args)=@_;
       
       
     if ($field eq 'ID') {      if ($field eq 'ID') {
  if (length($args->{'newid'}) > $$scantron_config{'IDlength'}) {   if (length($args->{'newid'}) > $$scantron_config{'IDlength'}) {
     return ($line,1,'New value too large');      return ($line,1,'New value too large');
Line 5147  sub scantron_fixup_scanline { Line 5149  sub scantron_fixup_scanline {
    $$scantron_config{'CODElength'})=$args->{'CODE'};     $$scantron_config{'CODElength'})=$args->{'CODE'};
  }   }
     } elsif ($field eq 'answer') {      } elsif ($field eq 'answer') {
    &scantron_get_maxbubble(); # Need the bubble counter info.
  my $length=$scantron_config->{'Qlength'};   my $length=$scantron_config->{'Qlength'};
  my $off=$scantron_config->{'Qoff'};   my $off=$scantron_config->{'Qoff'};
  my $on=$scantron_config->{'Qon'};   my $on=$scantron_config->{'Qon'};
  my $answer=${off}x$length;   my $answer=${off}x$length;
  if ($args->{'response'} eq 'none') {          my $question_number = $args->{'question'} -1;
     &scan_data($scan_data,          my $first_position  = $first_bubble_line{$question_number};
        "$whichline.no_bubble.".$args->{'question'},'1');   my $bubble_count    = $bubble_lines_per_response{$question_number};
  } else {          my $bubbles_per_line= $$scantron_config{'Qlength'};
     if ($on eq 'letter') {          my $final_answer;
  my @alphabet=('A'..'Z');          if ($$scantron_config{'Qon'} eq 'letter'  ||
  $answer=$alphabet[$args->{'response'}];      $$scantron_config{'Qon'} eq 'number') { 
     } elsif ($on eq 'number') {      $bubbles_per_line = 10;
  $answer=$args->{'response'}+1;   }
  if ($answer == 10) { $answer = '0'; }   if (defined $args->{'response'}) {
       
       if ($args->{'response'} eq 'none') {
    &scan_data($scan_data,
      "$whichline.no_bubble.".$args->{'question'},'1');
     } else {      } else {
  substr($answer,$args->{'response'},1)=$on;   my ($bubble_line, $bubble_number) = split(/:/,$args->{'response'});
    if ($on eq 'letter') {
       my @alphabet=('A'..'Z');
       $answer=$alphabet[$bubble_number];
    } elsif ($on eq 'number') {
       $answer=$args->$bubble_number+1;
       if ($answer == 10) { $answer = '0'; }
    } else {
       substr($answer,$args->{'response'},1)=$on;
    }
    &scan_data($scan_data,
      "$whichline.no_bubble.".$args->{'question'},undef,'1');
    for (my $l = 0; $l < $bubble_count; $l++) {
       if ($l eq $bubble_line) {
    $final_answer .= $answer;
       } else {
    $final_answer .= ' ';
       }
    }
     }      }
     &scan_data($scan_data,      # $where=$length*($args->{'question'}-1)+$scantron_config->{'Qstart'};
        "$whichline.no_bubble.".$args->{'question'},undef,'1');      #substr($line,$where-1,$length)=$answer;
       substr($line, 
      $scantron_config->{'Qstart'}+$first_position-1,
      $bubbles_per_line) = $final_answer;
  }   }
  my $where=$length*($args->{'question'}-1)+$scantron_config->{'Qstart'};  
  substr($line,$where-1,$length)=$answer;  
     }      }
     return $line;      return $line;
 }  }
Line 6546  sub scantron_bubble_selector { Line 6572  sub scantron_bubble_selector {
   
     my $total_lines = $lines*2;      my $total_lines = $lines*2;
     my @alphabet=('A'..'Z');      my @alphabet=('A'..'Z');
   
     $r->print("<table border='1'><tr><td rowspan='".$total_lines."'>$quest</td>");      $r->print("<table border='1'><tr><td rowspan='".$total_lines."'>$quest</td>");
   
     for (my $l = 0; $l < $lines; $l++) {      for (my $l = 0; $l < $lines; $l++) {
Line 6579  sub scantron_bubble_selector { Line 6606  sub scantron_bubble_selector {
  #        multiline questions (different values e.g..).   #        multiline questions (different values e.g..).
   
  for (my $i=0;$i<$max;$i++) {   for (my $i=0;$i<$max;$i++) {
       my $value = "$l:$i"; # Relative bubble line #: Bubble in line.
     $r->print("\n".      $r->print("\n".
       '<td><label><input type="radio" name="scantron_correct_Q_'.        '<td><label><input type="radio" name="scantron_correct_Q_'.
       $quest.'" value="'.$i.'" />'.$alphabet[$i]."</label></td>");        $quest.'" value="'.$value.'" />'.$alphabet[$i]."</label></td>");
  }   }
  $r->print('</tr>');   $r->print('</tr>');
   

Removed from v.1.478  
changed lines
  Added in v.1.480


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