Diff for /loncom/interface/statistics/lonproblemstatistics.pm between versions 1.103 and 1.105

version 1.103, 2005/03/27 05:08:03 version 1.105, 2005/08/26 21:53:23
Line 50  Excel files, and plots. Line 50  Excel files, and plots.
 package Apache::lonproblemstatistics;  package Apache::lonproblemstatistics;
   
 use strict;  use strict;
 use Apache::lonnet();  use Apache::lonnet;
 use Apache::loncommon();  use Apache::loncommon();
 use Apache::lonhtmlcommon;  use Apache::lonhtmlcommon;
 use Apache::loncoursedata;  use Apache::loncoursedata;
Line 516  my %SelectedFields; Line 516  my %SelectedFields;
 sub parse_field_selection {  sub parse_field_selection {
     #      #
     # Pull out the defaults      # Pull out the defaults
     if (! defined($ENV{'form.fieldselections'})) {      if (! defined($env{'form.fieldselections'})) {
         $ENV{'form.fieldselections'} = [];          $env{'form.fieldselections'} = [];
         foreach my $field (@Fields) {          foreach my $field (@Fields) {
             next if ($field->{'selectable'} ne 'yes');              next if ($field->{'selectable'} ne 'yes');
             if ($field->{'defaultselected'} eq 'yes') {              if ($field->{'defaultselected'} eq 'yes') {
                 push(@{$ENV{'form.fieldselections'}},$field->{'name'});                  push(@{$env{'form.fieldselections'}},$field->{'name'});
             }              }
         }          }
     }      }
     #      #
     # Make sure the data we are plotting is there      # Make sure the data we are plotting is there
     my %NeededFields;      my %NeededFields;
     if (exists($ENV{'form.plot'}) && $ENV{'form.plot'} ne '' &&      if (exists($env{'form.plot'}) && $env{'form.plot'} ne '' &&
         $ENV{'form.plot'} ne 'none') {          $env{'form.plot'} ne 'none') {
         if ($ENV{'form.plot'} eq 'degrees') {          if ($env{'form.plot'} eq 'degrees') {
             $NeededFields{'deg_of_diff'}++;              $NeededFields{'deg_of_diff'}++;
             $NeededFields{'deg_of_disc'}++;              $NeededFields{'deg_of_disc'}++;
         } elsif ($ENV{'form.plot'} eq 'tries statistics') {          } elsif ($env{'form.plot'} eq 'tries statistics') {
             $NeededFields{'mean_tries'}++;              $NeededFields{'mean_tries'}++;
             $NeededFields{'std_tries'}++;              $NeededFields{'std_tries'}++;
             $NeededFields{'problem_num'}++;              $NeededFields{'problem_num'}++;
         } else {          } else {
             $NeededFields{$ENV{'form.plot'}}++;              $NeededFields{$env{'form.plot'}}++;
         }          }
     }      }
     #      #
     # This should not happen, but in case it does...      # This should not happen, but in case it does...
     if (ref($ENV{'form.fieldselections'}) ne 'ARRAY') {      if (ref($env{'form.fieldselections'}) ne 'ARRAY') {
         $ENV{'form.fieldselections'} = [$ENV{'form.fieldselections'}];          $env{'form.fieldselections'} = [$env{'form.fieldselections'}];
     }      }
     #      #
     # Set the field data and the selected fields (for easier checking)      # Set the field data and the selected fields (for easier checking)
Line 559  sub parse_field_selection { Line 559  sub parse_field_selection {
             $field->{'selected'} = 'yes';              $field->{'selected'} = 'yes';
             $SelectedFields{$field->{'name'}}++;              $SelectedFields{$field->{'name'}}++;
         }          }
         foreach my $selection (@{$ENV{'form.fieldselections'}}) {          foreach my $selection (@{$env{'form.fieldselections'}}) {
             if ($selection eq $field->{'name'} || $selection eq 'all') {              if ($selection eq $field->{'name'} || $selection eq 'all') {
                 $field->{'selected'} = 'yes';                  $field->{'selected'} = 'yes';
                 $SelectedFields{$field->{'name'}}++;                  $SelectedFields{$field->{'name'}}++;
Line 661  Main interface to problem statistics. Line 661  Main interface to problem statistics.
 my $navmap;  my $navmap;
 my @sequences;  my @sequences;
   
   sub clean_up {
       undef($navmap);
       undef(@sequences);
   }
   
 sub BuildProblemStatisticsPage {  sub BuildProblemStatisticsPage {
     my ($r,$c)=@_;      my ($r,$c)=@_;
     undef($navmap);      undef($navmap);
Line 686  sub BuildProblemStatisticsPage { Line 691  sub BuildProblemStatisticsPage {
     # Finally let the user know we are here      # Finally let the user know we are here
     my $interface = &CreateInterface($r);      my $interface = &CreateInterface($r);
     $r->print($interface);      $r->print($interface);
     $r->print('<input type="hidden" name="sortby" value="'.$ENV{'form.sortby'}.      $r->print('<input type="hidden" name="sortby" value="'.$env{'form.sortby'}.
               '" />');                '" />');
     #      #
     my @CacheButtonHTML =       my @CacheButtonHTML = 
Line 697  sub BuildProblemStatisticsPage { Line 702  sub BuildProblemStatisticsPage {
     }      }
     #      #
     $r->print($Str);      $r->print($Str);
     if (! exists($ENV{'form.firstrun'})) {      if (! exists($env{'form.firstrun'})) {
         $r->print('<h3>'.          $r->print('<h3>'.
                   &mt('Press "Generate Statistics" when you are ready.').                    &mt('Press "Generate Statistics" when you are ready.').
                   '</h3><p>'.                    '</h3><p>'.
Line 705  sub BuildProblemStatisticsPage { Line 710  sub BuildProblemStatisticsPage {
                       'for the first analysis.  Future analysis this session '.                        'for the first analysis.  Future analysis this session '.
                       ' will not have this delay.').                        ' will not have this delay.').
                   '</p>');                    '</p>');
    &clean_up();
         return;          return;
     }      }
     $r->rflush();      $r->rflush();
Line 718  sub BuildProblemStatisticsPage { Line 724  sub BuildProblemStatisticsPage {
     if (! ref($navmap)) {      if (! ref($navmap)) {
         $r->print('<h1>'.&mt('A course-wide error occured.').'</h1>'.          $r->print('<h1>'.&mt('A course-wide error occured.').'</h1>'.
                   '<h3>'.$navmap.'</h3>');                    '<h3>'.$navmap.'</h3>');
    &clean_up();
         return;          return;
     }      }
     if (exists($ENV{'form.Excel'})) {      if (exists($env{'form.Excel'})) {
         $r->print('<h4>'.          $r->print('<h4>'.
                   &Apache::lonstatistics::section_and_enrollment_description().                    &Apache::lonstatistics::section_and_enrollment_description().
                   '</h4>');                    '</h4>');
Line 748  sub BuildProblemStatisticsPage { Line 755  sub BuildProblemStatisticsPage {
             $r->rflush();              $r->rflush();
         }          }
         #          #
         my $sortby = $ENV{'form.sortby'};          my $sortby = $env{'form.sortby'};
         $sortby = 'container' if (! defined($sortby) || $sortby =~ /^\s*$/);          $sortby = 'container' if (! defined($sortby) || $sortby =~ /^\s*$/);
         my $plot = $ENV{'form.plot'};          my $plot = $env{'form.plot'};
         if ($plot eq '' || $plot eq 'none') {          if ($plot eq '' || $plot eq 'none') {
             undef($plot);              undef($plot);
         }          }
Line 765  sub BuildProblemStatisticsPage { Line 772  sub BuildProblemStatisticsPage {
             &output_sequence_statistics($r);              &output_sequence_statistics($r);
         }          }
     }      }
       &clean_up();
     return;      return;
 }  }
   
Line 825  sub output_html_stats { Line 833  sub output_html_stats {
     my ($r)=@_;      my ($r)=@_;
     &compute_all_statistics($r);      &compute_all_statistics($r);
     $r->print(&html_preamble());      $r->print(&html_preamble());
     &sort_data($ENV{'form.sortby'});      &sort_data($env{'form.sortby'});
     #      #
     my $count=0;      my $count=0;
     foreach my $data (@StatsArray) {      foreach my $data (@StatsArray) {
Line 847  sub output_html_stats { Line 855  sub output_html_stats {
 sub html_preamble {  sub html_preamble {
     my $Str='';      my $Str='';
     $Str .= "<h2>".      $Str .= "<h2>".
         $ENV{'course.'.$ENV{'request.course.id'}.'.description'}.          $env{'course.'.$env{'request.course.id'}.'.description'}.
         "</h2>\n";          "</h2>\n";
     my ($starttime,$endtime) = &Apache::lonstathelpers::get_time_limits();      my ($starttime,$endtime) = &Apache::lonstathelpers::get_time_limits();
     if (defined($starttime) || defined($endtime)) {      if (defined($starttime) || defined($endtime)) {
Line 971  sub sequence_html_output { Line 979  sub sequence_html_output {
 sub make_plot {  sub make_plot {
     my ($r,$plot) = @_;      my ($r,$plot) = @_;
     &compute_all_statistics($r);      &compute_all_statistics($r);
     &sort_data($ENV{'form.sortby'});      &sort_data($env{'form.sortby'});
     if ($plot eq 'degrees') {      if ($plot eq 'degrees') {
         &degrees_plot($r);          &degrees_plot($r);
     } elsif ($plot eq 'tries statistics') {      } elsif ($plot eq 'tries statistics') {
Line 1225  END Line 1233  END
 sub plot_dropdown {  sub plot_dropdown {
     my $current = '';      my $current = '';
     #      #
     if (defined($ENV{'form.plot'})) {      if (defined($env{'form.plot'})) {
         $current = $ENV{'form.plot'};          $current = $env{'form.plot'};
     }      }
     #      #
     my @Additional_Plots = (      my @Additional_Plots = (
Line 1279  sub Excel_output { Line 1287  sub Excel_output {
     return if (! defined($excel_workbook));      return if (! defined($excel_workbook));
     #      #
     # Add a worksheet      # Add a worksheet
     my $sheetname = $ENV{'course.'.$ENV{'request.course.id'}.'.description'};      my $sheetname = $env{'course.'.$env{'request.course.id'}.'.description'};
     if (length($sheetname) > 31) {      if (length($sheetname) > 31) {
         $sheetname = substr($sheetname,0,31);          $sheetname = substr($sheetname,0,31);
     }      }
Line 1292  sub Excel_output { Line 1300  sub Excel_output {
     #      #
     # Put the course description in the header      # Put the course description in the header
     $excel_sheet->write($rows_output,$cols_output++,      $excel_sheet->write($rows_output,$cols_output++,
                    $ENV{'course.'.$ENV{'request.course.id'}.'.description'},                     $env{'course.'.$env{'request.course.id'}.'.description'},
                         $format->{'h1'});                          $format->{'h1'});
     $cols_output += 3;      $cols_output += 3;
     #      #
Line 1539  sub get_statistics { Line 1547  sub get_statistics {
     #      #
     my ($starttime,$endtime) = &Apache::lonstathelpers::get_time_limits();      my ($starttime,$endtime) = &Apache::lonstathelpers::get_time_limits();
     my $symb = $resource->symb;      my $symb = $resource->symb;
     my $courseid = $ENV{'request.course.id'};      my $courseid = $env{'request.course.id'};
     #      #
     my $data = &Apache::loncoursedata::get_problem_statistics      my $data = &Apache::loncoursedata::get_problem_statistics
                         ([&Apache::lonstatistics::get_selected_sections()],                          ([&Apache::lonstatistics::get_selected_sections()],
Line 1564  sub get_statistics { Line 1572  sub get_statistics {
         my $sections = '"'.join(' ',@Sections).'"';          my $sections = '"'.join(' ',@Sections).'"';
         $sections =~ s/&+/_/g;  # Ensure no special characters          $sections =~ s/&+/_/g;  # Ensure no special characters
         $data->{'sections'}=$sections;          $data->{'sections'}=$sections;
         $data->{'course'} = $ENV{'request.course.id'};          $data->{'course'} = $env{'request.course.id'};
         my $urlres=(&Apache::lonnet::decode_symb($resource->symb))[2];          my $urlres=(&Apache::lonnet::decode_symb($resource->symb))[2];
         $data->{'urlres'}=$urlres;          $data->{'urlres'}=$urlres;
         my %storestats =           my %storestats = 

Removed from v.1.103  
changed lines
  Added in v.1.105


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