--- loncom/interface/lonstatistics.pm	2004/02/20 16:24:20	1.98
+++ loncom/interface/lonstatistics.pm	2005/02/25 02:37:49	1.115
@@ -1,6 +1,6 @@
 # The LearningOnline Network with CAPA
 #
-# $Id: lonstatistics.pm,v 1.98 2004/02/20 16:24:20 matthew Exp $
+# $Id: lonstatistics.pm,v 1.115 2005/02/25 02:37:49 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -54,10 +54,6 @@ use vars qw(
     %StudentData
     @StudentDataOrder
     @SelectedStudentData
-    $top_map 
-    @Sequences 
-    @SelectedMaps
-    @Assessments
     $enrollment_status);
 
 use Apache::lonnet();
@@ -77,6 +73,7 @@ use Apache::lonproblemstatistics();
 use Apache::lonstudentassessment();
 use Apache::lonpercentage;
 use Apache::lonstudentsubmissions();
+use Apache::lonsurveyreports();
 
 #######################################################
 #######################################################
@@ -228,10 +225,10 @@ sub PrepareClasslist {
     }
     #
     # Set up %StudentData
-    @StudentDataOrder = qw/fullname username domain id section status/;
+    @StudentDataOrder = qw/fullname username domain id section status comments/;
     foreach my $field (@StudentDataOrder) {
-        $StudentData{$field}->{'title'} = $field;
-        $StudentData{$field}->{'base_width'} = length($field);
+        $StudentData{$field}->{'title'} = &mt($field);
+        $StudentData{$field}->{'base_width'} = length(&mt($field));
         $StudentData{$field}->{'width'} = 
                                $StudentData{$field}->{'base_width'};
     }
@@ -412,164 +409,6 @@ sub next_student {
     return $next_student;
 }
 
-#######################################################
-#######################################################
-
-=pod
-
-=item &clear_sequence_variables()
-
-=cut
-
-#######################################################
-#######################################################
-sub clear_sequence_variables {
-    undef($top_map);
-    undef(@Sequences);
-    undef(@Assessments);
-}
-
-#######################################################
-#######################################################
-
-=pod
-
-=item &SetSelectedMaps($elementname)
-
-Sets the @SelectedMaps array from $ENV{'form.'.$elementname};
-
-=cut
-
-#######################################################
-#######################################################
-sub SetSelectedMaps {
-    my $elementname = shift;
-    if (exists($ENV{'form.'.$elementname})) {
-        if (ref($ENV{'form.'.$elementname})) {
-            @SelectedMaps = @{$ENV{'form.'.$elementname}};
-        } else {
-            @SelectedMaps = ($ENV{'form.'.$elementname});
-        }
-    } else {
-        @SelectedMaps = ('all');
-    }
-}
-
-
-#######################################################
-#######################################################
-
-=pod
-
-=item &Sequences_with_Assess()
-
-Returns an array containing the subset of @Sequences which contain
-assessments.
-
-=cut
-
-#######################################################
-#######################################################
-sub Sequences_with_Assess {
-    my @Sequences_to_Show;
-    foreach my $map_symb (@SelectedMaps) {
-        foreach my $sequence (@Sequences) {
-            next if ($sequence->{'symb'} ne $map_symb && $map_symb ne 'all');
-            next if ($sequence->{'num_assess'} < 1);
-            push (@Sequences_to_Show,$sequence);
-        }
-    }
-    return @Sequences_to_Show;
-}
-
-#######################################################
-#######################################################
-
-=pod
-
-=item &PrepareCourseData($r)
-
-=cut
-
-#######################################################
-#######################################################
-sub PrepareCourseData {
-    my ($r) = @_;
-    &clear_sequence_variables();
-    my ($top,$sequences,$assessments) = 
-        &Apache::loncoursedata::get_sequence_assessment_data();
-    if (! defined($top) || ! ref($top)) {
-        # There has been an error, better report it
-        &Apache::lonnet::logthis('top is undefined');
-        return;
-    }
-    $top_map = $top if (ref($top));
-    @Sequences = @{$sequences} if (ref($sequences) eq 'ARRAY');
-    @Assessments = @{$assessments} if (ref($assessments) eq 'ARRAY');
-    return;
-}
-
-#######################################################
-#######################################################
-
-=pod
-
-=item &log_sequence($sequence,$recursive,$padding)
-
-Write data about the sequence to a logfile.  If $recursive is not
-undef the data is written recursively.  $padding is used for recursive
-calls.
-
-=cut
-
-#######################################################
-#######################################################
-sub log_sequence {
-    my ($seq,$recursive,$padding) = @_;
-    $padding = '' if (! defined($padding));
-    if (ref($seq) ne 'HASH') {
-        &Apache::lonnet::logthis('log_sequence passed bad sequnce');
-        return;
-    }
-    &Apache::lonnet::logthis($padding.'sequence '.$seq->{'title'});
-    while (my($key,$value) = each(%$seq)) {
-        next if ($key eq 'contents');
-        if (ref($value) eq 'ARRAY') {
-            for (my $i=0;$i< scalar(@$value);$i++) {
-                &Apache::lonnet::logthis($padding.$key.'['.$i.']='.
-                                         $value->[$i]);
-            }
-        } else {
-            &Apache::lonnet::logthis($padding.$key.'='.$value);
-        }
-    }
-    if (defined($recursive)) {
-        &Apache::lonnet::logthis($padding.'-'x20);
-        &Apache::lonnet::logthis($padding.'contains:');
-        foreach my $item (@{$seq->{'contents'}}) {
-            if ($item->{'type'} eq 'container') {
-                &log_sequence($item,$recursive,$padding.'    ');
-            } else {
-                &Apache::lonnet::logthis($padding.'title = '.$item->{'title'});
-                while (my($key,$value) = each(%$item)) {
-                    next if ($key eq 'title');
-                    if (ref($value) eq 'ARRAY') {
-                        for (my $i=0;$i< scalar(@$value);$i++) {
-                            &Apache::lonnet::logthis($padding.$key.'['.$i.']='.
-                                                     $value->[$i]);
-                        }
-                    } else {
-                        &Apache::lonnet::logthis($padding.$key.'='.$value);
-                    }
-                }
-            }
-        }
-        &Apache::lonnet::logthis($padding.'end contents of '.$seq->{'title'});
-        &Apache::lonnet::logthis($padding.'-'x20);
-    }
-    return;
-}
-
 ##############################################
 ##############################################
 
