Diff for /loncom/homework/grades.pm between versions 1.479 and 1.483

version 1.479, 2007/11/05 10:19:03 version 1.483, 2007/11/06 11:48:48
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 5150  sub scantron_fixup_scanline { Line 5149  sub scantron_fixup_scanline {
  }   }
     } elsif ($field eq 'answer') {      } elsif ($field eq 'answer') {
  &scantron_get_maxbubble(); # Need the bubble counter info.   &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 $question_number = $args->{'question'} -1;          my $question_number = $args->{'question'} -1;
         my $first_position  = $first_bubble_line{$question_number};          my $first_position  = $first_bubble_line{$question_number};
  my $bubble_count    = $bubble_lines_per_response{$question_number};   my $bubble_count    = $bubble_lines_per_response{$question_number};
         my $bubbles_per_line= $$scantron_config{'Qlength'};          my $bubbles_per_line= $$scantron_config{'Qlength'};
    my $answer=${off}x($bubbles_per_line*$bubble_count);
         my $final_answer;          my $final_answer;
         if ($$scantron_config{'Qon'} eq 'letter'  ||          if ($$scantron_config{'Qon'} eq 'letter'  ||
     $$scantron_config{'Qon'} eq 'number') {       $$scantron_config{'Qon'} eq 'number') { 
Line 5174  sub scantron_fixup_scanline { Line 5173  sub scantron_fixup_scanline {
     my @alphabet=('A'..'Z');      my @alphabet=('A'..'Z');
     $answer=$alphabet[$bubble_number];      $answer=$alphabet[$bubble_number];
  } elsif ($on eq 'number') {   } elsif ($on eq 'number') {
     $answer=$args->$bubble_number+1;      $answer= $bubble_number+1;
     if ($answer == 10) { $answer = '0'; }      if ($answer == 10) { $answer = '0'; }
  } else {   } else {
     substr($answer,$args->{'response'},1)=$on;      substr($answer,$bubble_number+$bubble_line*$bubbles_per_line,1)=$on;
       $final_answer = $answer;
  }   }
  my $before = Dumper($scan_data);  
  &scan_data($scan_data,   &scan_data($scan_data,
    "$whichline.no_bubble.".$args->{'question'},undef,'1');     "$whichline.no_bubble.".$args->{'question'},undef,'1');
  my $after = Dumper($scan_data);  
  for (my $l = 0; $l < $bubble_count; $l++) {   # Positional notation already has the right final answer length..
     if ($l eq $bubble_line) {  
  $final_answer .= $answer;   if (($on eq 'letter') || ($on eq 'number')) {
     } else {      for (my $l = 0; $l < $bubble_count; $l++) {
  $final_answer .= ' ';   if ($l eq $bubble_line) {
       $final_answer .= $answer;
    } else {
       $final_answer .= ' ';
    }
     }      }
  }   }
     }      }
Line 5195  sub scantron_fixup_scanline { Line 5198  sub scantron_fixup_scanline {
     #substr($line,$where-1,$length)=$answer;      #substr($line,$where-1,$length)=$answer;
     substr($line,       substr($line, 
    $scantron_config->{'Qstart'}+$first_position-1,     $scantron_config->{'Qstart'}+$first_position-1,
    $bubbles_per_line) = $final_answer;     $bubbles_per_line*$length) = $final_answer;
  }   }
     }      }
     return $line;      return $line;
Line 5443  sub scantron_parse_scanline { Line 5446  sub scantron_parse_scanline {
  if (!&scan_data($scan_data,"$whichline.no_bubble.$questnum")) {   if (!&scan_data($scan_data,"$whichline.no_bubble.$questnum")) {
     push(@{$record{"scantron.missingerror"}},$questnum);      push(@{$record{"scantron.missingerror"}},$questnum);
  }   }
     } elsif (scalar(@array) lt 2) {  
    #  If the bubble is not the last position, there will be
    # 2 elements.  If it is the last position, there will be 1 element.
   
       } elsif (scalar(@array) le 2) {
   
  my $location      = length($array[0]);   my $location      = length($array[0]);
  my $line_num      = $location / $$scantron_config{'Qlength'};   my $line_num      = int($location / $$scantron_config{'Qlength'});
  my $bubble        = $alphabet[$location % $$scantron_config{'Qlength'}];   my $bubble        = $alphabet[$location % $$scantron_config{'Qlength'}];
   
   
  for (my $ans = 0; $ans < $answers_needed; $ans++) {   for (my $ans = 0; $ans < $answers_needed; $ans++) {
     if ($ans eq $line_num) {      if ($ans eq $line_num) {
Line 6520  ENDSCRIPT Line 6528  ENDSCRIPT
  foreach my $question (@{$arg}) {   foreach my $question (@{$arg}) {
     my $selected  = &get_response_bubbles($scan_record, $question);      my $selected  = &get_response_bubbles($scan_record, $question);
     my @select_array = split(/:/,$selected);      my @select_array = split(/:/,$selected);
     &Apache::lonnet::logthis("Questnum: $question, bubbles: $selected scanline $i");  
     &scantron_bubble_selector($r,$scan_config,$question,      &scantron_bubble_selector($r,$scan_config,$question,
       @select_array);        @select_array);
  }   }
Line 6800  sub scantron_validate_doublebubble { Line 6807  sub scantron_validate_doublebubble {
     my ($scanlines,$scan_data)=&scantron_getfile();      my ($scanlines,$scan_data)=&scantron_getfile();
   
     &scantron_get_maxbubble(); # parse needs the bubble line array.      &scantron_get_maxbubble(); # parse needs the bubble line array.
     &Apache::lonnet::logthis("validate_double_bubble");  
   
     for (my $i=0;$i<=$scanlines->{'count'};$i++) {      for (my $i=0;$i<=$scanlines->{'count'};$i++) {
  my $line=&scantron_get_line($scanlines,$scan_data,$i);   my $line=&scantron_get_line($scanlines,$scan_data,$i);
Line 6808  sub scantron_validate_doublebubble { Line 6814  sub scantron_validate_doublebubble {
  my $scan_record=&scantron_parse_scanline($line,$i,\%scantron_config,   my $scan_record=&scantron_parse_scanline($line,$i,\%scantron_config,
  $scan_data);   $scan_data);
  if (!defined($$scan_record{'scantron.doubleerror'})) { next; }   if (!defined($$scan_record{'scantron.doubleerror'})) { next; }
  &Apache::lonnet::logthis("Double found for line $i : $line");  
  &scantron_get_correction($r,$i,$scan_record,\%scantron_config,$line,   &scantron_get_correction($r,$i,$scan_record,\%scantron_config,$line,
  'doublebubble',   'doublebubble',
  $$scan_record{'scantron.doubleerror'});   $$scan_record{'scantron.doubleerror'});

Removed from v.1.479  
changed lines
  Added in v.1.483


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