Diff for /loncom/homework/grades.pm between versions 1.130.2.1.2.3 and 1.130.2.1.2.4

version 1.130.2.1.2.3, 2003/09/25 08:30:57 version 1.130.2.1.2.4, 2003/09/27 01:59:10
Line 3299  sub scantron_parse_scanline { Line 3299  sub scantron_parse_scanline {
     }      }
     $record{'scantron.ID'}=substr($data,$$scantron_config{'IDstart'}-1,      $record{'scantron.ID'}=substr($data,$$scantron_config{'IDstart'}-1,
   $$scantron_config{'IDlength'});    $$scantron_config{'IDlength'});
     $record{'scantron.paperID'}=      $record{'scantron.PaperID'}=
  substr($data,$$scantron_config{'PaperID'}-1,   substr($data,$$scantron_config{'PaperID'}-1,
        $$scantron_config{'PaperIDlength'});         $$scantron_config{'PaperIDlength'});
     $record{'scantron.FirstName'}=      $record{'scantron.FirstName'}=
Line 3316  sub scantron_parse_scanline { Line 3316  sub scantron_parse_scanline {
  substr($questions,0,$$scantron_config{'Qlength'})='';   substr($questions,0,$$scantron_config{'Qlength'})='';
  if (length($currentquest) < $$scantron_config{'Qlength'}) { next; }   if (length($currentquest) < $$scantron_config{'Qlength'}) { next; }
  my (@array)=split(/$$scantron_config{'Qon'}/,$currentquest);   my (@array)=split(/$$scantron_config{'Qon'}/,$currentquest);
  if (scalar(@array) gt 2) {  
     #FIXME do something intelligent with double bubbles  
     #actually not a concern right now, should be taking care of later  
     Apache->request->print("<br ><b>Wha!!!</b> <pre>".scalar(@array).  
    '-'.$currentquest.'-'.$questnum.'</pre><br />');  
  }  
  if (length($array[0]) eq $$scantron_config{'Qlength'}) {   if (length($array[0]) eq $$scantron_config{'Qlength'}) {
     $record{"scantron.$questnum.answer"}='';      $record{"scantron.$questnum.answer"}='';
  } else {   } else {
     $record{"scantron.$questnum.answer"}=$alphabet[length($array[0])];      $record{"scantron.$questnum.answer"}=$alphabet[length($array[0])];
  }   }
    if (scalar(@array) gt 2) {
       push(@{$record{'scantron.doubleerror'}},$currentquest);
       my @ans=@array;
       my $i=length($ans[0]);shift(@ans);
       while (@ans) {
    $i+=length($ans[0])+1;
    $record{"scantron.$questnum.answer"}.=$alphabet[$i];
       }
    }
     }      }
     $record{'scantron.maxquest'}=$questnum;      $record{'scantron.maxquest'}=$questnum;
     return \%record;      return \%record;
Line 3378  sub scantron_process_corrections { Line 3381  sub scantron_process_corrections {
  my $classlist=&Apache::loncoursedata::get_classlist();   my $classlist=&Apache::loncoursedata::get_classlist();
  my $which=$ENV{'form.scantron_line'};   my $which=$ENV{'form.scantron_line'};
  my $line=&scantron_get_line($scanlines,$which);   my $line=&scantron_get_line($scanlines,$which);
  my $newstudent=$ENV{'form.scantron_username'}.':'.   my ($skip,$err,$errmsg);
     $ENV{'form.scantron_domain'};   if ($ENV{'form.scantron_skip_record'}) {
  my $newid=$classlist->{$newstudent}->[&Apache::loncoursedata::CL_ID];      $skip=1;
  ($line,my $err,my $errmsg)=   } else {
     &scantron_fixup_scanline(\%scantron_config,$line,'ID',$newid);      my $newstudent=$ENV{'form.scantron_username'}.':'.
    $ENV{'form.scantron_domain'};
       my $newid=$classlist->{$newstudent}->[&Apache::loncoursedata::CL_ID];
       ($line,$err,$errmsg)=
    &scantron_fixup_scanline(\%scantron_config,$line,'ID',$newid);
    }
  if ($err) {   if ($err) {
     $r->print("Unable to accept last correction, an error occurred :$errmsg:");      $r->print("Unable to accept last correction, an error occurred :$errmsg:");
  } else {   } else {
     &scantron_put_line($scanlines,$which,$line);      &scantron_put_line($scanlines,$which,$line,$skip);
     &scantron_putfile($scanlines);      &scantron_putfile($scanlines);
  }   }
     }      }