@@ -633,12 +472,97 @@ sub StudentDataSelect {
     return $Str;
 }
 
+#######################################################
+#######################################################
+
+=pod
+
+=item &get_selected_maps($elementname)
+
+Input: Name of the <select> form element used to specify the maps.
+
+Returns: Array of symbs of selected maps or the description 'all'.
+   If form.$elementname does not exist, 'all' is returned.
+
+=cut
+
+#######################################################
+#######################################################
+sub get_selected_maps {
+    my ($elementname) = @_;
+    my @selected_maps;
+    if (exists($ENV{'form.'.$elementname})) {
+        if (ref($ENV{'form.'.$elementname})) {
+            @selected_maps = @{$ENV{'form.'.$elementname}};
+        } else {
+            @selected_maps = ($ENV{'form.'.$elementname});
+        }
+    } else {
+        @selected_maps = ('all');
+    }
+    return @selected_maps;
+}
+
+
+#######################################################
+#######################################################
+
+=pod
+
+=item &sequences_with_assessments
+
+Retrieve the sequences which were selected by the user to show.  
+
+Input: $mode: scalar.  Either 'selected' or 'all'.  If not specified,
+    'selected' is used.
+
+Returns: an array containing a navmap object and navmap resources, 
+    or an array containing a scalar with an error message.
+
+=cut
+
+#######################################################
+#######################################################
+sub sequences_with_assessments {
+    my ($mode) = @_;
+    $mode = 'selected' if (! defined($mode));
+    my $navmap = Apache::lonnavmaps::navmap->new();
+    if (!defined($navmap)) {
+        return ('Can not open Coursemap');
+    }
+    #
+    my @sequences = $navmap->retrieveResources(undef,
+                                               sub { shift->is_map(); },1,0,1);
+    my @sequences_with_assessments;
+    for my $sequence ($navmap->getById('0.0'), @sequences) {
+	if ($navmap->hasResource($sequence,sub { shift->is_problem(); }, 0)){
+            push(@sequences_with_assessments,$sequence);
+        }
+    }
+    #
+    my @sequences_to_show;
+    foreach my $sequence (@sequences_with_assessments) {
+        if ($mode eq 'all') {
+            push (@sequences_to_show,$sequence);
+        } elsif ($mode eq 'selected') {
+            foreach my $map_symb (&get_selected_maps()) {
+                if ($sequence->symb eq $map_symb || $map_symb eq 'all'){
+                    push (@sequences_to_show,$sequence);
+                    last; # Only put it in once
+                }
+            }
+        }
+
+    }
+    return $navmap,@sequences_to_show;
+}
+
 ##############################################
 ##############################################
 
 =pod 
 
