Diff for /loncom/interface/statistics/lonproblemstatistics.pm between versions 1.121 and 1.122.2.2

version 1.121, 2012/03/15 20:53:18 version 1.122.2.2, 2013/12/30 14:05:21
Line 52  package Apache::lonproblemstatistics; Line 52  package Apache::lonproblemstatistics;
 use strict;  use strict;
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::loncommon();  use Apache::loncommon();
 use Apache::lonquickgrades();  
 use Apache::lonhtmlcommon;  use Apache::lonhtmlcommon;
 use Apache::loncoursedata;  use Apache::loncoursedata;
 use Apache::lonstatistics;  use Apache::lonstatistics;
Line 74  my %SeqStat;    # keys are symbs, values Line 73  my %SeqStat;    # keys are symbs, values
 ## header for plots created with Graph.pm, both of which more than likely do  ## header for plots created with Graph.pm, both of which more than likely do
 ## not support localization.  ## not support localization.
 ##  ##
   ## Additional Notes:
   ## Localization can be done and is done before passing the phrases
   ## to the output.
   ## This might conflict with special characters, e.g. German Umlaute or
   ## chinese characters. Do not use such characters in this case.
   ## If this failed, consider that the sequence and folder names
   ## are also passed to the output and would fail the same way.
   ##
 #  #
 #  #
 ##  ##
Line 85  my %SeqStat;    # keys are symbs, values Line 92  my %SeqStat;    # keys are symbs, values
 ## title           yes      any scalar  This is what the user sees to identify  ## title           yes      any scalar  This is what the user sees to identify
 ##                                      the field.  Passed through &mt().  ##                                      the field.  Passed through &mt().
 ## long_title      yes      any scalar  Used as graph heading and in excel  ## long_title      yes      any scalar  Used as graph heading and in excel
 ##                                      output.  NOT translated  ##                                      output.  Passed through &mt().
 ## align           no    (left|right|center)  HTML cell contents alignment  ## align           no    (left|right|center)  HTML cell contents alignment
 ## color           yes      html color  HTML cell background color  ## color           yes      html color  HTML cell background color
 ##                                      used to visually group statistics  ##                                      used to visually group statistics
Line 275  my @Fields = ( Line 282  my @Fields = (
              sortable  => 'yes',               sortable  => 'yes',
              graphable => 'yes',               graphable => 'yes',
              long_title => 'Degree of Difficulty'.               long_title => 'Degree of Difficulty'.
                            '[ 1 - ((#YES+#yes) / Tries) ]',                             ' ~[ 1 - ((#YES+#yes) / Tries) ~]',
              selectable => 'yes',               selectable => 'yes',
              defaultselected => 'yes',               defaultselected => 'yes',
            },             },