Line 3536  sub scantron_validate_ID { Line 3544  sub scantron_validate_ID {
  if (!$line) { next; }   if (!$line) { next; }
  my $scan_record=&scantron_parse_scanline($line,\%scantron_config);   my $scan_record=&scantron_parse_scanline($line,\%scantron_config);
  my $id=$$scan_record{'scantron.ID'};   my $id=$$scan_record{'scantron.ID'};
  $r->print("<p>Checking ID ".$$scan_record{'scantron.ID'}."</p>\n");   $r->print("<p>Checking ID ".$$scan_record{'scantron.ID'}.
     " on paper ID ".$$scan_record{'scantron.PaperID'}."</p>\n");
  my $found;   my $found;
  foreach my $checkid (keys(%idmap)) {   foreach my $checkid (keys(%idmap)) {
     if (lc($checkid) eq lc($id)) {      if (lc($checkid) eq lc($id)) {
  if ($checkid ne $id) {   if ($checkid ne $id) {
     $r->print("<p>Using $checkid for bubbled $id</p>\n");      $r->print("<p>Using $checkid for encoded $id</p>\n");
  }   }
  $found=$checkid;last;   $found=$checkid;last;
     }      }
Line 3549  sub scantron_validate_ID { Line 3558  sub scantron_validate_ID {
  if ($found) {   if ($found) {
     if ($found{'ids'}{$found}) {      if ($found{'ids'}{$found}) {
  #FIXME store away line we prviously saw the ID on   #FIXME store away line we prviously saw the ID on
  &scantron_get_ID_correction($r,$i,$scan_record,   &scantron_get_correction($r,$i,$scan_record,$line,
     'duplicateID',$found);   'duplicateID',$found);
  return(1);   return(1);
     } else {      } else {
  $found{'ids'}{$found}++;   $found{'ids'}{$found}++;
     }      }
  } else {   } else {
     &scantron_get_ID_correction($r,$i,$scan_record,'incorrectID');      &scantron_get_correction($r,$i,$scan_record,$line,
        'incorrectID');
     return(1);      return(1);
  }   }
     }      }
Line 3564  sub scantron_validate_ID { Line 3574  sub scantron_validate_ID {
     return (0,$currentphase+1);      return (0,$currentphase+1);
 }  }
   
 sub scantron_get_ID_correction {  sub scantron_get_correction {
     my ($r,$i,$scan_record,$error,$arg)=@_;      my ($r,$i,$scan_record,$line,$error,$arg)=@_;
 #FIXME allow th poosibility of skipping a line, or in the case of a duplicated ID the previous line, probaly need to show both the current line and the previous one.  
     $r->print("<p>need to correct ID</p>\n");  #FIXME in the case of a duplicated ID the previous line, probaly need
   #to show both the current line and the previous one and allow skipping
   #the previous one or the current one
   
       $r->print("<p>This scantron record has an error.");
       if ( defined($$scan_record{'scantron.PaperID'}) ) {
    $r->print("The current PaperID is <tt>".
     $$scan_record{'scantron.PaperID'}."</tt> \n");
       } else {
    $r->print("The current scanline is <pre>".
     $line."</pre> \n");
       }
     $r->print('<input type="hidden" name="scantron_corrections" value="'.$error.'" />'."\n");      $r->print('<input type="hidden" name="scantron_corrections" value="'.$error.'" />'."\n");
     $r->print('<input type="hidden" name="scantron_line" value="'.$i.'" />'."\n");      $r->print('<input type="hidden" name="scantron_line" value="'.$i.'" />'."\n");
     if ($error eq 'unknownID') {      if ($error =~ /ID$/) {
  $r->print("<p> Unknown ID </p>\n");   if ($error eq 'unknownID') {
     } elsif ($error eq 'duplicateID') {      $r->print("The encoded ID is not in the classlist</p>\n");
  $r->print("<p> Duplicated ID </p>\n");   } elsif ($error eq 'duplicateID') {
     }      $r->print("The encoded ID has also been used by a previous paper $arg</p>\n");
     $r->print("<p>Original ID is ".$$scan_record{'scantron.ID'}."</p>\n");   }
     $r->print("<p>Name on paper is ".$$scan_record{'scantron.LastName'}.",".   $r->print("<p>Original ID is <tt>".$$scan_record{'scantron.ID'}.
       $$scan_record{'scantron.FirstName'}."</p>");    "</tt><br />\n");
     $r->print("Corrected User -- ");   $r->print("Name on paper is ".$$scan_record{'scantron.LastName'}.",".
     $r->print("\nusername:<input type='text' name='scantron_username' value='' />");    $$scan_record{'scantron.FirstName'}."</p>");
     $r->print("\ndomain:".   $r->print("<p>Please correct <br /> \n");
       &Apache::loncommon::select_dom_form(undef,'scantron_domain'));   $r->print("\n<ul><li> Pick a specific user -- username:<input type='text' name='scantron_username' value='' />");
     #FIXME it would be nice if this sent back the user ID and   $r->print("\ndomain:".
     #could do partial userID matches   &Apache::loncommon::select_dom_form(undef,'scantron_domain'));
     $r->print(&Apache::loncommon::selectstudent_link('scantronupload',   #FIXME it would be nice if this sent back the user ID and
        'scantron_username','scantron_domain'));   #could do partial userID matches
    $r->print(&Apache::loncommon::selectstudent_link('scantronupload',
         'scantron_username','scantron_domain'));
       } elsif ($error eq 'doublebubble') {
    $r->print("There have been muttiple bubbles scanned for a single question\n");
    foreach my $question (@{$arg}) {
       my $selected=$$scan_record{"scantron.$question.answer"};
       $r->print("<p> For question $question, selected bubbles were".
         join(" ",split('',$selected)).
         " Please pick which one should be used for grading");
       #FIXMENEXT need to have radio buttons to chose which one to use
       
    }
       }
       $r->print("</li> <li>Skip this scanline saving it for later  ");
       $r->print("\n<input type='checkbox' name='scantron_skip_record' /> </li></ul>");
     &scantron_end_validate_form($r);      &scantron_end_validate_form($r);
 }  }
   
   sub scantron_validate_CODE {
       my ($r,$currentphase) = @_;
       #FIXME doesn't do anything yet
       return (0,$currentphase+1);
   }
   
   sub scantron_validate_doublebubble {
       my ($r,$currentphase) = @_;
       #get student info
       my $classlist=&Apache::loncoursedata::get_classlist();
       my %idmap=&username_to_idmap($classlist);
   
       #get scantron line setup
       my %scantron_config=&get_scantron_config($ENV{'form.scantron_format'});
       my $scanlines=&scantron_getfile();
       for (my $i=0;$i<=$scanlines->{'count'};$i++) {
    my $line=&scantron_get_line($scanlines,$i);
    if (!$line) { next; }
    my $scan_record=&scantron_parse_scanline($line,\%scantron_config);
    if (!defined($$scan_record{'scantron.doubleerror'})) { next; }
    &scantron_get_correction($r,$i,$scan_record,$line,'double',
    $$scan_record{'scantron.doubleerror'});
       return (1,$currentphase);
       }
       return (0,$currentphase+1);
   }
   
 sub scantron_end_validate_form {  sub scantron_end_validate_form {
     my ($r) = @_;      my ($r) = @_;
     $r->print('<input type="submit" name="submit" /></form></body></html>');      $r->print('<input type="submit" name="submit" /></form></body></html>');

Removed from v.1.130.2.1.2.3  
changed lines
  Added in v.1.130.2.1.2.4


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