Diff for /loncom/interface/lonstatistics.pm between versions 1.80 and 1.112

version 1.80, 2003/08/29 21:11:25 version 1.112, 2005/01/05 20:34:20
Line 38  lonstatistics Line 38  lonstatistics
   
 Main handler for statistics and chart.  Main handler for statistics and chart.
   
 =head1 PACKAGES USED  
   
     use strict;  
     use Apache::Constants qw(:common :http);  
     use Apache::lonnet();  
     use Apache::lonhomework;  
     use Apache::loncommon;  
     use Apache::loncoursedata;  
     use Apache::lonhtmlcommon;  
     use Apache::lonproblemanalysis;  
     use Apache::lonproblemstatistics;  
     use Apache::lonstudentassessment;  
     use Apache::lonpercentage;  
     use Apache::lonmysql;  
 =over 4  =over 4
   
 =cut  =cut
Line 71  use vars qw( Line 57  use vars qw(
     $top_map       $top_map 
     @Sequences       @Sequences 
     @SelectedMaps      @SelectedMaps
     @Assessments);      @Assessments
       $enrollment_status);
   
 use Apache::lonnet();  use Apache::lonnet();
 use Apache::lonhomework;  use Apache::lonhomework;
 use Apache::loncommon;  use Apache::loncommon;
 use Apache::loncoursedata;  use Apache::loncoursedata;
 use Apache::lonhtmlcommon;  use Apache::lonhtmlcommon;
   use Apache::lonmysql;
   use Apache::lonlocal;
   use Time::HiRes;
   #
   # Statistics Packages
 use Apache::lonproblemanalysis();  use Apache::lonproblemanalysis();
   use Apache::lonsubmissiontimeanalysis();
   use Apache::loncorrectproblemplot();
 use Apache::lonproblemstatistics();  use Apache::lonproblemstatistics();
 use Apache::lonstudentassessment();  use Apache::lonstudentassessment();
 use Apache::lonpercentage;  use Apache::lonpercentage;
 use Apache::lonmysql;  use Apache::lonstudentsubmissions();
 use Time::HiRes;  use Apache::lonsurveyreports();
   
 #######################################################  #######################################################
 #######################################################  #######################################################
