Diff for /loncom/interface/statistics/lonstudentassessment.pm between versions 1.7 and 1.8

version 1.7, 2002/08/05 20:53:38 version 1.8, 2002/08/13 00:37:18
Line 104  sub BuildStudentAssessmentPage { Line 104  sub BuildStudentAssessmentPage {
     my $selected=0;      my $selected=0;
     $r->print('<pre>'."\n");      $r->print('<pre>'."\n");
     foreach (@$students) {      foreach (@$students) {
         if($c->aborted()) {  return $Str; }          if($c->aborted()) { return $Str; }
         next if ($_ ne $selectedName &&           next if ($_ ne $selectedName && 
                  $selectedName ne 'All Students');                   $selectedName ne 'All Students');
         $selected = 1;          $selected = 1;
         my $courseData;   
         my $downloadTime='';  
         if(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) {  
             $downloadTime = $cache{$_.':lastDownloadTime'};  
             untie(%cache);  
         }  
         if($downloadTime eq 'Not downloaded') {  
             $courseData =   
                 &Apache::loncoursedata::DownloadCourseInformation($_,   
                                                                   $courseID);  
             unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_WRCREAT(),0640)) {  
                 next;  
             }  
             &Apache::loncoursedata::ProcessStudentData(\%cache,   
                                                        $courseData, $_);  
             untie(%cache);  
         }  
   
           my @who = ($_);
           next if(&Apache::loncoursedata::DownloadStudentCourseData(\@who, 'true', 
                                                                $cacheDB, 'true', 
                                                                'false', $courseID,
                                                                $r, $c) ne 'OK');
         next if($c->aborted());          next if($c->aborted());
   
         if(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) {          if(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) {
               my @before=();
               my @after=();
               my @updateColumn=();
               my $foundUpdate = 0;
               foreach(@$infoKeys) {
                   if(/updateTime/) {
                       $foundUpdate=1;
                       push(@updateColumn, $_);
                       next;
                   }
                   if($foundUpdate) {
                       push(@after, $_);
                   } else {
                       push(@before, $_);
                   }
               }
             my $displayString = 'DISPLAYDATA'.$spacing;              my $displayString = 'DISPLAYDATA'.$spacing;
             $r->print(&Apache::lonhtmlcommon::FormatStudentInformation(              $r->print(&Apache::lonhtmlcommon::FormatStudentInformation(
                                                          \%cache, $_,                                                           \%cache, $_,
                                                          $infoKeys,                                                           \@before,
                                                            $displayString,
                                                            'preformatted'));
   
               if($foundUpdate) {
                   $displayString = '';
                   $displayString .= '<a href="/adm/statistics?reportSelected=';
                   $displayString .= &Apache::lonnet::escape('Student Assessment');
                   $displayString .= '&download='.$_.'">';
                   $displayString .= 'DISPLAYDATA</a>'.$spacing;
                   $r->print(&Apache::lonhtmlcommon::FormatStudentInformation(
                                                                      \%cache, $_,
                                                                      \@updateColumn,
                                                                      $displayString,
                                                                      'preformatted'));
               }
   
               $displayString = 'DISPLAYDATA'.$spacing;
               $r->print(&Apache::lonhtmlcommon::FormatStudentInformation(
                                                            \%cache, $_,
                                                            \@after,
                                                          $displayString,                                                           $displayString,
                                                          'preformatted'));                                                           'preformatted'));
             $r->print(&StudentReport(\%cache, $_, $spacing, $sequenceKeys));              $r->print(&StudentReport(\%cache, $_, $spacing, $sequenceKeys));
Line 214  sub CreateTableHeadings { Line 238  sub CreateTableHeadings {
                                                    $displayString,                                                     $displayString,
                                                    'preformatted');                                                     'preformatted');
   
     $displayString  = '<td align="left"><pre>DISPLAYDATA'.$spacing;      $displayString  = '<td align="left"><pre>DISPLAYDATAFORMATTING'.$spacing;
     $displayString .= '</pre></td>'."\n";      $displayString .= '</pre></td>'."\n";
     $Str .= &Apache::lonhtmlcommon::CreateHeadings($cache,      $Str .= &Apache::lonhtmlcommon::CreateHeadings($cache,
                                                    $sequenceKeys,                                                     $sequenceKeys,
Line 265  sub StudentReport { Line 289  sub StudentReport {
     my ($username,$domain)=split(':',$name);      my ($username,$domain)=split(':',$name);
   
     my $Str = '';      my $Str = '';
       if(defined($cache->{$name.':error'})) {
           return $Str;
       }
     if($cache->{$name.':error'} =~ /course/) {      if($cache->{$name.':error'} =~ /course/) {
         $Str .= '<b><font color="blue">No course data for student </font>';          $Str .= '<b><font color="blue">No course data for student </font>';
         $Str .= '<font color="red">'.$username.'.</font></b><br>';          $Str .= '<font color="red">'.$username.'.</font></b><br>';
         return $Str;          return $Str;
     }      }
   
     my $Version;  
     my $problemsCorrect = 0;  
     my $totalProblems   = 0;  
     my $problemsSolved  = 0;  
     my $numberOfParts   = 0;  
 #    foreach my $sequence (split(':', $cache->{'orderedSequences'})) {  
     foreach my $sequence (@$showSequences) {      foreach my $sequence (@$showSequences) {
         my $characterCount=0;          my $characterCount=0;
         foreach my $problemID (split(':', $cache->{$sequence.':problems'})) {          foreach my $problemID (split(':', $cache->{$sequence.':problems'})) {
             my $problem = $cache->{$problemID.':problem'};              my $problem = $cache->{$problemID.':problem'};
             my $LatestVersion = $cache->{$name.':version:'.$problem};  
   
             # Output dashes for all the parts of this problem if there  
             # is no version information about the current problem.  
             if(!$LatestVersion) {  
                 foreach my $part (split(/\:/,$cache->{$sequence.':'.  
                                                       $problemID.  
                                                       ':parts'})) {  
                     $Str .= ' ';  
                     $totalProblems++;  
                     $characterCount++;  
                 }  
                 next;  
             }  
   
             my %partData=undef;  
             # Initialize part data, display skips correctly  
             # Skip refers to when a student made no submissions on that  
             # part/problem.  
             foreach my $part (split(/\:/,$cache->{$sequence.':'.  
                                                   $problemID.  
                                                   ':parts'})) {  
                 $partData{$part.':tries'}=0;  
                 $partData{$part.':code'}=' ';  
             }  
   
             # Looping through all the versions of each part, starting with the  
             # oldest version.  Basically, it gets the most recent   
             # set of grade data for each part.  
     for(my $Version=1; $Version<=$LatestVersion; $Version++) {  
                 foreach my $part (split(/\:/,$cache->{$sequence.':'.  
                                                       $problemID.  
                                                       ':parts'})) {  
   
                     if(!defined($cache->{$name.":$Version:$problem".  
                                                ":resource.$part.solved"})) {  
                         # No grade for this submission, so skip  
                         next;  
                     }  
   
                     my $tries=0;  
                     my $code=' ';  
   
                     $tries = $cache->{$name.':'.$Version.':'.$problem.  
                                       ':resource.'.$part.'.tries'};  
                     $partData{$part.':tries'}=($tries) ? $tries : 0;  
   
                     my $val = $cache->{$name.':'.$Version.':'.$problem.  
                                        ':resource.'.$part.'.solved'};  
                     if    ($val eq 'correct_by_student')   {$code = '*';}   
                     elsif ($val eq 'correct_by_override')  {$code = '+';}  
                     elsif ($val eq 'incorrect_attempted')  {$code = '.';}   
                     elsif ($val eq 'incorrect_by_override'){$code = '-';}  
                     elsif ($val eq 'excused')              {$code = 'x';}  
                     elsif ($val eq 'ungraded_attempted')   {$code = '#';}  
                     else                                   {$code = ' ';}  
                     $partData{$part.':code'}=$code;  
                 }  
             }  
   
             # All grades (except for versionless parts) are displayed as links              # All grades (except for versionless parts) are displayed as links
             # to their submission record.  Loop through all the parts for the              # to their submission record.  Loop through all the parts for the
             # current problem in the correct order and prepare the output links              # current problem in the correct order and prepare the output links
             $Str .= '<a href="/adm/grades?symb=';  
             $Str .= &Apache::lonnet::escape($problem);  
             $Str .= '&student='.$username.'&domain='.$domain;  
             $Str .= '&command=submission">';   
             foreach(split(/\:/,$cache->{$sequence.':'.$problemID.              foreach(split(/\:/,$cache->{$sequence.':'.$problemID.
                                         ':parts'})) {                                          ':parts'})) {
                 if($partData{$_.':code'} eq '*') {  
                     $problemsCorrect++;  
                     if (($partData{$_.':tries'}<10) &&  
                         ($partData{$_.':tries'} ne '')) {  
                         $partData{$_.':code'}=$partData{$_.':tries'};  
                     }  
                 } elsif($partData{$_.':code'} eq '+') {  
                     $problemsCorrect++;  
                 }  
   
                 $Str .= $partData{$_.':code'};  
                 $characterCount++;                  $characterCount++;
                   if(defined($cache->{$name.':'.$problemID.':NoVersion'}) ||
                 if($partData{$_.':code'} ne 'x') {                     $cache->{$name.':'.$problemID.':'.$_.':code'} eq ' ') {
                     $totalProblems++;                      $Str .= ' ';
                       next;
                 }                  }
                   $Str .= '<a href="/adm/grades?symb=';
                   $Str .= &Apache::lonnet::escape($problem);
                   $Str .= '&student='.$username.'&domain='.$domain;
                   $Str .= '&command=submission">'; 
                   my $code = $cache->{$name.':'.$problemID.':'.$_.':code'};
                   my $tries = $cache->{$name.':'.$problemID.':'.$_.':tries'};
                   if($code eq '*' && $tries < 10 && $tries ne '') {
                       $code = $tries;
                   }
                   $Str .= $code;
                   $Str.='</a>';
             }              }
             $Str.='</a>';  
         }          }
   
         # Output the number of correct answers for the current sequence.          # Output the number of correct answers for the current sequence.
Line 377  sub StudentReport { Line 334  sub StudentReport {
         $spacesNeeded -= 3;          $spacesNeeded -= 3;
         $Str .= (' 'x$spacesNeeded);          $Str .= (' 'x$spacesNeeded);
   
  my $outputProblemsCorrect = sprintf( "%3d", $problemsCorrect );   my $outputProblemsCorrect = sprintf("%3d", $cache->{$name.':'.$sequence.
                                                               ':problemsCorrect'});
  $Str .= '<font color="#007700">'.$outputProblemsCorrect.'</font>';   $Str .= '<font color="#007700">'.$outputProblemsCorrect.'</font>';
  $problemsSolved += $problemsCorrect;  
  $problemsCorrect=0;  
   
         $Str .= $spacing;          $Str .= $spacing;
     }      }
   
     # Output the total correct problems over the total number of problems.      # Output the total correct problems over the total number of problems.
     # I don't like this type of formatting, but it is a solution.  Need      # I don't like this type of formatting, but it is a solution.  Need
     # a way to dynamically determine the space requirements.      # a way to dynamically determine the space requirements.
     my $outputProblemsSolved = sprintf( "%4d", $problemsSolved );      my $outputProblemsSolved = sprintf("%4d", $cache->{$name.':problemsSolved'});
     my $outputTotalProblems  = sprintf( "%4d", $totalProblems );      my $outputTotalProblems  = sprintf("%4d", $cache->{$name.':totalProblems'});
     $Str .= '<font color="#000088">'.$outputProblemsSolved.      $Str .= '<font color="#000088">'.$outputProblemsSolved.
     ' / '.$outputTotalProblems.'</font>';      ' / '.$outputTotalProblems.'</font>';
   

Removed from v.1.7  
changed lines
  Added in v.1.8


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