Diff for /loncom/homework/grades.pm between versions 1.677 and 1.678

version 1.677, 2012/12/10 01:13:08 version 1.678, 2012/12/10 05:47:21
Line 8025  SCANTRONFORM Line 8025  SCANTRONFORM
         }          }
   
         my @mapresources = @resources;          my @mapresources = @resources;
         if ($randomorder && $scancode) {          if ($randomorder) {
             unless (ref($ordered{$scancode}) eq 'ARRAY') {              @mapresources = 
                 $env{'form.CODE'} = $scancode;                  &users_order($user,$scancode,$sequence,\@master_seq,\%ordered,
                 my $actual_seq =                               \%symb_to_resource);
                     &Apache::lonprintout::master_seq_to_person_seq($sequence,  
                                                                    \@master_seq,  
                                                                    $user,$scancode);  
                 if (ref($actual_seq) eq 'ARRAY') {  
                     @{$ordered{$scancode}} =   
                         map { $symb_to_resource{$_}; } @{$actual_seq};  
                 }  
                 delete($env{'form.CODE'});  
             }  
             if (ref($ordered{$scancode}) eq 'ARRAY') {  
                 @mapresources = @{$ordered{$scancode}};  
             }  
         }          }
         my (%partids_by_symb,$res_error);          my (%partids_by_symb,$res_error);
         foreach my $resource (@mapresources) {          foreach my $resource (@mapresources) {
Line 8190  sub graders_resources_pass { Line 8178  sub graders_resources_pass {
     return;      return;
 }  }
   
   =pod
   
   =item users_order
   
     Returns array of resources in current map, ordered based on either CODE,
     if this is a CODEd exam, or based on student's identity if this is a 
     "NAMEd" exam.
   
     Should be used when randomorder applied when the corresponding exam was
     printed, prior to students completing bubblesheets for the version of the
     exam the student received. 
   
   =cut
   
   sub users_order  {
       my ($user,$scancode,$mapurl,$master_seq,$ordered,$symb_to_resource) = @_;
       my @mapresources;
       unless ((ref($ordered) eq 'HASH') && (ref($symb_to_resource) eq 'HASH')) {
           return @mapresources;
       }  
       if (($scancode) && (ref($ordered->{$scancode}) eq 'ARRAY')) {
           @mapresources = @{$ordered->{$scancode}};
       } elsif ($scancode) {
           $env{'form.CODE'} = $scancode;
           my $actual_seq =
               &Apache::lonprintout::master_seq_to_person_seq($mapurl,
                                                              $master_seq,
                                                              $user,$scancode);
           if (ref($actual_seq) eq 'ARRAY') {
               @{$ordered->{$scancode}} =
                   map { $symb_to_resource->{$_}; } @{$actual_seq};
               @mapresources = @{$ordered->{$scancode}};
           }
           delete($env{'form.CODE'});
       } else {
           my $actual_seq =
               &Apache::lonprintout::master_seq_to_person_seq($mapurl,
                                                              $master_seq,
                                                              $user);
           if (ref($actual_seq) eq 'ARRAY') {
               @mapresources = 
                   map { $symb_to_resource->{$_}; } @{$actual_seq};
           }
        }
        return @mapresources;
   }
   
 sub grade_student_bubbles {  sub grade_student_bubbles {
     my ($r,$uname,$udom,$scan_record,$scancode,$resources,$parts,$bubbles_per_row) = @_;       my ($r,$uname,$udom,$scan_record,$scancode,$resources,$parts,$bubbles_per_row) = @_; 
     if (ref($resources) eq 'ARRAY') {      if (ref($resources) eq 'ARRAY') {
Line 8495  sub checkscantron_results { Line 8530  sub checkscantron_results {
         return '';          return '';
     }      }
     my $map=$navmap->getResourceByUrl($sequence);      my $map=$navmap->getResourceByUrl($sequence);
     my $randomorder;      my ($randomorder,@master_seq,%symb_to_resource);
     if (ref($map)) {       if (ref($map)) { 
         $randomorder=$map->randomorder();          $randomorder=$map->randomorder();
     }      }
     my @resources=$navmap->retrieveResources($map,\&scantron_filter,1,0);      my @resources=$navmap->retrieveResources($map,\&scantron_filter,1,0);
       foreach my $resource (@resources) {
           if (ref($resource)) {
               my $ressymb = $resource->symb();
               push(@master_seq,$ressymb);
               $symb_to_resource{$ressymb} = $resource;
           }
       }
     my (%grader_partids_by_symb,%grader_randomlists_by_symb);      my (%grader_partids_by_symb,%grader_randomlists_by_symb);
     &graders_resources_pass(\@resources,\%grader_partids_by_symb,      &graders_resources_pass(\@resources,\%grader_partids_by_symb,
                             \%grader_randomlists_by_symb,$bubbles_per_row);                              \%grader_randomlists_by_symb,$bubbles_per_row);
Line 8513  sub checkscantron_results { Line 8555  sub checkscantron_results {
   
     my $count=&Apache::grades::get_todo_count($scanlines,$scan_data);      my $count=&Apache::grades::get_todo_count($scanlines,$scan_data);
     my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,$count);      my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,$count);
     my ($username,$domain,$started);      my ($username,$domain,$started,%ordered);
     my $nav_error;      my $nav_error;
     &scantron_get_maxbubble(\$nav_error,\%scantron_config); # Need the bubble lines array to parse.      &scantron_get_maxbubble(\$nav_error,\%scantron_config); # Need the bubble lines array to parse.
     if ($nav_error) {      if ($nav_error) {
Line 8555  sub checkscantron_results { Line 8597  sub checkscantron_results {
         $scandata{$pid} = substr($line,$scantron_config{'Qstart'}-1,$lastpos);          $scandata{$pid} = substr($line,$scantron_config{'Qstart'}-1,$lastpos);
         chomp($scandata{$pid});          chomp($scandata{$pid});
         $scandata{$pid} =~ s/\r$//;          $scandata{$pid} =~ s/\r$//;
           my $usec = $classlist->{$uname}->[&Apache::loncoursedata::CL_SECTION];
           my $user = $uname.':'.$usec;
         ($username,$domain)=split(/:/,$uname);          ($username,$domain)=split(/:/,$uname);
   
         my ($scancode,%ordered);          my $scancode;
         if ((exists($scan_record->{'scantron.CODE'})) &&          if ((exists($scan_record->{'scantron.CODE'})) &&
             (&Apache::lonnet::validCODE($scan_record->{'scantron.CODE'}))) {              (&Apache::lonnet::validCODE($scan_record->{'scantron.CODE'}))) {
             $scancode = $scan_record->{'scantron.CODE'};              $scancode = $scan_record->{'scantron.CODE'};
Line 8566  sub checkscantron_results { Line 8610  sub checkscantron_results {
         }          }
   
         my @mapresources = @resources;          my @mapresources = @resources;
         if ($randomorder && $scancode) {          if ($randomorder) {
             unless (ref($ordered{$scancode}) eq 'ARRAY') {              @mapresources =
                 $env{'form.CODE'} = $scancode;                  &users_order($user,$scancode,$sequence,\@master_seq,\%ordered,
                 $ordered{$scancode} =                                \%symb_to_resource);
                     &Apache::lonprintout::master_seq_to_person_seq($sequence,  
                                                                    \@resources,  
                                                                    $uname,$scancode);  
                 delete($env{'form.CODE'});  
             }  
             if (ref($ordered{$scancode}) eq 'ARRAY') {  
                 @mapresources = @{$ordered{$scancode}};  
             }  
         }          }
         my $counter = -1;          my $counter = -1;
         foreach my $resource (@mapresources) {          foreach my $resource (@mapresources) {

Removed from v.1.677  
changed lines
  Added in v.1.678


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