Diff for /loncom/interface/statistics/lonproblemstatistics.pm between versions 1.41 and 1.42

version 1.41, 2003/03/25 23:00:40 version 1.42, 2003/03/26 15:19:16
Line 286  sub output_html_grouped_by_sequence { Line 286  sub output_html_grouped_by_sequence {
 sub output_html_ungrouped {  sub output_html_ungrouped {
     my ($r) = @_;      my ($r) = @_;
     #      #
     my $sortby = $ENV{'form.sortby'};  
     if (! defined($sortby) || $sortby eq '') {  
         $sortby = 'sequence';  
     }  
     #  
     my $show_container = 0;      my $show_container = 0;
     #$r->print(&ProblemStatisticsLegend());      #$r->print(&ProblemStatisticsLegend());
     my @Header = ("Title","Part","#Stdnts","Tries","Mod",      my @Header = ("Title","Part","#Stdnts","Tries","Mod",
                   "Mean","#YES","#yes","%Wrng","DoDiff",                    "Mean","#YES","#yes","%Wrng","DoDiff",
                   "S.D.","Skew.");#,"D.F.1st","D.F.2nd");                    "S.D.","Skew.");#,"D.F.1st","D.F.2nd");
       #
       my $sortby = undef;
       foreach (@Header) {
           if ($ENV{'form.sortby'} eq $_) {
               $sortby = $_;
           }
       }
       if (! defined($sortby) || $sortby eq '') {
           $sortby = 'Container';
       }
     # #FFFFE6 #EEFFCC #DDFFFF FFDDDD #DDFFDD #FFDDFF      # #FFFFE6 #EEFFCC #DDFFFF FFDDDD #DDFFDD #FFDDFF
     my @Sequences = &Apache::lonstatistics::Sequences_with_Assess();      my @Sequences = &Apache::lonstatistics::Sequences_with_Assess();
     if (@Sequences > 1) {      if (@Sequences > 1) {
Line 307  sub output_html_ungrouped { Line 312  sub output_html_ungrouped {
     $r->print('<table border="0" cellpadding="3">'."\n");      $r->print('<table border="0" cellpadding="3">'."\n");
     my $Str = '';      my $Str = '';
     foreach (@Header) {      foreach (@Header) {
         $Str .= '<th>'.          if (/^(Part)$/) {  # Do not allow sorting on this field
               $Str .= '<th>'.$_.'</th>';
           } else {
               $Str .= '<th>'.
      '<a href="javascript:document.Statistics.sortby.value='."'$_'".       '<a href="javascript:document.Statistics.sortby.value='."'$_'".
          ';document.Statistics.submit();">'.           ';document.Statistics.submit();">'.
          $_.'</a></th>';               $_.'</a></th>';
           }
     }      }
     $r->print('<tr bgcolor="#FFFFE6">'.$Str."</tr>\n");      $r->print('<tr bgcolor="#FFFFE6">'.$Str."</tr>\n");
     $r->rflush();      $r->rflush();
     #      #
       # Compile the data
       my %Statshash;
       my @Statsarray;
     foreach my $sequence (@Sequences) {      foreach my $sequence (@Sequences) {
         next if ($sequence->{'num_assess'}<1);          next if ($sequence->{'num_assess'}<1);
         foreach my $resource (@{$sequence->{'contents'}}) {          foreach my $resource (@{$sequence->{'contents'}}) {
Line 324  sub output_html_ungrouped { Line 336  sub output_html_ungrouped {
                     $SKEW) = &Apache::loncoursedata::get_problem_statistics                      $SKEW) = &Apache::loncoursedata::get_problem_statistics
                         (undef,$resource->{'symb'},$part,                          (undef,$resource->{'symb'},$part,
                          $ENV{'request.course.id'});                           $ENV{'request.course.id'});
                 if ($part == 0) {  
                     $part = '&nbsp;';  
                 }  
                 my $wrongpercent = 0;                  my $wrongpercent = 0;
                 if (defined($num) && $num > 0) {                  if (defined($num) && $num > 0) {
                     $wrongpercent=int(10*100*($num-$Solved+$solved)/$num)/10;                      $wrongpercent=int(10*100*($num-$Solved+$solved)/$num)/10;
                 }                  }
                 if ($show_container) {                  my $key = $resource->{'symb'}.':'.$part;
                     $r->print('<tr>'.                  $Statshash{$key} = 
                               '<td bgcolor="#FFFFE6">'.$sequence->{'title'}.                      {
                               '</td>'.                          'sequence' => $sequence,
                               &statistics_html_table_data                          'resource' => $resource,
                               ($resource,$part,$num,$tries,$mod,$mean,$Solved,                          'Title' => $resource->{'title'},
                                $solved,$wrongpercent,$DegOfDiff,$STD,$SKEW).                          'Part'  => $part,
                               "</tr>\n");                          '#Stdnts' => $num,
                 } else {                          'Tries' => $tries,
                     $r->print('<tr>'.&statistics_html_table_data                          'Mod' => $mod,
                               ($resource,$part,$num,$tries,$mod,$mean,$Solved,                          'Mean' => $mean,
                                $solved,$wrongpercent,$DegOfDiff,$STD,$SKEW).                          '#YES' => $Solved,
                               "</tr>\n");                          '#yes' => $solved,
                           '%Wrng' => $wrongpercent,
                           'DoDiff' => $DegOfDiff,
                           'S.D.' => $STD,
                           'Skew' => $SKEW,
                       };
                   push (@Statsarray,$Statshash{$key});
               }
           }
       }
       #
       # Sort the data
       if ($sortby eq 'Container') {
           foreach my $sequence (@Sequences) {
               next if ($sequence->{'num_assess'}<1);
               foreach my $resource (@{$sequence->{'contents'}}) {
                   next if ($resource->{'type'} ne 'assessment');
                   foreach my $part (@{$resource->{'parts'}}) {
                       my $key = $resource->{'symb'}.':'.$part;
                       $r->print('<tr>');
                       if ($show_container) {
                           $r->print('<td bgcolor="#FFFFE6">'
                                     .$sequence->{'title'}.'</td>');
                       }
                       $r->print(&stats_row_from_hash($Statshash{$key}));
                       $r->print("</tr>\n");
                   }
               }
           }
       } else {
           # $sortby is already defined, so we can charge ahead
           my @OutputOrder;
           if ($sortby =~ /^(title|part)$/i) {
               # Alpha comparison
               @OutputOrder = sort {
                   $b->{$sortby} cmp $a->{$sortby} ||
                       $b->{'Title'} cmp $a->{'Title'} ||
                           $b->{'Part'} cmp $a->{'Part'};
               } @Statsarray;
           } else {
               # Numerical comparison
               @OutputOrder = sort {
                   my $retvalue = 0;
                   if ($b->{$sortby} eq 'nan') {
                       if ($a->{$sortby} ne 'nan') {
                           $retvalue = -1;
                       } else {
                           $retvalue = 0;
                       }
                   }
                   if ($a->{$sortby} eq 'nan') {
                       if ($b->{$sortby} ne 'nan') {
                           $retvalue = 1;
                       }
                   }
                   if ($retvalue eq '0') {
                       $retvalue = $b->{$sortby} <=> $a->{$sortby} ||
                                   $b->{'Title'} <=> $a->{'Title'} ||
                                   $b->{'Part'}  <=> $a->{'Part'};
                 }                  }
                   $retvalue;
               } @Statsarray;
           }
           foreach my $row (@OutputOrder) {
               $r->print('<tr>');
               if ($show_container) {
                   $r->print('<td bgcolor="#FFFFE6">'
                             .$row->{'sequence'}->{'title'}.'</td>');
             }              }
               $r->print(&stats_row_from_hash($row));
               $r->print("</tr>\n");
         }          }
     }      }
     $r->print("</table>\n");      $r->print("</table>\n");
Line 355  sub output_html_ungrouped { Line 432  sub output_html_ungrouped {
     return;      return;
 }  }
   
   sub stats_row_from_hash {
       my ($data) = @_;
       if (ref($data) ne 'HASH') {
           my %Tmp = @_;
           $data = \%Tmp;
       }
       return &statistics_html_table_data($data->{'resource'},$data->{'Part'},
                                          $data->{'#Stdnts'}, $data->{'Tries'},
                                          $data->{'Mod'},     $data->{'Mean'},
                                          $data->{'#YES'},    $data->{'#yes'},
                                          $data->{"\%Wrng"},  $data->{'DoDiff'},
                                          $data->{'S.D.'},    $data->{'Skew'});
   }
   
 ###############################################  ###############################################
 ###############################################  ###############################################
   

Removed from v.1.41  
changed lines
  Added in v.1.42


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