Line 699  sub BuildProblemStatisticsPage { Line 706  sub BuildProblemStatisticsPage {
     # Finally let the user know we are here      # Finally let the user know we are here
     $r->print(&Apache::lonhtmlcommon::breadcrumbs('Overall Problem Statistics',      $r->print(&Apache::lonhtmlcommon::breadcrumbs('Overall Problem Statistics',
                                                 'Statistics_Overall_Key'));                                                  'Statistics_Overall_Key'));
     &Apache::lonquickgrades::startGradeScreen($r,'statistics');  
   
     my $interface = &CreateInterface($r);      my $interface = &CreateInterface($r);
     $r->print($interface);      $r->print($interface);
Line 741  sub BuildProblemStatisticsPage { Line 747  sub BuildProblemStatisticsPage {
         return;          return;
     }      }
     if (exists($env{'form.Excel'})) {      if (exists($env{'form.Excel'})) {
         $r->print('<h4>'.          $r->print('<p>'.
                   &Apache::lonstatistics::section_and_enrollment_description().                    &Apache::lonstatistics::section_and_enrollment_description().
                   '</h4>');                    '</p>');
         &Excel_output($r);          &Excel_output($r);
     } else {      } else {
         $r->print('<input type="submit" name="Excel" value="'.          $r->print('<input type="submit" name="Excel" value="'.
                   &mt('Produce Excel Output').'" />'.'&nbsp;'x5);                    &mt('Produce Excel Output').'" />'.'&nbsp;'x5);
         $r->rflush();          $r->rflush();
         $r->print('<h4>'.          $r->print('<p>'.
                   &Apache::lonstatistics::section_and_enrollment_description().                    &Apache::lonstatistics::section_and_enrollment_description().
                   '</h4>');                    '</p>');
         my $count = 0;          my $count = 0;
         foreach my $seq (@sequences) {          foreach my $seq (@sequences) {
             my @resources =              my @resources =
Line 759  sub BuildProblemStatisticsPage { Line 765  sub BuildProblemStatisticsPage {
             $count += scalar(@resources);              $count += scalar(@resources);
         }          }
         if ($count > 10) {          if ($count > 10) {
             $r->print('<h2>'.              $r->print('<p>'.
                       &mt('Compiling statistics for [_1] problems',$count).                        &mt('Compiling statistics for [quant,_1,problem]',$count).
                       '</h2>');                        '</p>');
             if ($count > 30) {              if ($count > 30) {
                 $r->print('<h3>'.&mt('This will take some time.').'</h3>');                  $r->print('<p class="LC_info">'.&mt('This will take some time.').'</p>');
             }              }
             $r->rflush();              $r->rflush();
         }          }
Line 795  sub output_sequence_statistics { Line 801  sub output_sequence_statistics {
     $r->print('<h2>'.&mt('Sequence Statistics').      $r->print('<h2>'.&mt('Sequence Statistics').
       &Apache::loncommon::help_open_topic('Statistics_Sequence').        &Apache::loncommon::help_open_topic('Statistics_Sequence').
       '</h2>');        '</h2>');
     $r->print('<table border="0"><tr><td bgcolor="#777777">'."\n".      $r->print(&Apache::loncommon::start_data_table().&Apache::loncommon::start_data_table_header_row());
               '<table border="0" cellpadding="3">'."\n".  
               '<tr bgcolor="#FFFFE6">');  
     $r->print(&sequence_html_header());      $r->print(&sequence_html_header());
       $r->print(&Apache::loncommon::end_data_table_header_row());
     foreach my $seq (@sequences) {      foreach my $seq (@sequences) {
         last if ($c->aborted);          last if ($c->aborted);
         &compute_sequence_statistics($seq);          &compute_sequence_statistics($seq);
         $r->print(&sequence_html_output($seq));          $r->print(&sequence_html_output($seq));
     }      }
     $r->print('</table>');      $r->print(&Apache::loncommon::end_data_table());
     $r->print('</table>');  
     $r->rflush();      $r->rflush();
     return;      return;
 }  }
Line 821  sub output_sequence_statistics { Line 825  sub output_sequence_statistics {
 sub output_html_by_sequence {  sub output_html_by_sequence {
     my ($r) = @_;      my ($r) = @_;
     my $c = $r->connection();      my $c = $r->connection();
     $r->print(&html_preamble());      $r->print('<br>'.&html_preamble());
     #      #
     foreach my $seq (@sequences) {      foreach my $seq (@sequences) {
         last if ($c->aborted);          last if ($c->aborted);
         $r->print("<h3>".$seq->compTitle."</h3>".          $r->print("<h3>".$seq->compTitle."</h3>".
                   '<table border="0"><tr><td bgcolor="#777777">'."\n".                      &Apache::loncommon::start_data_table().
                   '<table border="0" cellpadding="3">'."\n".                      &Apache::loncommon::start_data_table_header_row().
                   '<tr bgcolor="#FFFFE6">'.                      &statistics_table_header('no container').
                   &statistics_table_header('no container')."</tr>\n");                      &Apache::loncommon::end_data_table_header_row()."\n");
         my @Data = &compute_statistics_on_sequence($seq);          my @Data = &compute_statistics_on_sequence($seq);
         foreach my $data (@Data) {          foreach my $data (@Data) {
             $r->print('<tr>'.&statistics_html_table_data($data,              $r->print(&Apache::loncommon::start_data_table_row().
                                                          'no container').                      &statistics_html_table_data($data,'no container').
                       "</tr>\n");                      &Apache::loncommon::end_data_table_row()."\n");
         }          }
         $r->print('</table>'."\n".'</table>'."\n");          $r->print(&Apache::loncommon::end_data_table()."\n");
         $r->rflush();          $r->rflush();
     }      }
     return;      return;
Line 851  sub output_html_stats { Line 855  sub output_html_stats {
     my $count=0;      my $count=0;
     foreach my $data (@StatsArray) {      foreach my $data (@StatsArray) {
         if ($count++ % 50 == 0) {          if ($count++ % 50 == 0) {
             $r->print("</table>\n</table>\n");              $r->print(&Apache::loncommon::end_data_table());
             $r->print('<table border="0"><tr><td bgcolor="#777777">'."\n".              $r->print(&Apache::loncommon::start_data_table().
                       '<table border="0" cellpadding="3">'."\n".                      &Apache::loncommon::start_data_table_row().
                       '<tr bgcolor="#FFFFE6">'.                      &statistics_table_header().
                       '<tr bgcolor="#FFFFE6">'.                      &Apache::loncommon::end_data_table_row());
                       &statistics_table_header().          }
                       "</tr>\n");          $r->print(&Apache::loncommon::start_data_table_row().
         }                  &statistics_html_table_data($data).
         $r->print('<tr>'.&statistics_html_table_data($data)."</tr>\n");                  &Apache::loncommon::end_data_table_row());
     }      }
     $r->print("</table>\n</table>\n");      $r->print(&Apache::loncommon::end_data_table_row());
     return;      return;
 }  }
   
Line 878  sub html_preamble { Line 882  sub html_preamble {
                            &Apache::lonlocal::locallocaltime($endtime)                             &Apache::lonlocal::locallocaltime($endtime)
                            ).'</h3>';                             ).'</h3>';
     }      }
     $Str .= "<h3>".&mt('Compiled on [_1]',      $Str .= "<p>".&mt('Compiled on [_1]',
                        &Apache::lonlocal::locallocaltime(time))."</h3>";                         &Apache::lonlocal::locallocaltime(time))."</p>";
     return $Str;      return $Str;
 }  }
   
Line 897  sub statistics_html_table_data { Line 901  sub statistics_html_table_data {
     foreach my $field (@Fields) {      foreach my $field (@Fields) {
         next if ($options =~ /no $field->{'name'}/);          next if ($options =~ /no $field->{'name'}/);
         next if ($field->{'selected'} ne 'yes');          next if ($field->{'selected'} ne 'yes');
         $row .= '<td bgcolor="'.$field->{'color'}.'"';          $row .= '<td style="background-color:'.$field->{'color'}.'"';
         if (exists($field->{'align'})) {          if (exists($field->{'align'})) {
             $row .= ' align="'.$field->{'align'}.'"';              $row .= ' align="'.$field->{'align'}.'"';
             }              }
Line 1009  sub make_single_stat_plot { Line 1013  sub make_single_stat_plot {
     my $title; my $yaxis;      my $title; my $yaxis;
     foreach my $field (@Fields) {      foreach my $field (@Fields) {
         next if ($field->{'name'} ne $datafield);          next if ($field->{'name'} ne $datafield);
         $title = $field->{'long_title'};          $title = &mt($field->{'long_title'});
         $yaxis = $field->{'title'};          $yaxis = &mt($field->{'title'});
         last;          last;
     }      }
     if ($title eq '' || $yaxis eq '') {      if ($title eq '' || $yaxis eq '') {
         # datafield is something we do not know enough about to plot          # datafield is something we do not know enough about to plot
         $r->print('<h3>'.          $r->print('<p class="LC_warning">'.
                   &mt('Unable to plot the requested statistic.').                    &mt('Unable to plot the requested statistic.').
                   '</h3>');                    '</p>');
         return;          return;
     }      }
     #      #
Line 1044  sub make_single_stat_plot { Line 1048  sub make_single_stat_plot {
     }      }
     #      #
     $r->print("<p>".&Apache::loncommon::DrawBarGraph($title,      $r->print("<p>".&Apache::loncommon::DrawBarGraph($title,
                                                      'Problem Number',                                                       &mt('Problem Number'),
                                                      $yaxis,                                                       $yaxis,
                                                      $max,                                                       $max,
                                                      undef, # colors                                                       undef, # colors
Line 1109  sub degrees_plot { Line 1113  sub degrees_plot {
     my $diffdata .= '<data>'.join(',',@Labels).'</data>'.$/.      my $diffdata .= '<data>'.join(',',@Labels).'</data>'.$/.
                     '<data>'.join(',',@Diff).'</data>'.$/;                      '<data>'.join(',',@Diff).'</data>'.$/;
     #      #
     my $title = 'Degree of Discrimination\nand Degree of Difficulty';      my $title = &mt('Degree of Discrimination[_1]and Degree of Difficulty','\n');
     if ($xmax > 50) {      if ($xmax > 50) {
         $title = 'Degree of Discrimination and Degree of Difficulty';          $title = &mt('Degree of Discrimination and Degree of Difficulty');
     }      }
       my %lt = &Apache::lonlocal::texthash(
           'alttag' => 'Degree of Discrimination and Degree of Difficulty Plot',
           'xlabel' => 'Problem Number',
       );
     #      #
     $plot=<<"END";      $plot=<<"END";
 <gnuplot   <gnuplot 
Line 1124  sub degrees_plot { Line 1132  sub degrees_plot {
     align="center"      align="center"
     border="on"      border="on"
     transparent="on"      transparent="on"
     alttag="Degree of Discrimination and Degree of Difficulty Plot"      alttag="$lt{'alttag'}"
     samples="100"      samples="100"
     bgcolor="xffffff"      bgcolor="xffffff"
     height="$height"      height="$height"
Line 1135  sub degrees_plot { Line 1143  sub degrees_plot {
         box="off" />          box="off" />
     <title>$title</title>      <title>$title</title>
     <axis xmin="0" ymin="$ymin" xmax="$xmax" ymax="$ymax" color="x000000" />      <axis xmin="0" ymin="$ymin" xmax="$xmax" ymax="$ymax" color="x000000" />
     <xlabel>Problem Number</xlabel>      <xlabel>$lt{'xlabel'}</xlabel>
     <curve       <curve 
         linestyle="linespoints"           linestyle="linespoints" 
         name="DoDisc"           name="DoDisc" 
Line 1197  sub tries_data_plot { Line 1205  sub tries_data_plot {
                           '<data>'.join(',',@Mean).'</data>'.$/.                            '<data>'.join(',',@Mean).'</data>'.$/.
                           '<data>'.join(',',@STD).'</data>'.$/;                            '<data>'.join(',',@STD).'</data>'.$/;
     #      #
     my $title = 'Mean and S.D. of Tries';      my $title = &mt('Mean and S.D. of Tries');
     if ($xmax > 25) {      if ($xmax > 30) {
         $title = 'Mean and Standard Deviation of Tries';          $title = &mt('Mean and Standard Deviation of Tries');
     }      }
     #      #
       my %lt = &Apache::lonlocal::texthash(
           'alttag' => 'Mean and S.D of Tries Plot',
           'xlabel' => 'Problem Number',
           'ylabel' => 'Number of Tries',
       );
     $plot=<<"END";      $plot=<<"END";
 <gnuplot   <gnuplot 
     texfont="10"      texfont="10"
Line 1212  sub tries_data_plot { Line 1225  sub tries_data_plot {
     align="center"      align="center"
     border="on"      border="on"
     transparent="on"      transparent="on"
     alttag="Mean and S.D of Tries Plot"      alttag="$lt{'alttag'}"
     samples="100"      samples="100"
     bgcolor="xffffff"      bgcolor="xffffff"
     height="$height"      height="$height"
     width="$width">      width="$width">
     <title>$title</title>      <title>$title</title>
     <axis xmin="0" ymin="0" xmax="$xmax" ymax="$ymax" color="x000000" />      <axis xmin="0" ymin="0" xmax="$xmax" ymax="$ymax" color="x000000" />
     <xlabel>Problem Number</xlabel>      <xlabel>$lt{'xlabel'}</xlabel>
     <ylabel>Number of Tries</ylabel>      <ylabel>$lt{'ylabel'}</ylabel>
     <curve       <curve 
         linestyle="yerrorbars"          linestyle="yerrorbars"
         name="S.D. Tries"           name="S.D. Tries" 
Line 1245  END Line 1258  END
   
 sub plot_dropdown {  sub plot_dropdown {
     my $current = '';      my $current = '';
       my $title;
     #      #
     if (defined($env{'form.plot'})) {      if (defined($env{'form.plot'})) {
         $current = $env{'form.plot'};          $current = $env{'form.plot'};
Line 1260  sub plot_dropdown { Line 1274  sub plot_dropdown {
     #      #
     my $Str= "\n".'<select name="plot" size="1">';      my $Str= "\n".'<select name="plot" size="1">';
     $Str .= '<option name="none"></option>'."\n";      $Str .= '<option name="none"></option>'."\n";
     $Str .= '<option name="none2">none</option>'."\n";      $Str .= '<option name="none2">'.&mt('none').'</option>'."\n";
     foreach my $field (@Additional_Plots,@Fields) {      foreach my $field (@Additional_Plots,@Fields) {
         if (! exists($field->{'graphable'}) ||          if (! exists($field->{'graphable'}) ||
             $field->{'graphable'} ne 'yes') {              $field->{'graphable'} ne 'yes') {
Line 1268  sub plot_dropdown { Line 1282  sub plot_dropdown {
         }          }
         $Str .= '<option value="'.$field->{'name'}.'"';          $Str .= '<option value="'.$field->{'name'}.'"';
         if ($field->{'name'} eq $current) {          if ($field->{'name'} eq $current) {
             $Str .= ' selected ';              $Str .= ' selected="selected"';
         }          }
         $Str.= '>'.&mt($field->{'title'}).'</option>'."\n";          $title = &mt($field->{'long_title'});
           $title = &mt($field->{'title'}) if (!$title);
           $Str.= '>'.$title.'</option>'."\n";
     }      }
     $Str .= '</select>'."\n";      $Str .= '</select>'."\n";
     return $Str;      return $Str;

Removed from v.1.121  
changed lines
  Added in v.1.122.2.2


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