Diff for /loncom/interface/lonstatistics.pm between versions 1.70 and 1.108

version 1.70, 2003/05/13 14:30:26 version 1.108, 2004/07/15 21:08:45
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 206  upon the calling context. Line 200  upon the calling context.
 #######################################################  #######################################################
 #######################################################  #######################################################
 sub PrepareClasslist {  sub PrepareClasslist {
     my $r = shift;  
     my %Sections;      my %Sections;
     &clear_classlist_variables();      &clear_classlist_variables();
     #      #
Line 236  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 276  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 301  sub PrepareClasslist { Line 294  sub PrepareClasslist {
     @Students = @TmpStudents;      @Students = @TmpStudents;
     #       # 
     # Now deal with that current student thing....      # Now deal with that current student thing....
     if (exists($ENV{'form.StudentAssessmentStudent'})) {      $curr_student = undef;
       if (exists($ENV{'form.SelectedStudent'})) {
         my ($current_uname,$current_dom) =           my ($current_uname,$current_dom) = 
             split(':',$ENV{'form.StudentAssessmentStudent'});              split(':',$ENV{'form.SelectedStudent'});
         my $i;          my $i;
         for ($i = 0; $i<=$#Students; $i++) {          for ($i = 0; $i<=$#Students; $i++) {
             next if (($Students[$i]->{'username'} ne $current_uname) ||               next if (($Students[$i]->{'username'} ne $current_uname) || 
Line 311  sub PrepareClasslist { Line 305  sub PrepareClasslist {
             $curr_student = $Students[$i];              $curr_student = $Students[$i];
             last; # If we get here, we have our student.              last; # If we get here, we have our student.
         }          }
         if ($i == 0) {          if (defined($curr_student)) {
             $prev_student = 'none';              if ($i == 0) {
         } else {                  $prev_student = undef;
             $prev_student = $Students[$i-1];              } else {
         }                  $prev_student = $Students[$i-1];
         if ($i == $#Students) {              }
             $next_student = 'none';              if ($i == $#Students) {
         } else {                  $next_student = undef;
             $next_student = $Students[$i+1];              } else {
                   $next_student = $Students[$i+1];
               }
         }          }
     }      }
     #      #
Line 330  sub PrepareClasslist { Line 326  sub PrepareClasslist {
             @SelectedStudentData = ($ENV{'form.StudentData'});              @SelectedStudentData = ($ENV{'form.StudentData'});
         }          }
     } else {      } else {
         @SelectedStudentData = ('fullname');          @SelectedStudentData = ('username');
     }      }
     foreach (@SelectedStudentData) {      foreach (@SelectedStudentData) {
         if ($_ eq 'all') {          if ($_ eq 'all') {
Line 342  sub PrepareClasslist { Line 338  sub PrepareClasslist {
     return;      return;
 }  }
   
   
   #######################################################
   #######################################################
   
   =pod
   
   =item get_students
   
   Returns a list of the selected students
   
   =cut
   
   #######################################################
   #######################################################
   sub get_students {
       if (! @Students) {
           &PrepareClasslist()
       }
       return @Students;
   }
   
 #######################################################  #######################################################
 #######################################################  #######################################################
   
Line 357  selected student. Line 374  selected student.
 #######################################################  #######################################################
 #######################################################  #######################################################
 sub current_student {   sub current_student { 
     if (defined($curr_student)) {      return $curr_student;
         return $curr_student;  
     } else {  
         return 'All Students';  
     }  
 }  }
   
 #######################################################  #######################################################
Line 379  in the list of students.  Or something. Line 392  in the list of students.  Or something.
 #######################################################  #######################################################
 #######################################################  #######################################################
 sub previous_student {   sub previous_student { 
     if (defined($prev_student)) {      return $prev_student;
         return $prev_student;  
     } else {  
         return 'No Student Selected';  
     }  
 }  }
   
 #######################################################  #######################################################
Line 401  to be viewed. Line 410  to be viewed.
 #######################################################  #######################################################
 #######################################################  #######################################################
 sub next_student {   sub next_student { 
     if (defined($next_student)) {      return $next_student;
         return $next_student;  
     } else {  
         return 'No Student Selected';  
     }  
 }  }
   
 #######################################################  #######################################################
Line 467  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 502  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'};  
         #  
         # The number of columns needed for the summation text:   
         #    " 1/5" = 1+3 columns, " 10/99" = 1+5 columns  
         my $sum_length = 1+1+2*(length($num_parts));  
         my $num_col = $num_parts+$sum_length;  
         if ($num_col < $name_length) {  
             $num_col = $name_length;  
         }  
         $seq->{'base_width'} = $name_length;  
         $seq->{'width'} = $num_col;  
     }  
     return;      return;
 }  }
   
Line 739  sub MapSelect { Line 737  sub MapSelect {
 Returns html for a selection box allowing the user to choose one (or more)   Returns html for a selection box allowing the user to choose one (or more) 
 of the sections in the course.    of the sections in the course.  
   
   Uses the package variables @Sections and @SelectedSections
 =over 4  =over 4
   
 =item $elementname The name of the HTML form element  =item $elementname The name of the HTML form element
Line 747  of the sections in the course. Line 746  of the sections in the course.
   
 =item $numvisible The number of options to be visible  =item $numvisible The number of options to be visible
   
 =item $selected Array ref to the names of the already selected sections.  
 If undef, $ENV{'form.'.$elementname} is used.    
 If $ENV{'form.'.$elementname} is also empty, none will be selected.  
   
 =item $restriction Code reference to subroutine which returns true or   
 false.  The code must expect a reference to a sequence data structure.  
   
 =back  =back
   
 =cut  =cut
Line 766  sub SectionSelect { Line 758  sub SectionSelect {
         return;          return;
     }      }
     #      #
       # Make sure we have the data we need to continue
       if (! @Sections) {
           &PrepareClasslist()
       }
       #
     # Build the form element      # Build the form element
     my $Str = "\n";      my $Str = "\n";
     $Str .= '<select name="'.$elementname.'" ';      $Str .= '<select name="'.$elementname.'" ';
Line 789  sub SectionSelect { Line 786  sub SectionSelect {
     return $Str;      return $Str;
 }  }
   
   #######################################################
   #######################################################
   
   =pod
   
   =item &CreateAndParseOutputSelector()
   
   Construct a selection list of options for output and parse output selections.
   
   =cut
   
   #######################################################
   #######################################################
   sub OutputDescriptions {
       my (@OutputOptions) = @_;
       my $Str = '';
       $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';
       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
       $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
       $Str = qq/<select size="5" name="$elementname">/;
       foreach my $option (@OutputOptions) {
           if (exists($option->{'special'}) && 
               $option->{'special'} =~ /do not show/) {
               next;
           }
           $Str .= "\n".'    <option value="'.$option->{'value'}.'"';
           $Str .= " selected " if ($option->{'value'} eq $selected);
           $Str .= ">".&mt($option->{'name'})."<\/option>";
       }
       $Str .= "\n</select>";
       return ($Str,$output_mode,$show);
   }
   
   ###############################################
   ###############################################
   
   =pod 
   
   =item &Gather_Student_Data()
   
   Ensures all student data is up to date.
   
   =cut
   
   ###############################################
   ###############################################
   sub Gather_Student_Data {
       my ($r) = @_;
       my $c = $r->connection();
       #
       &Apache::loncoursedata::clear_internal_caches();
       #
       my @Sequences = &Apache::lonstatistics::Sequences_with_Assess();
       #
       my @Students = @Apache::lonstatistics::Students;
       #
       # Open the progress window
       my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin
           ($r,'Statistics Compilation Status',
            'Statistics Compilation Progress', scalar(@Students));
       #
       while (my $student = shift @Students) {
           return if ($c->aborted());
           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'));
       }
       &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
       $r->rflush();
   }
   
   ###############################################
   ###############################################
   
   =pod 
   
   =item &Gather_Full_Student_Data()
   
   Ensures all student data is up to date.
   
   =cut
   
   ###############################################
   ###############################################
   sub Gather_Full_Student_Data {
       my ($r,$formname,$inputname) = @_;
       my $status_type;
       if (defined($formname)) {
           $status_type = 'inline';
       } else {
           $status_type = 'popup';
       }
       my $c = $r->connection();
       #
       &Apache::loncoursedata::clear_internal_caches();
       #
       my @Students = @Apache::lonstatistics::Students;
       #
       # Open the progress window
       my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin
           ($r,&mt('Student Data Compilation Status'),
            &mt('Student Data Compilation Progress'), scalar(@Students),
            $status_type,undef,$formname,$inputname);
       #
       while (my $student = shift @Students) {
           return if ($c->aborted());
           my ($status,undef) = &Apache::loncoursedata::ensure_current_full_data
               ($student->{'username'},$student->{'domain'},
                $ENV{'request.course.id'});
           &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
                                                    &mt('last student'));
       }
       &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
       $r->rflush();
   }
   
 ##################################################  ##################################################
 ##################################################  ##################################################
 sub DisplayClasslist {  sub DisplayClasslist {
     my ($r)=@_;      my ($r)=@_;
       &Apache::lonhtmlcommon::add_breadcrumb
           ({text=>'Select One Student'});
     #      #
     my @Fields = ('fullname','username','domain','id','section');      # 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','status');
     #      #
     my $Str='';      $Str = '';
       if (! @Students) {
           if ($SelectedSections[0] eq 'all') { 
               if (lc($ENV{'form.Status'}) eq 'any') {
                   $Str .= '<h2>'.
                       &mt('There are no students in the course.').
                       '</h2>';
               } elsif (lc($ENV{'form.Status'}) eq 'active') {
                   $Str .= '<h2>'.
                   &mt('There are no currently enrolled students in the course.').
                       '</h2>';
               } elsif (lc($ENV{'form.Status'}) eq 'expired') {
                   $Str .= '<h2>'.
                       &mt('There are no previously enrolled students in the course.').
                           '</h2>';
               }
           } else { 
               my $sections;
               if (lc($ENV{'form.Status'}) eq 'any') {
                   $Str .= '<h2>'.
                       &mt('There are no students in the selected sections.').
                       '</h2>';
               } elsif (lc($ENV{'form.Status'}) eq 'active') {
                   $Str .= '<h2>'.
                       &mt('There are no currently enrolled students in the selected sections.').
                       '</h2>';
               } elsif (lc($ENV{'form.Status'}) eq 'expired') {
                   $Str .= '<h2>'.
                       &mt('There are no previously enrolled students in the selected sections.').
                       '</h2>';
               }
           }
           $Str.= '<a href="/adm/statistics?reportSelected=student_assessment">'.
               &mt('Click here to return to the chart').'</a>';
           $r->print($Str);
           $r->rflush();
           return;
       }
   
       # "Click" is asinine but it is probably not my place to change the world.
       $Str .= '<h2>Click on a students name or username to view their chart</h2>';
     $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 817  sub DisplayClasslist { Line 1033  sub DisplayClasslist {
         #          #
         foreach my $field (@Fields) {          foreach my $field (@Fields) {
             $Str .= '<td>';              $Str .= '<td>';
             if ($field eq 'fullname') {              if ($field eq 'fullname' || $field eq 'username') {
                 $Str .= '<a href="/adm/statistics?reportSelected=';                  $Str .= '<a href="/adm/statistics?reportSelected=';
                 $Str .= &Apache::lonnet::escape('student_assessment');                  $Str .= &Apache::lonnet::escape('student_assessment');
                 $Str .= '&StudentAssessmentStudent=';                  $Str .= '&sort='.&Apache::lonnet::escape($ENV{'form.sort'});
                   $Str .= '&SelectedStudent=';
                 $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 842  sub DisplayClasslist { Line 1061  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 Excel spreadsheets 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 .= '<table border="0"><tbody><tr>'."\n";      # Create the menu
     $Str .= '<td></td>'."\n";      my $Str;
     $Str .= '<td></td>'."\n";      $Str .= '<h2>'.&mt('Please select a report to generate').'</h2>';
     $Str .= '<td align="center"><b>Select a Report</b></td>'."\n";      foreach my $reportdata (@reports) {
     $Str .= '<tr>'."\n";          $Str .='    <h3><a href="/adm/statistics?reportSelected='.
     #              $reportdata->{'internal_name'}.'" >'.
     $Str .= '<td align="center">'.              $reportdata->{'name'}."</a></h3>\n";
         '<input type="submit" name="Refresh" value="Update Display" />'.          $Str .= '    '.('&nbsp;'x8).$reportdata->{'short_description'}.
             "</td>\n";              "\n";
     $Str .= '<td align="center">'.  
         '<input type="submit" name="ClearCache" value="Clear Caches" />'.  
             "</td>\n";  
     #  
     $Str .= '<td align="center">';  
     $Str .= '<select name="reportSelected" >'."\n";  
     foreach (sort(keys(%$reports))) {  
         $Str .= '<option value="'.$_.'"';  
         if($current eq $_) {  
             $Str .= ' selected';  
         }  
         $Str .= '>'.$reports->{$_}.'</option>'."\n";  
     }      }
     $Str .= '</select></td>'."\n";      $Str .="</dl>\n";
     #  
     $Str .= '</tr></tbody></table>'."\n";  
     $Str .= '<hr>'."\n";  
     #      #
     return $Str;      return $Str;
 }  }
Line 902  sub handler { Line 1143  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',
                                              'StudentAssessmentStudent']);                                               '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'));      $r->print('<html><head><title>'.
     $r->rflush();                &mt('Course Statistics and Charts').
     #                "</title></head>\n".
     if (! &Apache::lonmysql::verify_sql_connection()) {                &Apache::loncommon::bodytag('Course Statistics and Charts'));
         my $serveradmin = $r->dir_config('lonAdmEMail');  
         $r->print(<<END);  
 <h2><font color="Red">Unable to connect to database!</font></h2>  
 <p>  
 Please notify the server administrator <b>$serveradmin</b>.  
 </p><p>  
 Course Statistics and Charts cannot be retrieved until the database is  
 restarted.  Your data is intact but cannot be displayed at this time.  
 </p>  
 </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($r);  
     &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 'classlist') {                    text=>'Detailed Problem Analysis'});
         &DisplayClasslist($r);              &Apache::lonproblemanalysis::BuildProblemAnalysisPage($r,$c);
     } elsif($GoToPage eq 'Correct-problems Plot') {          } elsif($GoToPage eq 'submissiontime_analysis') {
 # &Apache::lonpercentage::BuildPercentageGraph($r,$c);              &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.70  
changed lines
  Added in v.1.108


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