Diff for /loncom/homework/grades.pm between versions 1.137 and 1.143

version 1.137, 2003/09/17 17:43:34 version 1.143, 2003/10/08 18:25:18
Line 185  sub cleanRecord { Line 185  sub cleanRecord {
     $ENV{'form.kwstyle'}  = $keyhash{$loginuser.'_kwstyle'} ne '' ? $keyhash{$loginuser.'_kwstyle'} : '';      $ENV{'form.kwstyle'}  = $keyhash{$loginuser.'_kwstyle'} ne '' ? $keyhash{$loginuser.'_kwstyle'} : '';
     $ENV{'form.'.$symb} = 1; # so that we don't have to read it from disk for multiple sub of the same prob.      $ENV{'form.'.$symb} = 1; # so that we don't have to read it from disk for multiple sub of the same prob.
  }   }
  return '<br /><br /><blockquote>'.&keywords_highlight($answer).'</blockquote>';   return '<br /><br /><blockquote><pre>'.&keywords_highlight($answer).'</pre></blockquote>';
     }      }
     return $answer;      return $answer;
 }  }
Line 218  sub commonJSfunctions { Line 218  sub commonJSfunctions {
  }   }
     }      }
  } else {   } else {
     if (selectOne.selected) return selectOne.value;              // only one value it must be the selected one
       return selectOne.value;
  }   }
     }      }
 </script>  </script>
