Diff for /loncom/homework/grades.pm between versions 1.185 and 1.186

version 1.185, 2004/03/31 05:23:59 version 1.186, 2004/04/20 06:11:49
Line 3445  sub scantron_scantab { Line 3445  sub scantron_scantab {
     return $result;      return $result;
 }  }
   
   sub scantron_CODElist {
       my $cdom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
       my $cnum = $ENV{'course.'.$ENV{'request.course.id'}.'.num'};
       my @names=&Apache::lonnet::getkeys('CODEs',$cdom,$cnum);
       my $namechoice='<option></option>';
       foreach my $name (@names) {
    $namechoice.='<option value="'.$name.'">'.$name.'</option>';
       }
       $namechoice='<select name="scantron_CODElist">'.$namechoice.'</select>';
       return $namechoice;
   }
   
   sub scantron_CODEunique {
       my $result='<nobr>
                    <input type="radio" name="scantron_CODEunique"
                           value="Yes" checked="on" /> Yes
                   </nobr>
                   <nobr>
                    <input type="radio" name="scantron_CODEunique"
                           value="No" /> No
                   </nobr>';
       return $result;
   }
   
 sub scantron_selectphase {  sub scantron_selectphase {
     my ($r) = @_;      my ($r) = @_;
     my ($symb,$url)=&get_symb_and_url($r);      my ($symb,$url)=&get_symb_and_url($r);
Line 3454  sub scantron_selectphase { Line 3478  sub scantron_selectphase {
     my $grading_menu_button=&show_grading_menu_form($symb,$url);      my $grading_menu_button=&show_grading_menu_form($symb,$url);
     my $file_selector=&scantron_uploads();      my $file_selector=&scantron_uploads();
     my $format_selector=&scantron_scantab();      my $format_selector=&scantron_scantab();
       my $CODE_selector=&scantron_CODElist();
       my $CODE_unique=&scantron_CODEunique();
     my $result;      my $result;
     #FIXME allow instructor to be able to download the scantron file      #FIXME allow instructor to be able to download the scantron file
     # and to upload it,      # and to upload it,
Line 3480  sub scantron_selectphase { Line 3506  sub scantron_selectphase {
             <td> Format of data file: </td><td> $format_selector </td>              <td> Format of data file: </td><td> $format_selector </td>
           </tr>            </tr>
           <tr bgcolor="#ffffe6">            <tr bgcolor="#ffffe6">
               <td> Saved CODEs to validate against: </td><td> $CODE_selector</td>
             </tr>
             <tr bgcolor="#ffffe6">
               <td> Each CODE is only to be used once:</td><td> $CODE_unique </td>
             </tr>
             <tr bgcolor="#ffffe6">
             <td>              <td>
 <!-- FIXME this is lazy, a single parse of the set should let me know what this is -->  <!-- FIXME this is lazy, a single parse of the set should let me know what this is -->
               Last line to expect an answer on: </td><td>                Last line to expect an answer on: </td><td>
Line 3603  sub scantron_fixup_scanline { Line 3635  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 to large');      return ($line,1,'New value too large');
  }   }
  if (length($args->{'newid'}) < $$scantron_config{'IDlength'}) {   if (length($args->{'newid'}) < $$scantron_config{'IDlength'}) {
     $args->{'newid'}=sprintf('%-'.$$scantron_config{'IDlength'}.'s',      $args->{'newid'}=sprintf('%-'.$$scantron_config{'IDlength'}.'s',
Line 3615  sub scantron_fixup_scanline { Line 3647  sub scantron_fixup_scanline {
     &scan_data($scan_data,"$whichline.user",      &scan_data($scan_data,"$whichline.user",
        $args->{'username'}.':'.$args->{'domain'});         $args->{'username'}.':'.$args->{'domain'});
  }   }
       } elsif ($field eq 'CODE') {
    if (length($args->{'CODE'}) > $$scantron_config{'CODElength'}) {
       return ($line,1,'New CODE value too large');
    }
    if (length($args->{'CODE'}) < $$scantron_config{'CODElength'}) {
       $args->{'CODE'}=sprintf('%-'.$$scantron_config{'CODElength'}.'s',
          $args->{'CODE'});
    }
    substr($line,$$scantron_config{'CODEstart'}-1,
          $$scantron_config{'CODElength'})=$args->{'CODE'};
    if ($args->{'CODE'}=~/^\s*$/) {
       &scan_data($scan_data,"$whichline.CODE",$args->{'CODE'});
    }
     } elsif ($field eq 'answer') {      } elsif ($field eq 'answer') {
  my $length=$scantron_config->{'Qlength'};   my $length=$scantron_config->{'Qlength'};
  my $off=$scantron_config->{'Qoff'};   my $off=$scantron_config->{'Qoff'};
Line 3748  sub scantron_process_corrections { Line 3793  sub scantron_process_corrections {
      'ID',{'newid'=>$newid,       'ID',{'newid'=>$newid,
     'username'=>$ENV{'form.scantron_username'},      'username'=>$ENV{'form.scantron_username'},
     'domain'=>$ENV{'form.scantron_domain'}});      'domain'=>$ENV{'form.scantron_domain'}});
       } elsif ($ENV{'form.scantron_corrections'} =~ /^(duplicate|incorrect)CODE$/) {
    my $newCODE=$ENV{'form.scantron_CODE'};
    ($line,$err,$errmsg)=
       &scantron_fixup_scanline(\%scantron_config,$scan_data,$line,$which,
        'CODE',{'CODE'=>$newCODE});
     } elsif ($ENV{'form.scantron_corrections'} =~ /^(missing|double)bubble$/) {      } elsif ($ENV{'form.scantron_corrections'} =~ /^(missing|double)bubble$/) {
  foreach my $question (split(',',$ENV{'form.scantron_questions'})) {   foreach my $question (split(',',$ENV{'form.scantron_questions'})) {
     ($line,$err,$errmsg)=      ($line,$err,$errmsg)=
Line 3941  sub scantron_validate_ID { Line 3991  sub scantron_validate_ID {
  $line,'duplicateID',$username);   $line,'duplicateID',$username);
  return(1);   return(1);
     }      }
     #FIXME store away line we prviously saw the ID on to use above      #FIXME store away line we previously saw the ID on to use above
     $found{'ids'}{$found}++;      $found{'ids'}{$found}++;
     $found{'usernames'}{$username}++;      $found{'usernames'}{$username}++;
  } else {   } else {
Line 3988  sub scantron_get_correction { Line 4038  sub scantron_get_correction {
     $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 =~ /ID$/) {      if ($error =~ /ID$/) {
  if ($error eq 'unknownID') {   if ($error eq 'incorrectID') {
     $r->print("The encoded ID is not in the classlist</p>\n");      $r->print("The encoded ID is not in the classlist</p>\n");
  } elsif ($error eq 'duplicateID') {   } elsif ($error eq 'duplicateID') {
     $r->print("The encoded ID has also been used by a previous paper $arg</p>\n");      $r->print("The encoded ID has also been used by a previous paper $arg</p>\n");
Line 4006  sub scantron_get_correction { Line 4056  sub scantron_get_correction {
        'scantron_username','scantron_domain'));         'scantron_username','scantron_domain'));
  $r->print(": <input type='text' name='scantron_username' value='' />");   $r->print(": <input type='text' name='scantron_username' value='' />");
  $r->print("\n@".   $r->print("\n@".
  &Apache::loncommon::select_dom_form($ENV{'request.role..domain'},'scantron_domain'));   &Apache::loncommon::select_dom_form($ENV{'request.role.domain'},'scantron_domain'));
   
  $r->print('</li>');   $r->print('</li>');
       } elsif ($error =~ /CODE$/) {
    if ($error eq 'incorrectCODE') {
       $r->print("The encoded CODE is not in the list of possible CODEs</p>\n");
    } elsif ($error eq 'duplicateCODE') {
       $r->print("The encoded CODE has also been used by a previous paper $arg, and CODEs were supposed to be unique</p>\n");
    }
    $r->print("<p>The ID on the form is  <tt>".
     $$scan_record{'scantron.ID'}."</tt><br />\n");
    $r->print("The name on the paper is ".
     $$scan_record{'scantron.LastName'}.",".
     $$scan_record{'scantron.FirstName'}."</p>");
    $r->print("<p>How should I handle this? <br /> \n");
    $r->print("\n<ul><li> ");
    $r->print('</li>');
     } elsif ($error eq 'doublebubble') {      } elsif ($error eq 'doublebubble') {
 #FIXME Need to print out who this is along with the paper info  #FIXME Need to print out who this is along with the paper info
  $r->print("<p>There have been multiple bubbles scanned for a some question(s)</p>\n");   $r->print("<p>There have been multiple bubbles scanned for a some question(s)</p>\n");
Line 4060  sub scantron_bubble_selector { Line 4124  sub scantron_bubble_selector {
 sub scantron_validate_CODE {  sub scantron_validate_CODE {
     my ($r,$currentphase) = @_;      my ($r,$currentphase) = @_;
     #FIXME doesn't do anything yet      #FIXME doesn't do anything yet
       my %scantron_config=&get_scantron_config($ENV{'form.scantron_format'});
       if ($scantron_config{'CODElocation'} &&
    $scantron_config{'CODEstart'} &&
    $scantron_config{'CODElength'}) {
    if (!$ENV{'form.scantron_CODElist'}) {
       &FIXME_blow_up()
    }
       } else {
    &Apache::lonnet::logthis(" CODE stuf $scantron_config{'CODElocation'}:$scantron_config{'CODEstart'}:$scantron_config{'CODElength'}");
    return (0,$currentphase+1);
       }
       
       my %usedCODEs;
   
       my $old_name=$ENV{'form.scantron_CODElist'};
       my $cdom =$ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
       my $cnum =$ENV{'course.'.$ENV{'request.course.id'}.'.num'};
       my %result=&Apache::lonnet::get('CODEs',[$old_name],$cdom,$cnum);
       my %allcodes=map {($_,1)} split(',',$result{$old_name});
   
       my ($scanlines,$scan_data)=&scantron_getfile();
       for (my $i=0;$i<=$scanlines->{'count'};$i++) {
    my $line=&scantron_get_line($scanlines,$i);
    if ($line=~/^[\s\cz]*$/) { next; }
    my $scan_record=&scantron_parse_scanline($line,$i,\%scantron_config,
    $scan_data);
    my $CODE=$$scan_record{'scantron.CODE'};
    my $error=0;
    if (!exists($allcodes{$CODE})) {
       &scantron_get_correction($r,$i,$scan_record,
        \%scantron_config,
        $line,'incorrectCODE',$CODE);
       return(1);
    }
    if (exists($usedCODEs{$CODE}) && $ENV{'form.scantron_CODEunique'}) {
       &scantron_get_correction($r,$i,$scan_record,
        \%scantron_config,
        $line,'duplicateCODE',$CODE);
       return(1);
    }
    $usedCODEs{$CODE}++;
       }
     return (0,$currentphase+1);      return (0,$currentphase+1);
 }  }
   

Removed from v.1.185  
changed lines
  Added in v.1.186


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