Diff for /loncom/interface/lonstatistics.pm between versions 1.83 and 1.100

version 1.83, 2003/10/02 17:07:41 version 1.100, 2004/03/01 16:39:19
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 Apache::lonlocal;  
 use Time::HiRes;  
   
 #######################################################  #######################################################
 #######################################################  #######################################################
Line 245  sub PrepareClasslist { Line 237  sub PrepareClasslist {
     }      }
     #      #
     # 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 268  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 514  sub PrepareCourseData { Line 506  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 898  sub Gather_Student_Data { Line 876  sub Gather_Student_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 921  sub Gather_Full_Student_Data { Line 899  sub Gather_Full_Student_Data {
     my ($r) = @_;      my ($r) = @_;
     my $c = $r->connection();      my $c = $r->connection();
     #      #
       &Apache::loncoursedata::clear_internal_caches();
       #
     my @Students = @Apache::lonstatistics::Students;      my @Students = @Apache::lonstatistics::Students;
     #      #
     # Open the progress window      # Open the progress window
Line 1034  sub DisplayClasslist { Line 1014  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 => '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 1089  sub handler { Line 1091  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'));      $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();  
     &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 'problem_analysis') {                  ({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 '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.83  
changed lines
  Added in v.1.100


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.