Line 2334  sub editgrades { Line 2335  sub editgrades {
  $newrecord{'resource.'.$_.'.awarded'} = 0;   $newrecord{'resource.'.$_.'.awarded'} = 0;
  $newrecord{'resource.'.$_.'.regrader'}="$ENV{'user.name'}:$ENV{'user.domain'}";   $newrecord{'resource.'.$_.'.regrader'}="$ENV{'user.name'}:$ENV{'user.domain'}";
  $updateflag = 1;   $updateflag = 1;
       } elsif (!($old_part eq $partial && $old_score eq $score)) {
    $updateflag = 1;
    $newrecord{'resource.'.$_.'.awarded'}  = $partial if $partial ne '';
    $newrecord{'resource.'.$_.'.solved'}   = $score;
    $rec_update++;
     }      }
   
     $line .= '<td align="center">'.$old_aw.'&nbsp;</td>'.      $line .= '<td align="center">'.$old_aw.'&nbsp;</td>'.
  '<td align="center">'.$awarded.   '<td align="center">'.$awarded.
  ($score eq 'excused' ? $score : '').'&nbsp;</td>';   ($score eq 'excused' ? $score : '').'&nbsp;</td>';
   
     if (!($old_part eq $partial && $old_score eq $score)) {  
  $updateflag = 1;  
  $newrecord{'resource.'.$_.'.awarded'}  = $partial if $partial ne '';  
  $newrecord{'resource.'.$_.'.solved'}   = $score;  
  $rec_update++;  
     }  
   
     my $partid=$_;      my $partid=$_;
     foreach my $stores (@parts) {      foreach my $stores (@parts) {
Line 3189  sub scantron_selectphase { Line 3189  sub scantron_selectphase {
     my $result;      my $result;
     $result.= <<SCANTRONFORM;      $result.= <<SCANTRONFORM;
 <form method="post" enctype="multipart/form-data" action="/adm/grades" name="scantro_process">  <form method="post" enctype="multipart/form-data" action="/adm/grades" name="scantro_process">
   <input type="hidden" name="command" value="scantron_process" />    <input type="hidden" name="command" value="scantron_validate" />
   $default_form_data    $default_form_data
   <table width="100%" border="0">    <table width="100%" border="0">
     <tr>      <tr>
Line 3219  sub scantron_selectphase { Line 3219  sub scantron_selectphase {
       </td>        </td>
     </tr>      </tr>
   </table>    </table>
   <input type="submit" value="Submit" />    <input type="submit" value="Validate Scantron Records" />
 </form>  </form>
 $grading_menu_button  $grading_menu_button
 SCANTRONFORM  SCANTRONFORM
Line 3301  sub scantron_parse_scanline { Line 3301  sub scantron_parse_scanline {
 }  }
   
 sub scantron_add_delay {  sub scantron_add_delay {
       my ($delayqueue,$scanline,$errormessage,$errorcode)=@_;
       Apache->request->print('add_delay_error '.$_[2] );
       push(@$delayqueue,
    {'line' => $scanline, 'emsg' => $errormessage,
     'ecode' => $errorcode }
    );
 }  }
   
 sub scantron_find_student {  sub scantron_find_student {
     my ($scantron_record,$idmap)=@_;      my ($scantron_record,$idmap)=@_;
     my $scanID=$$scantron_record{'scantron.ID'};      my $scanID=$$scantron_record{'scantron.ID'};
     foreach my $id (keys(%$idmap)) {      foreach my $id (keys(%$idmap)) {
  Apache->request->print('<pre>checking studnet -'.$id.'- againt -'.$scanID.'- </pre>');   #Apache->request->print('<pre>checking studnet -'.$id.'- againt -'.$scanID.'- </pre>');
  if (lc($id) eq lc($scanID)) { Apache->request->print('success');return $$idmap{$id}; }   if (lc($id) eq lc($scanID)) {
       #Apache->request->print('success');
       return $$idmap{$id};
    }
     }      }
     return undef;      return undef;
 }  }
Line 3321  sub scantron_filter { Line 3330  sub scantron_filter {
     return 0;      return 0;
 }  }
   
   #FIXME I think I am doing this in the wrong order, I think it would be
   #better to make a several passes analyzing all of the lines in the
   #file for common errors wrong/invalid PID/username duplicated
   #PID/username, missing bubbles, double bubbles, missing/invalid CODE
   #and then get the instructor to fix all of these errors, then grade
   #the corrected one, I'll still need to catch error conditions, but
   #maybe most will taken care even before we start
   
   sub scantron_validate_file {
       my ($r) = @_;
   }
   
 sub scantron_process_students {  sub scantron_process_students {
     my ($r) = @_;      my ($r) = @_;
     my (undef,undef,$sequence)=&Apache::lonnet::decode_symb($ENV{'form.selectpage'});      my (undef,undef,$sequence)=&Apache::lonnet::decode_symb($ENV{'form.selectpage'});
Line 3336  sub scantron_process_students { Line 3357  sub scantron_process_students {
     my $navmap=Apache::lonnavmaps::navmap->new();      my $navmap=Apache::lonnavmaps::navmap->new();
     my $map=$navmap->getResourceByUrl($sequence);      my $map=$navmap->getResourceByUrl($sequence);
     my @resources=$navmap->retrieveResources($map,\&scantron_filter,1,0);      my @resources=$navmap->retrieveResources($map,\&scantron_filter,1,0);
     $r->print("geto ".scalar(@resources)."<br />");  #    $r->print("geto ".scalar(@resources)."<br />");
     my $result= <<SCANTRONFORM;      my $result= <<SCANTRONFORM;
 <form method="post" enctype="multipart/form-data" action="/adm/grades" name="scantronupload">  <form method="post" enctype="multipart/form-data" action="/adm/grades" name="scantronupload">
   <input type="hidden" name="command" value="scantron_configphase" />    <input type="hidden" name="command" value="scantron_configphase" />
Line 3345  SCANTRONFORM Line 3366  SCANTRONFORM
     $r->print($result);      $r->print($result);
   
     my @delayqueue;      my @delayqueue;
     my $totalcorrect;      my %completedstudents;
     my $totalincorrect;      
   
     my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,      my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,
            'Scantron Status','Scantron Progress',scalar(@scanlines));             'Scantron Status','Scantron Progress',scalar(@scanlines));
       &Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,
     'Processing first student');
       my $start=&Time::HiRes::time();
     foreach my $line (@scanlines) {      foreach my $line (@scanlines) {
  my $studentcorrect;   $r->print('<pre>line is'.$line.'</pre>');
  my $studentincorrect;  
   
  chomp($line);   chomp($line);
  my $scan_record=&scantron_parse_scanline($line,\%scantron_config);   my $scan_record=&scantron_parse_scanline($line,\%scantron_config);
  my ($uname,$udom);   my ($uname,$udom);
  if ($uname=&scantron_find_student($scan_record,\%idmap)) {   unless ($uname=&scantron_find_student($scan_record,\%idmap)) {
     &scantron_add_delay(\@delayqueue,$line,      &scantron_add_delay(\@delayqueue,$line,
  'Unable to find a student that matches');   'Unable to find a student that matches',1);
       next;
    }
    if (exists $completedstudents{$uname}) {
       &scantron_add_delay(\@delayqueue,$line,
    'Student '.$uname.' has multiple sheets',2);
       next;
  }   }
  $r->print('<pre>doing studnet'.$uname.'</pre>');   $r->print('<pre>doing studnet'.$uname.'</pre>');
  ($uname,$udom)=split(/:/,$uname);   ($uname,$udom)=split(/:/,$uname);
  &Apache::lonnet::delenv('form.counter');   &Apache::lonnet::delenv('form.counter');
  &Apache::lonnet::appenv(%$scan_record);   &Apache::lonnet::appenv(%$scan_record);
 #    &Apache::lonhomework::showhash(%ENV);  #    &Apache::lonhomework::showhash(%ENV);
     $Apache::lonxml::debug=1;  #    $Apache::lonxml::debug=1;
  &Apache::lonxml::debug("line is $line");  # &Apache::lonxml::debug("line is $line");
   
     my $i=0;      my $i=0;
  foreach my $resource (@resources) {   foreach my $resource (@resources) {
Line 3379  SCANTRONFORM Line 3407  SCANTRONFORM
   'grade_domain'  =>$udom,    'grade_domain'  =>$udom,
   'grade_courseid'=>$ENV{'request.course.id'},    'grade_courseid'=>$ENV{'request.course.id'},
   'grade_symb'    =>$resource->symb()));    'grade_symb'    =>$resource->symb()));
     my %score=&Apache::lonnet::restore($resource->symb(),  #    my %score=&Apache::lonnet::restore($resource->symb(),
        $ENV{'request.course.id'},  #       $ENV{'request.course.id'},
        $udom,$uname);  #       $udom,$uname);
     foreach my $part ($resource->{PARTS}) {  #    foreach my $part ($resource->{PARTS}) {
  if ($score{'resource.'.$part.'.solved'} =~ /^correct/) {  # if ($score{'resource.'.$part.'.solved'} =~ /^correct/) {
     $studentcorrect++;  #    $studentcorrect++;
     $totalcorrect++;  #    $totalcorrect++;
  } else {  # } else {
     $studentincorrect++;  #    $studentincorrect++;
     $totalincorrect++;  #    $totalincorrect++;
  }  # }
     }  #    }
     $r->print('<pre>'.  #    $r->print('<pre>'.
       $resource->symb().'-'.  #      $resource->symb().'-'.
       $resource->src().'-'.'</pre>result is'.$result);  #      $resource->src().'-'.'</pre>result is'.$result);
     &Apache::lonhomework::showhash(%score);  #    &Apache::lonhomework::showhash(%score);
  #    if ($i eq 3) {last;}   #    if ($i eq 3) {last;}
  }   }
    $completedstudents{$uname}={'line'=>$line};
       } continue {
  &Apache::lonnet::delenv('form.counter');   &Apache::lonnet::delenv('form.counter');
  &Apache::lonnet::delenv('scantron\.');   &Apache::lonnet::delenv('scantron\.');
  &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,   &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
              'last student Who got a '.$studentcorrect.' correct and '.   'last student');
      $studentincorrect.' incorrect. The class has gotten '.   #last;
              $totalcorrect.' correct and '.$totalincorrect.' incorrect');  
  last;  
  #FIXME   #FIXME
  #get iterator for $sequence   #get iterator for $sequence
  #foreach question 'submit' the students answer to the server   #foreach question 'submit' the students answer to the server
Line 3411  SCANTRONFORM Line 3439  SCANTRONFORM
  #   generate data to pass back that includes grade recevied   #   generate data to pass back that includes grade recevied
  #}   #}
     }      }
     $Apache::lonxml::debug=0;      &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
       my $lasttime = &Time::HiRes::time()-$start;
       $r->print("<p>took $lasttime</p>");
   
       #$Apache::lonxml::debug=0;
     foreach my $delay (@delayqueue) {      foreach my $delay (@delayqueue) {
  #FIXME   #FIXME
  #print out each delayed student with interface to select how   #print out each delayed student with interface to select how
Line 3597  sub handler { Line 3629  sub handler {
   
     undef(%perm);      undef(%perm);
     if ($ENV{'browser.mathml'}) {      if ($ENV{'browser.mathml'}) {
  $request->content_type('text/xml');   &Apache::loncommon::content_type($request,'text/xml');
     } else {      } else {
  $request->content_type('text/html');   &Apache::loncommon::content_type($request,'text/html');
     }      }
     $request->send_http_header;      $request->send_http_header;
     return '' if $request->header_only;      return '' if $request->header_only;
Line 3694  sub handler { Line 3726  sub handler {
     }      }
  } elsif ($command eq 'scantron_selectphase' && $perm{'mgr'}) {   } elsif ($command eq 'scantron_selectphase' && $perm{'mgr'}) {
     $request->print(&scantron_selectphase($request));      $request->print(&scantron_selectphase($request));
    } elsif ($command eq 'scantron_validate' && $perm{'mgr'}) {
       $request->print(&scantron_validate_file($request));
  } elsif ($command eq 'scantron_process' && $perm{'mgr'}) {   } elsif ($command eq 'scantron_process' && $perm{'mgr'}) {
     $request->print(&scantron_process_students($request));      $request->print(&scantron_process_students($request));
  } elsif ($command) {   } elsif ($command) {

Removed from v.1.137  
changed lines
  Added in v.1.143


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