Line 235  sub PrepareClasslist { Line 229  sub PrepareClasslist {
     }      }
     #      #
     # Set up %StudentData      # Set up %StudentData
     @StudentDataOrder = qw/fullname username domain id section status/;      @StudentDataOrder = qw/fullname username domain id section status comments/;
     foreach my $field (@StudentDataOrder) {      foreach my $field (@StudentDataOrder) {
         $StudentData{$field}->{'title'} = $field;          $StudentData{$field}->{'title'} = &mt($field);
         $StudentData{$field}->{'base_width'} = length($field);          $StudentData{$field}->{'base_width'} = length(&mt($field));
         $StudentData{$field}->{'width'} =           $StudentData{$field}->{'width'} = 
                                $StudentData{$field}->{'base_width'};                                 $StudentData{$field}->{'base_width'};
     }      }
     #      #
     # get the status requested      # get the status requested
     my $requested_status = 'Active';      $enrollment_status = 'Active';
     $requested_status = $ENV{'form.Status'} if (exists($ENV{'form.Status'}));      $enrollment_status = $ENV{'form.Status'} if (exists($ENV{'form.Status'}));
     #      #
     # Process the classlist      # Process the classlist
     while (my ($student,$student_data) = each (%$classlist)) {      while (my ($student,$student_data) = each (%$classlist)) {
Line 275  sub PrepareClasslist { Line 269  sub PrepareClasslist {
         foreach my $sect (@SelectedSections) {          foreach my $sect (@SelectedSections) {
             if ( (($sect eq 'all') ||               if ( (($sect eq 'all') || 
                   ($section eq $sect)) &&                    ($section eq $sect)) &&
                  (($studenthash->{'status'} eq $requested_status) ||                    (($studenthash->{'status'} eq $enrollment_status) || 
                   ($requested_status eq 'Any'))                     ($enrollment_status eq 'Any')) 
                  ){                   ){
                 push (@Students,$studenthash);                  push (@Students,$studenthash);
                 last;                  last;
Line 478  assessments. Line 472  assessments.
 #######################################################  #######################################################
 #######################################################  #######################################################
 sub Sequences_with_Assess {  sub Sequences_with_Assess {
       my ($mode) = @_;
       $mode = 'selected' if (! defined($mode));
     my @Sequences_to_Show;      my @Sequences_to_Show;
     foreach my $map_symb (@SelectedMaps) {      foreach my $sequence (@Sequences) {
         foreach my $sequence (@Sequences) {          next if ($sequence->{'num_assess'} < 1);
             next if ($sequence->{'symb'} ne $map_symb && $map_symb ne 'all');          if ($mode eq 'all') {
             next if ($sequence->{'num_assess'} < 1);  
             push (@Sequences_to_Show,$sequence);              push (@Sequences_to_Show,$sequence);
           } elsif ($mode eq 'selected') {
               foreach my $map_symb (@SelectedMaps) {
                   if ($sequence->{'symb'} eq $map_symb || $map_symb eq 'all'){
                       push (@Sequences_to_Show,$sequence);
                       last; # Only put it in once
                   }
               }
         }          }
   
     }      }
     return @Sequences_to_Show;      return @Sequences_to_Show;
 }  }
Line 513  sub PrepareCourseData { Line 516  sub PrepareCourseData {
     $top_map = $top if (ref($top));      $top_map = $top if (ref($top));
     @Sequences = @{$sequences} if (ref($sequences) eq 'ARRAY');      @Sequences = @{$sequences} if (ref($sequences) eq 'ARRAY');
     @Assessments = @{$assessments} if (ref($assessments) eq 'ARRAY');      @Assessments = @{$assessments} if (ref($assessments) eq 'ARRAY');
     #  
     # Compute column widths  
     foreach my $seq (@Sequences) {  
         my $name_length = length($seq->{'title'});  
         my $num_parts = $seq->{'num_assess_parts'};  
         #  
         # Use 3 digits for each the sum and total, which means 7 total...  
         my $num_col = $num_parts+7;  
         if ($num_col < $name_length) {  
             $num_col = $name_length;  
         }  
         $seq->{'base_width'} = $name_length;  
         $seq->{'width'} = $num_col;  
     }  
     return;      return;
 }  }
   
Line 797  sub SectionSelect { Line 786  sub SectionSelect {
     return $Str;      return $Str;
 }  }
   
 #######################################################  ###############################################
 #######################################################  ###############################################
   
 =pod  =pod 
   
 =item &CreateAndParseOutputSelector()  =item &Gather_Student_Data()
   
 Construct a selection list of options for output and parse output selections.  Ensures all student data is up to date.
   
 =cut  =cut
   
 #######################################################  ###############################################
 #######################################################  ###############################################
 sub OutputDescriptions {  sub Gather_Student_Data {
     my (@OutputOptions) = @_;      my ($r) = @_;
     my $Str = '';      my $c = $r->connection();
     $Str .= "<h2>Output Modes</h2>\n";  
     $Str .= "<dl>\n";  
     foreach my $outputmode (@OutputOptions) {  
  $Str .="    <dt>".$outputmode->{'name'}."</dt>\n";  
  $Str .="        <dd>".$outputmode->{'description'}."</dd>\n";  
     }  
     $Str .= "</dl>\n";  
     return $Str;  
 }  
   
 sub CreateAndParseOutputSelector {  
     my ($elementname,$default,@OutputOptions) = @_;  
     my $output_mode;  
     my $show;  
     my $Str = '';  
     #      #
     # Format for output options is 'mode, restrictions';      &Apache::loncoursedata::clear_internal_caches();
     my $selected = $default;  
     if (exists($ENV{'form.'.$elementname})) {  
         if (ref($ENV{'form.'.$elementname} eq 'ARRAY')) {  
             $selected = $ENV{'form.'.$elementname}->[0];  
         } else {  
             $selected = $ENV{'form.'.$elementname};  
         }  
     }  
     #      #
     # Set package variables describing output mode      my @Sequences = &Apache::lonstatistics::Sequences_with_Assess();
     $output_mode = 'html';  
     $show        = 'all';  
     foreach my $option (@OutputOptions) {  
         next if ($option->{'value'} ne $selected);  
         $output_mode = $option->{'mode'};  
         $show        = $option->{'show'};  
     }  
     #      #
     # Build the form element      my @Students = @Apache::lonstatistics::Students;
     $Str = qq/<select size="5" name="$elementname">/;      #
     foreach my $option (@OutputOptions) {      # Open the progress window
         if (exists($option->{'special'}) &&       my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin
             $option->{'special'} =~ /do not show/) {          ($r,'Statistics Compilation Status',
             next;           'Statistics Compilation Progress', scalar(@Students));
         }      #
         $Str .= "\n".'    <option value="'.$option->{'value'}.'"';      while (my $student = shift @Students) {
         $Str .= " selected " if ($option->{'value'} eq $selected);          return if ($c->aborted());
         $Str .= ">".$option->{'name'}."<\/option>";          my ($status,undef) = &Apache::loncoursedata::ensure_current_data
               ($student->{'username'},$student->{'domain'},
                $ENV{'request.course.id'});
           &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
                                                    &mt('last student'));
     }      }
     $Str .= "\n</select>";      &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
     return ($Str,$output_mode,$show);      $r->rflush();
 }  }
   
 ###############################################  ###############################################
Line 868  sub CreateAndParseOutputSelector { Line 831  sub CreateAndParseOutputSelector {
   
 =pod   =pod 
   
 =item &Gather_Student_Data()  =item &Gather_Full_Student_Data()
   
 Ensures all student data is up to date.  Ensures all student data is up to date.
   
Line 876  Ensures all student data is up to date. Line 839  Ensures all student data is up to date.
   
 ###############################################  ###############################################
 ###############################################  ###############################################
 sub Gather_Student_Data {  sub Gather_Full_Student_Data {
     my ($r) = @_;      my ($r,$formname,$inputname) = @_;
       my $status_type;
       if (defined($formname)) {
           $status_type = 'inline';
       } else {
           $status_type = 'popup';
       }
     my $c = $r->connection();      my $c = $r->connection();
     #      #
     my @Sequences = &Apache::lonstatistics::Sequences_with_Assess();      &Apache::loncoursedata::clear_internal_caches();
     #      #
     my @Students = @Apache::lonstatistics::Students;      my @Students = @Apache::lonstatistics::Students;
     #      #
     # Open the progress window      # Open the progress window
     my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin      my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin
         ($r,'Statistics Compilation Status',          ($r,&mt('Student Data Compilation Status'),
          'Statistics Compilation Progress', scalar(@Students));           &mt('Student Data Compilation Progress'), scalar(@Students),
            $status_type,undef,$formname,$inputname);
     #      #
     while (my $student = shift @Students) {      while (my $student = shift @Students) {
         return if ($c->aborted());          return if ($c->aborted());
         my ($status,undef) = &Apache::loncoursedata::ensure_current_data          my ($status,undef) = &Apache::loncoursedata::ensure_current_full_data
             ($student->{'username'},$student->{'domain'},              ($student->{'username'},$student->{'domain'},
              $ENV{'request.course.id'});               $ENV{'request.course.id'});
         &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,          &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
                                                  'last student');                                                   &mt('last student'));
     }      }
     &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);      &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
     $r->rflush();      $r->rflush();
Line 905  sub Gather_Student_Data { Line 875  sub Gather_Student_Data {
 ##################################################  ##################################################
 sub DisplayClasslist {  sub DisplayClasslist {
     my ($r)=@_;      my ($r)=@_;
       &Apache::lonhtmlcommon::add_breadcrumb
           ({text=>'Select One Student'});
       #
       # Output some of the standard interface components
       my $Str;
       $Str .= &Apache::lonhtmlcommon::breadcrumbs(undef,'Select One Student');
       $Str .= '<p><table cellspacing="5">'."\n";
       $Str .= '<tr>';
       $Str .= '<th align="center"><b>'.&mt('Sections').'</b></th>';
       $Str .= '<th align="center"><b>'.&mt('Enrollment Status').'</b></th>';
       $Str .= '</tr>'.$/;
       $Str .= '<tr>';
       $Str .= '<td>'.
           &Apache::lonstatistics::SectionSelect('Section','multiple',5).
           '</td>';
       $Str .= '<td>'.
           &Apache::lonhtmlcommon::StatusOptions(undef,undef,5).
           '</td>';
       
       $Str .= '</tr>'.$/;
       $Str .= '</table></p>';
       $Str .= '<input type="submit" name="selectstudent" value="'.
           &mt('Update Display').'" />';
       $r->print($Str);
       $r->rflush();
     #      #
     my @Fields = ('fullname','username','domain','id','section');      my @Fields = ('fullname','username','domain','id','section','status');
     #      #
     my $Str='';      $Str = '';
     if (! @Students) {      if (! @Students) {
         if ($SelectedSections[0] eq 'all') {           if ($SelectedSections[0] eq 'all') { 
             if (lc($ENV{'form.Status'}) eq 'any') {              if (lc($ENV{'form.Status'}) eq 'any') {
                 $Str .= '<h2>There are no students in the course.</h2>';                  $Str .= '<h2>'.
                       &mt('There are no students in the course.').
                       '</h2>';
             } elsif (lc($ENV{'form.Status'}) eq 'active') {              } elsif (lc($ENV{'form.Status'}) eq 'active') {
                 $Str .= '<h2>There are no currently enrolled students in '.                  $Str .= '<h2>'.
                     'the course.</h2>';                  &mt('There are no currently enrolled students in the course.').
                       '</h2>';
             } elsif (lc($ENV{'form.Status'}) eq 'expired') {              } elsif (lc($ENV{'form.Status'}) eq 'expired') {
                 $Str .= '<h2>There are no previously enrolled '.                  $Str .= '<h2>'.
                     'students in the course.</h2>';                      &mt('There are no previously enrolled students in the course.').
                           '</h2>';
             }              }
         } else {           } else { 
             my $sections;              my $sections;
             if (@SelectedSections == 1) {  
                 $sections = 'section '.$SelectedSections[0];  
             } elsif (@SelectedSections > 2) {  
                 $sections = 'sections '.join(', ',@SelectedSections);  
                 $sections =~ s/, ([^,])*$/, and $1/;  
             } else {  
                 $sections = 'sections '.join(' and ',@SelectedSections);  
             }  
             if (lc($ENV{'form.Status'}) eq 'any') {              if (lc($ENV{'form.Status'}) eq 'any') {
                 $Str .= '<h2>There are no students in '.$sections.'.</h2>';                  $Str .= '<h2>'.
                       &mt('There are no students in the selected sections.').
                       '</h2>';
             } elsif (lc($ENV{'form.Status'}) eq 'active') {              } elsif (lc($ENV{'form.Status'}) eq 'active') {
                 $Str .= '<h2>There are no currently enrolled students '.                  $Str .= '<h2>'.
                     'in '.$sections.'.</h2>';                      &mt('There are no currently enrolled students in the selected sections.').
                       '</h2>';
             } elsif (lc($ENV{'form.Status'}) eq 'expired') {              } elsif (lc($ENV{'form.Status'}) eq 'expired') {
                 $Str .= '<h2>There are no previously enrolled students '.                  $Str .= '<h2>'.
                     'in '.$sections.'.</h2>';                      &mt('There are no previously enrolled students in the selected sections.').
                       '</h2>';
             }              }
         }          }
         $Str.= '<a href="/adm/statistics?reportSelected=student_assessment">'.          $Str.= '<a href="/adm/statistics?reportSelected=student_assessment">'.
             'Return to the chart.</a>';              &mt('Click here to return to the chart').'</a>';
         $r->print($Str);          $r->print($Str);
         $r->rflush();          $r->rflush();
         return;          return;
Line 952  sub DisplayClasslist { Line 947  sub DisplayClasslist {
     $Str .= '<table border="0"><tr><td bgcolor="#777777">'."\n";      $Str .= '<table border="0"><tr><td bgcolor="#777777">'."\n";
     $Str .= '<table border="0" cellpadding="3"><tr bgcolor="#e6ffff">'."\n";      $Str .= '<table border="0" cellpadding="3"><tr bgcolor="#e6ffff">'."\n";
     foreach my $field (@Fields) {      foreach my $field (@Fields) {
         $Str .= '<th><a href="/adm/statistics?reportSelected=classlist&sort='.$field.'">'.$field.          $Str .= '<th><a href="/adm/statistics?'.
               'reportSelected=student_assessment&'.
               'selectstudent=1&'.
               'sort='.$field.'">'.&mt($field).
             '</a></th>';              '</a></th>';
     }      }
     $Str .= '</tr>'."\n";      $Str .= '</tr>'."\n";
Line 977  sub DisplayClasslist { Line 975  sub DisplayClasslist {
                 $Str .= &Apache::lonnet::escape($sname).'">';                  $Str .= &Apache::lonnet::escape($sname).'">';
                 $Str .= $student->{$field}.'&nbsp';                  $Str .= $student->{$field}.'&nbsp';
                 $Str .= '</a>';                  $Str .= '</a>';
               } elsif ($field eq 'status') {
                   $Str .= &mt($student->{$field});
             } else {              } else {
                 $Str .= $student->{$field};                  $Str .= $student->{$field};
             }              }
Line 995  sub DisplayClasslist { Line 995  sub DisplayClasslist {
 ##############################################  ##############################################
 ##############################################  ##############################################
 sub CreateMainMenu {  sub CreateMainMenu {
     my ($status,$reports,$current)=@_;  
     #      #
     my $Str = '';      # Define menu data
       my @reports = ({ internal_name => 'problem_statistics',
                        name => &mt('Overall Problem Statistics'),
                        short_description => 
       &mt('Student performance statistics on all problems.'),
                    },
                      { internal_name => 'problem_analysis',
                        name => &mt('Detailed Problem Analysis'),
                        short_description => 
       &mt('Detailed statistics and graphs of student performance on problems.'),
                    },
                      { internal_name => 'submissiontime_analysis',
                        name => &mt('Submission Time Plots'),
                        short_description => 
       &mt('Display and analysis of submission times on assessments.'),
                    },
                      { internal_name => 'student_submission_reports',
                        name => &mt('Student Submission Reports'),
                        short_description => 
       &mt('Prepare reports of student submissions.'),
                    },
                      { internal_name => 'survey_reports',
                        name => &mt('Survey Reports'),
                        short_description => 
       &mt('Prepare reports on survey results.'),
                    },
                      { internal_name => 'correct_problems_plot',
                        name => &mt('Correct Problems Plot'),
                        short_description => 
       &mt('Display a histogram of student performance in the course.'),
                    },
   #                   { internal_name => 'student_assessment',
   #                     name => &mt('Problem Status Chart'),
   #                     short_description => 
   #    &mt('Brief view of each students performance in course.'),
   #                 },
                      # 'percentage'  => 'Correct-problems Plot',
                      # 'activitylog' => 'Activity Log',
                      );
     #      #
     $Str  = '<input type="hidden" name="reportSelected" value="'.$current.'">';      # Create the menu
 #    $Str .= '<table border="0"><tbody><tr>'."\n";      my $Str;
 #    $Str .= '<td align="center"><b>Report:</b></td>'."\n";      $Str .= '<h2>'.&mt('Please select a report to generate').'</h2>';
 #    $Str .= '<td align="center">';      foreach my $reportdata (@reports) {
 #    $Str .= '<select name="reportSelected" '.          $Str .='    <h3><a href="/adm/statistics?reportSelected='.
 #        'onchange="document.Statistics.submit()">'."\n";              $reportdata->{'internal_name'}.'" >'.
 #    foreach (sort(keys(%$reports))) {              $reportdata->{'name'}."</a></h3>\n";
 #        $Str .= '<option value="'.$_.'"';          $Str .= '    '.('&nbsp;'x8).$reportdata->{'short_description'}.
 #        if($current eq $_) {              "\n";
 #            $Str .= ' selected';      }
 #        }      $Str .="</dl>\n";
 #        $Str .= '>'.$reports->{$_}.'</option>'."\n";  
 #    }  
 #    $Str .= '</select></td>'."\n";  
 #    #  
 #    $Str .= '<td>'.('&nbsp;'x30).'</td>';  
 #    $Str .= '<td align="center">'.  
 #        '<input type="submit" name="ClearCache" value="Clear Caches" />'.  
 #            "</td>\n";  
 #    $Str .= '</tr></tbody></table>'."\n";  
 #    $Str .= '<hr>'."\n";  
     #      #
     return $Str;      return $Str;
 }  }
Line 1050  sub handler { Line 1077  sub handler {
         }          }
     }      }
     #      #
     # Set document type for header only  
     if($r->header_only) {  
         if ($ENV{'browser.mathml'}) {  
             $r->content_type('text/xml');  
         } else {  
             $r->content_type('text/html');  
         }  
         &Apache::loncommon::no_cache($r);  
         $r->send_http_header;  
         return OK;  
     }  
     #  
     # Send the header      # Send the header
     $r->content_type('text/html');      &Apache::loncommon::no_cache($r);
       &Apache::loncommon::content_type($r,'text/html');
     $r->send_http_header;      $r->send_http_header;
       if ($r->header_only) { return OK; }
     #      #
     # Extract form elements from query string      # Extract form elements from query string
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                             ['sort','reportSelected',                                              ['sort','reportSelected',
                                              'SelectedStudent']);                                               'SelectedStudent']);
     if (! exists($ENV{'form.reportSelected'})) {  
         $ENV{'form.reportSelected'} = 'student_assessment';  
     }  
     #      #
     # Give the LON-CAPA page header      # Give the LON-CAPA page header
     $r->print(&Apache::lonhtmlcommon::Title('Course Statistics and Charts'));      my $style = <<ENDSTYLE;
     $r->rflush();  <style type="text/css">
     #      ul.sub_studentans { list-style-type: none }
     if (! &Apache::lonmysql::verify_sql_connection()) {      ul.sub_correctans { list-style-type: none }
         my $serveradmin = $r->dir_config('lonAdmEMail');      tr.even           { background-color: \#CCCCCC }
         $r->print(<<END);      td.essay          { border: 1px solid gray; }
 <h2><font color="Red">Unable to connect to database!</font></h2>  </style>
 <p>  ENDSTYLE
 Please notify the server administrator <b>$serveradmin</b>.      $r->print('<html><head><title>'.
 </p><p>                &mt('Course Statistics and Charts').
 Course Statistics and Charts cannot be retrieved until the database is                '</title>'.$style.
 restarted.  Your data is intact but cannot be displayed at this time.                "</head>\n".
 </p>                &Apache::loncommon::bodytag('Course Statistics and Charts'));
 </body>  
 </html>  
 END  
         return;  
     }  
     #  
     # Clean out the caches  
     if (exists($ENV{'form.ClearCache'})) {  
         &Apache::loncoursedata::delete_caches($ENV{'requres.course.id'});  
     }  
     #  
     # Set up the statistics and chart environment  
     &PrepareClasslist();  
     &PrepareCourseData($r);  
     #  
     # Begin form output  
     $r->print('<form name="Statistics" ');  
     $r->print('method="post" action="/adm/statistics">');  
     #  
     # Print main menu  
     my %reports = ('classlist'          => 'Class list',  
                    'problem_statistics' => 'Problem Statistics',  
                    'student_assessment' => 'Problem Status Chart',  
 #                   'percentage'         => 'Correct-problems Plot',  
 #                   'option_response'    => 'Option Response Analysis',  
 #                   'activitylog'        => 'Activity Log',  
                    );  
     $r->print(&CreateMainMenu($ENV{'form.status'},  
                               \%reports,$ENV{'form.reportSelected'}));  
     $r->rflush();      $r->rflush();
       # 
       # Either print out a menu for them or send them to a report
       &Apache::lonhtmlcommon::clear_breadcrumbs();
       &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/statistics',
                                               title=>'Statistics',
                                               text =>'Statistics',
                                               faq=>139,
                                               bug=>'Statistics and Charts'});
       if (! exists($ENV{'form.reportSelected'}) || 
           $ENV{'form.reportSelected'} eq '') {
           $r->print(&Apache::lonhtmlcommon::breadcrumbs
                     (undef,&mt('Statistics Main Page')).
                     &CreateMainMenu());
       } else {
     #      #
     my $GoToPage = $ENV{'form.reportSelected'};          if (! &Apache::lonmysql::verify_sql_connection()) {
     if($GoToPage eq 'activitylog') {              my $serveradmin = $r->dir_config('lonAdmEMail');
               $r->print('<h2><font color="Red">'.
                         &mt('Unable to connect to database!').
                         '</font></h2>');
               $r->print('<p>'.
                         &mt('Please notify the server administrator ').
                         '<b>'.$serveradmin.'</b></p>');
               $r->print('<p>'.
                         &mt('Course Statistics and Charts cannot be '.
                             'retrieved until the database is restarted.  '.
                             'Your data is intact but cannot be displayed '.
                             'at this time.').'</p>');
               $r->print('</body></html>');
               return;
           }
           #
           # Clean out the caches
           if (exists($ENV{'form.ClearCache'})) {
               &Apache::loncoursedata::delete_caches($ENV{'requres.course.id'});
           }
           #
           # Begin form output
           $r->print('<form name="Statistics" ');
           $r->print('method="post" action="/adm/statistics">');
           $r->rflush();
           #
           my $GoToPage = $ENV{'form.reportSelected'};
           #
           # Set up the statistics and chart environment
           &PrepareCourseData($r);
           #
           $r->print('<input type="hidden" name="reportSelected" value="'.
                     $GoToPage.'">');
           if($GoToPage eq 'activitylog') {
 #        &Apache::lonproblemstatistics::Activity();  #        &Apache::lonproblemstatistics::Activity();
     } elsif($GoToPage eq 'problem_statistics') {          } elsif($GoToPage eq 'problem_statistics') {
         &Apache::lonproblemstatistics::BuildProblemStatisticsPage($r,$c);              &Apache::lonhtmlcommon::add_breadcrumb
     } elsif($GoToPage eq 'option_response') {                  ({href=>'/adm/statistics?reportselected=problem_statistics',
 #        &Apache::lonproblemanalysis::BuildProblemAnalysisPage($r,$c);                    text=>'Overall Problem Statistics'});
     } elsif($GoToPage eq 'student_assessment') {              &Apache::lonproblemstatistics::BuildProblemStatisticsPage($r,$c);
         &Apache::lonstudentassessment::BuildStudentAssessmentPage($r,$c);          } elsif($GoToPage eq 'problem_analysis') {
     } elsif($GoToPage eq 'DoDiffGraph' || $GoToPage eq 'PercentWrongGraph') {              &Apache::lonhtmlcommon::add_breadcrumb
 #        &Apache::lonproblemstatistics::BuildGraphicChart($r,$c);                  ({href=>'/adm/statistics?reportselected=problem_analysis',
     } elsif($GoToPage eq 'Correct-problems Plot') {                    text=>'Detailed Problem Analysis'});
 # &Apache::lonpercentage::BuildPercentageGraph($r,$c);              &Apache::lonproblemanalysis::BuildProblemAnalysisPage($r,$c);
           } elsif($GoToPage eq 'submissiontime_analysis') {
               &Apache::lonhtmlcommon::add_breadcrumb
                   ({href=>
                         '/adm/statistics?reportselected=submissiontime_analysis',
                         text=>'Submission Time Plots'});
               &Apache::lonsubmissiontimeanalysis::BuildSubmissionTimePage($r,$c);
           } elsif($GoToPage eq 'student_submission_reports') {
               &Apache::lonhtmlcommon::add_breadcrumb
                   ({href=>
                     '/adm/statistics?reportselected=student_submission_reports',
                     text=>'Student Submission Reports'});
               &Apache::lonstudentsubmissions::BuildStudentSubmissionsPage($r,$c);
           } elsif($GoToPage eq 'survey_reports') {
               &Apache::lonhtmlcommon::add_breadcrumb
                   ({href=>
                     '/adm/statistics?reportselected=survey_reports',
                     text=>'Survey Reports'});
               &Apache::lonsurveyreports::BuildSurveyReportsPage($r,$c);
           } elsif($GoToPage eq 'correct_problems_plot') {
               &Apache::lonhtmlcommon::add_breadcrumb
                   ({href=>'/adm/statistics?reportselected=correct_problems_plot',
                     text=>'Correct Problems Plot'});
               &Apache::loncorrectproblemplot::BuildCorrectProblemsPage($r,$c);
           } elsif($GoToPage eq 'student_assessment') {
               &Apache::lonhtmlcommon::clear_breadcrumbs();
               &Apache::lonhtmlcommon::add_breadcrumb
                   ({href=>'/adm/statistics?reportselected=student_assessment',
                     text=>'Chart'});
               &Apache::lonstudentassessment::BuildStudentAssessmentPage($r,$c);
           }
           #
           $r->print("</form>\n");
     }      }
     #  
     $r->print("</form>\n");  
     $r->print("</body>\n</html>\n");      $r->print("</body>\n</html>\n");
     $r->rflush();      $r->rflush();
     #      #

Removed from v.1.80  
changed lines
  Added in v.1.112


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