-=item &MapSelect($elementname,$status,$numvisible,$restriction) 
+=item &map_select($elementname,$status,$numvisible,$restriction) 
 
 Returns html for a selection box allowing the user to choose one (or more) 
 of the sequences in the course.  The values of the sequences are the symbs.
@@ -652,69 +576,67 @@ If the top sequence is selected, the val
 
 =item $numvisible The number of options to be visible
 
-=item $restriction Code reference to subroutine which returns true or 
-false.  The code must expect a reference to a sequence data structure.
-
 =back
 
 =cut
 
 ##############################################
 ##############################################
-sub MapSelect {
-    my ($elementname,$status,$numvisible,$restriction)=@_;
+sub map_select {
+    my ($elementname,$status,$numvisible)=@_;
     if ($numvisible < 1) {
         return;
     }
     #
     # Set up array of selected items
-    &SetSelectedMaps($elementname);
-    #
-    # Set up the restriction call
-    if (! defined($restriction)) {
-        $restriction = sub { 1; };
-    }
+    my @selected_maps = &get_selected_maps($elementname);
     #
     # Build the form element
-    my $Str = "\n";
-    $Str .= '<select name="'.$elementname.'" ';
+    my $form = "\n";
+    $form .= '<select name="'.$elementname.'" ';
     if ($status ne 'single') {
-        $Str .= 'multiple="true" ';
+        $form .= 'multiple="true" ';
     }
-    $Str .= 'size="'.$numvisible.'" >'."\n";
+    $form .= 'size="'.$numvisible.'" >'."\n";
     #
     # Deal with 'all'
-    foreach (@SelectedMaps) {
+    foreach (@selected_maps) {
         if ($_ eq 'all') {
-            @SelectedMaps = ('all');
+            @selected_maps = ('all');
             last;
         }
     }
     #
     # Put in option for 'all'
-    $Str .= '    <option value="all" ';
-    foreach (@SelectedMaps) {
+    $form .= '    <option value="all" ';
+    foreach (@selected_maps) {
         if ($_ eq 'all') {
-            $Str .= 'selected ';
+            $form .= 'selected ';
             last;
         }
     }
-    $Str .= ">all</option>\n";
+    $form .= ">all</option>\n";
     #
     # Loop through the sequences
-    foreach my $seq (@Sequences) {
-        next if (! $restriction->($seq));
-        $Str .= '    <option value="'.$seq->{'symb'}.'" ';
-        foreach (@SelectedMaps) {
-            if ($seq->{'symb'} eq $_) {
-                $Str .= 'selected ';
+    my @sequences = &sequences_with_assessments();
+    my $navmap;
+    if (!ref($sequences[0])) {
+        return $sequences[0];
+    } else {
+        $navmap = shift(@sequences);
+    }
+    foreach my $seq (@sequences){
+        $form .= '    <option value="'.$seq->symb.'" ';
+        foreach (@selected_maps) {
+            if ($seq->symb eq $_) {
+                $form .= 'selected ';
                 last;
             }
         }
-        $Str .= '>'.$seq->{'title'}."</option>\n";
+        $form .= '>'.$seq->compTitle."</option>\n";
     }
-    $Str .= "</select>\n";
-    return $Str;
+    $form .= "</select>\n";
+    return $form;
 }
 
 ##############################################
@@ -776,191 +698,72 @@ sub SectionSelect {
     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) = @_;
-    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));
-    #
-    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 {
     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>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') {
-                $Str .= '<h2>There are no currently enrolled students in '.
-                    'the course.</h2>';
+                $Str .= '<h2>'.
+                &mt('There are no currently enrolled students in the course.').
+                    '</h2>';
             } elsif (lc($ENV{'form.Status'}) eq 'expired') {
-                $Str .= '<h2>There are no previously enrolled '.
-                    'students in the course.</h2>';
+                $Str .= '<h2>'.
+                    &mt('There are no previously enrolled students in the course.').
+                        '</h2>';
             }
         } else { 
             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') {
-                $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') {
-                $Str .= '<h2>There are no currently enrolled students '.
-                    'in '.$sections.'.</h2>';
+                $Str .= '<h2>'.
+                    &mt('There are no currently enrolled students in the selected sections.').
+                    '</h2>';
             } elsif (lc($ENV{'form.Status'}) eq 'expired') {
-                $Str .= '<h2>There are no previously enrolled students '.
-                    'in '.$sections.'.</h2>';
+                $Str .= '<h2>'.
+                    &mt('There are no previously enrolled students in the selected sections.').
+                    '</h2>';
             }
         }
         $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->rflush();
         return;
@@ -971,7 +774,10 @@ sub DisplayClasslist {
     $Str .= '<table border="0"><tr><td bgcolor="#777777">'."\n";
     $Str .= '<table border="0" cellpadding="3"><tr bgcolor="#e6ffff">'."\n";
     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>';
     }
     $Str .= '</tr>'."\n";
@@ -996,6 +802,8 @@ sub DisplayClasslist {
                 $Str .= &Apache::lonnet::escape($sname).'">';
                 $Str .= $student->{$field}.'&nbsp';
                 $Str .= '</a>';
+            } elsif ($field eq 'status') {
+                $Str .= &mt($student->{$field});
             } else {
                 $Str .= $student->{$field};
             }
@@ -1034,7 +842,12 @@ sub CreateMainMenu {
                    { internal_name => 'student_submission_reports',
                      name => &mt('Student Submission Reports'),
                      short_description => 
-    &mt('Prepare Excel spreadsheets of student submissions.'),
+    &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'),
@@ -1103,9 +916,19 @@ sub handler {
                                              'SelectedStudent']);
     #
     # Give the LON-CAPA page header
-    $r->print('<html><head><title>'.
+    my $style = <<ENDSTYLE;
+<style type="text/css">
+    ul.sub_studentans { list-style-type: none }
+    ul.sub_correctans { list-style-type: none }
+    tr.even           { background-color: \#CCCCCC }
+    td.essay          { border: 1px solid gray; }
+</style>
+ENDSTYLE
+    my $html=&Apache::lonxml::xmlbegin();
+    $r->print($html.'<head><title>'.
               &mt('Course Statistics and Charts').
-              "</title></head>\n".
+              '</title>'.$style.
+              "</head>\n".
               &Apache::loncommon::bodytag('Course Statistics and Charts'));
     $r->rflush();
     # 
@@ -1119,7 +942,7 @@ sub handler {
     if (! exists($ENV{'form.reportSelected'}) || 
         $ENV{'form.reportSelected'} eq '') {
         $r->print(&Apache::lonhtmlcommon::breadcrumbs
-                  (undef,'Statistics Main Page').
+                  (undef,&mt('Statistics Main Page')).
                   &CreateMainMenu());
     } else {
     #
@@ -1152,9 +975,6 @@ sub handler {
         #
         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') {
@@ -1162,41 +982,41 @@ sub handler {
         } elsif($GoToPage eq 'problem_statistics') {
             &Apache::lonhtmlcommon::add_breadcrumb
                 ({href=>'/adm/statistics?reportselected=problem_statistics',
-                  text=>'Overall Problem Statistics',
-                  faq=>139,bug=>'Statistics and Charts'});
+                  text=>'Overall Problem Statistics'});
             &Apache::lonproblemstatistics::BuildProblemStatisticsPage($r,$c);
         } elsif($GoToPage eq 'problem_analysis') {
             &Apache::lonhtmlcommon::add_breadcrumb
                 ({href=>'/adm/statistics?reportselected=problem_analysis',
-                  text=>'Detailed Problem Analysis',
-                  faq=>139,bug=>'Statistics and Charts'});
+                  text=>'Detailed Problem Analysis'});
             &Apache::lonproblemanalysis::BuildProblemAnalysisPage($r,$c);
         } elsif($GoToPage eq 'submissiontime_analysis') {
             &Apache::lonhtmlcommon::add_breadcrumb
                 ({href=>
                       '/adm/statistics?reportselected=submissiontime_analysis',
-                      text=>'Submission Time Plots',
-                      faq=>139,bug=>'Statistics and Charts'});
+                      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',
-                  faq=>139,bug=>'Statistics and Charts'});
+                  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',
-                  faq=>139,bug=>'Statistics and Charts'});
+                  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',
-                  faq=>139,bug=>'Statistics and Charts'});
+                  text=>'Chart'});
             &Apache::lonstudentassessment::BuildStudentAssessmentPage($r,$c);
         }
         #