Diff for /loncom/homework/grades.pm between versions 1.130.2.1.2.1 and 1.133

version 1.130.2.1.2.1, 2003/09/24 23:51:14 version 1.133, 2003/08/14 22:34:37
Line 2798  LISTJAVASCRIPT Line 2798  LISTJAVASCRIPT
   
 sub getSymbMap {  sub getSymbMap {
     my ($request) = @_;      my ($request) = @_;
     my $navmap = Apache::lonnavmaps::navmap-> new($ENV{'request.course.fn'}.'.db',      my $navmap = Apache::lonnavmaps::navmap->new();
   $ENV{'request.course.fn'}.'_parms.db');  
     $navmap->init();  
   
     my %symbx = ();      my %symbx = ();
     my @titles = ();      my @titles = ();
Line 2845  sub displayPage { Line 2843  sub displayPage {
     &sub_page_js($request);      &sub_page_js($request);
     $request->print($result);      $request->print($result);
   
     my $navmap = Apache::lonnavmaps::navmap-> new($ENV{'request.course.fn'}.'.db',      my $navmap = Apache::lonnavmaps::navmap->new();
   $ENV{'request.course.fn'}.'_parms.db',1, 1);  
     my ($mapUrl, $id, $resUrl) = split(/___/, $ENV{'form.page'});      my ($mapUrl, $id, $resUrl) = split(/___/, $ENV{'form.page'});
     my $map = $navmap->getResourceByUrl($resUrl); # add to navmaps      my $map = $navmap->getResourceByUrl($resUrl); # add to navmaps
   
Line 3008  sub updateGradeByPage { Line 3005  sub updateGradeByPage {
   
     $request->print($result);      $request->print($result);
   
     my $navmap = Apache::lonnavmaps::navmap-> new($ENV{'request.course.fn'}.'.db',      my $navmap = Apache::lonnavmaps::navmap->new();
   $ENV{'request.course.fn'}.'_parms.db',1, 1);  
     my ($mapUrl, $id, $resUrl) = split(/___/, $ENV{'form.page'});      my ($mapUrl, $id, $resUrl) = split(/___/, $ENV{'form.page'});
     my $map = $navmap->getResourceByUrl($resUrl); # add to navmaps      my $map = $navmap->getResourceByUrl($resUrl); # add to navmaps
   
Line 3184  sub scantron_selectphase { Line 3180  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_validate" />    <input type="hidden" name="command" value="scantron_process" />
   $default_form_data    $default_form_data
   <table width="100%" border="0">    <table width="100%" border="0">
     <tr>      <tr>
Line 3214  sub scantron_selectphase { Line 3210  sub scantron_selectphase {
       </td>        </td>
     </tr>      </tr>
   </table>    </table>
   <input type="submit" value="Validate Scantron Records" />    <input type="submit" value="Submit" />
 </form>  </form>
 $grading_menu_button  $grading_menu_button
 SCANTRONFORM  SCANTRONFORM
Line 3296  sub scantron_parse_scanline { Line 3292  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)) {   if (lc($id) eq lc($scanID)) { Apache->request->print('success');return $$idmap{$id}; }
     #Apache->request->print('success');  
     return $$idmap{$id};  
  }  
     }      }
     return undef;      return undef;
 }  }
Line 3325  sub scantron_filter { Line 3312  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)=split(/___/,$ENV{'form.selectpage'});      my (undef,undef,$sequence)=split(/___/,$ENV{'form.selectpage'});
Line 3349  sub scantron_process_students { Line 3324  sub scantron_process_students {
     my @scanlines=<$scanlines>;      my @scanlines=<$scanlines>;
     my $classlist=&Apache::loncoursedata::get_classlist();      my $classlist=&Apache::loncoursedata::get_classlist();
     my %idmap=&username_to_idmap($classlist);      my %idmap=&username_to_idmap($classlist);
     my $navmap=Apache::lonnavmaps::navmap->new($ENV{'request.course.fn'}.'.db',$ENV{'request.course.fn'}.'_parms.db',1, 1);      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 3361  SCANTRONFORM Line 3336  SCANTRONFORM
     $r->print($result);      $r->print($result);
   
     my @delayqueue;      my @delayqueue;
     my %completedstudents;      my $totalcorrect;
           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) {
  $r->print('<pre>line is'.$line.'</pre>');   my $studentcorrect;
    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);
  unless ($uname=&scantron_find_student($scan_record,\%idmap)) {   if ($uname=&scantron_find_student($scan_record,\%idmap)) {
     &scantron_add_delay(\@delayqueue,$line,      &scantron_add_delay(\@delayqueue,$line,
  'Unable to find a student that matches',1);   'Unable to find a student that matches');
     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 3402  SCANTRONFORM Line 3370  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');               'last student Who got a '.$studentcorrect.' correct and '.
  #last;       $studentincorrect.' incorrect. The class has gotten '.
                $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 3434  SCANTRONFORM Line 3402  SCANTRONFORM
  #   generate data to pass back that includes grade recevied   #   generate data to pass back that includes grade recevied
  #}   #}
     }      }
     &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);      $Apache::lonxml::debug=0;
     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 3721  sub handler { Line 3685  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.130.2.1.2.1  
changed lines
  Added in v.1.133


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