--- loncom/interface/lonstatistics.pm	2006/05/01 19:37:34	1.132
+++ loncom/interface/lonstatistics.pm	2008/09/16 12:32:18	1.140
@@ -1,6 +1,6 @@
 # The LearningOnline Network with CAPA
 #
-# $Id: lonstatistics.pm,v 1.132 2006/05/01 19:37:34 albertel Exp $
+# $Id: lonstatistics.pm,v 1.140 2008/09/16 12:32:18 bisitz Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -63,6 +63,7 @@ use Apache::loncoursedata;
 use Apache::lonhtmlcommon;
 use Apache::lonmysql;
 use Apache::lonlocal;
+use Apache::longroup;
 use Time::HiRes;
 #
 # Statistics Packages
@@ -75,6 +76,7 @@ use Apache::lonpercentage;
 use Apache::lonstudentsubmissions();
 use Apache::lonsurveyreports();
 use Apache::longradinganalysis();
+use LONCAPA;
 
 #######################################################
 #######################################################
@@ -230,12 +232,13 @@ sub PrepareClasslist {
     $enrollment_status = $env{'form.Status'} if (exists($env{'form.Status'}));
     #
     # Get groupmembership
-    my (%curr_groups,$classgroups,$studentgroups);
-    my $numgroups = &Apache::loncommon::coursegroups(\%curr_groups,$cdom,$cnum);
-    if ($numgroups) {
+    my ($classgroups,$studentgroups);
+    my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum);
+    if (%curr_groups) {
         ($classgroups,$studentgroups) = 
-                     &Apache::loncoursedata::get_group_memberships($classlist,
-                                                                   $cdom,$cnum);
+	    &Apache::loncoursedata::get_group_memberships($classlist,
+                                                          $field_names,
+							  $cdom,$cnum);
     }
     my $now = time;
 
@@ -309,7 +312,11 @@ sub PrepareClasslist {
     if ($env{'request.course.sec'} !~ /^\s*$/) {
         @Sections = ($env{'request.course.sec'});
     } else {
-        @Sections = sort {$a cmp $b} keys(%Sections);
+        @Sections = sort {
+	    if ($a == $a && $b == $b ) { return $a <=> $b; }
+	    return $a cmp $b;
+	} keys(%Sections);
+
         unshift(@Sections,'all'); # Put 'all' at the front of the list
     }
     # Sort the groups
@@ -428,7 +435,7 @@ sub get_selected_groups {
 =item &section_and_enrollment_description
 
 Returns a string describing the currently selected section(s), group(s) and 
-enrollment status.  
+access status.  
 
 Inputs: mode = 'plaintext' or 'localized'  (defaults to 'localized')
     'plaintext' is used for example in Excel spreadsheets.
@@ -445,9 +452,9 @@ sub section_and_enrollment_description {
     my @groups = &Apache::lonstatistics::get_selected_groups();
     my $description;
     if ($mode eq 'localized') {
-        $description = &mt('Unable to determine section, groups and enrollment');
+        $description = &mt('Unable to determine section, groups and access status');
     } elsif ($mode eq 'plaintext') {
-        $description = 'Unable to determine section, groups and enrollment';
+        $description = 'Unable to determine section, groups and access status';
     } else {
         $description = 'Bad parameter passed to lonstatistics::section_and_enrollment_description';
         &Apache::lonnet::logthis($description);
@@ -455,9 +462,9 @@ sub section_and_enrollment_description {
     $description = &section_or_group_text($mode,'section',@sections).
 	' '.&section_or_group_text($mode,'group',@groups);
     if ($mode eq 'localized') {
-        $description .= &mt(' [_1] enrollment status.',$env{'form.Status'});
+        $description .= &mt(' [_1] access status.',$env{'form.Status'});
     } elsif ($mode eq 'plaintext') {
-        $description .= ' '.$env{'form.Status'}.' enrollment status.';
+        $description .= ' '.$env{'form.Status'}.' access status.';
     }
     return $description;
 }
@@ -700,8 +707,13 @@ sub selected_sequences_with_assessments
     #
     my @sequences = $navmap->retrieveResources(undef,
                                                sub { shift->is_map(); },1,0,1);
+    my $toplevelseq = $navmap->getById('0.0');
+    if (!grep(/^\Q$toplevelseq\E$/,@sequences)) {
+        unshift(@sequences,$toplevelseq);
+    }
+
     my @sequences_with_assessments;
-    for my $sequence ($navmap->getById('0.0'), @sequences) {
+    foreach my $sequence (@sequences) {
 	if ($navmap->hasResource($sequence,sub { shift->is_problem(); },0,1)){
             push(@sequences_with_assessments,$sequence);
         }
@@ -927,7 +939,7 @@ sub DisplayClasslist {
     $Str .= '<tr>';
     $Str .= '<th align="center"><b>'.&mt('Sections').'</b></th>';
     $Str .= '<th align="center"><b>'.&mt('Groups').'</b></th>';
-    $Str .= '<th align="center"><b>'.&mt('Enrollment Status').'</b></th>';
+    $Str .= '<th align="center"><b>'.&mt('Access Status').'</b></th>';
     $Str .= '</tr>'.$/;
     $Str .= '<tr>';
     $Str .= '<td>'.
@@ -1016,10 +1028,10 @@ sub DisplayClasslist {
             $Str .= '<td>';
             if ($field eq 'fullname' || $field eq 'username') {
                 $Str .= '<a href="/adm/statistics?reportSelected=';
-                $Str .= &Apache::lonnet::escape('student_assessment');
-                $Str .= '&sort='.&Apache::lonnet::escape($env{'form.sort'});
+                $Str .= &escape('student_assessment');
+                $Str .= '&sort='.&escape($env{'form.sort'});
                 $Str .= '&SelectedStudent=';
-                $Str .= &Apache::lonnet::escape($sname).'">';
+                $Str .= &escape($sname).'">';
                 $Str .= $student->{$field}.'&nbsp';
                 $Str .= '</a>';
             } elsif ($field eq 'status') {
@@ -1169,12 +1181,13 @@ ENDSTYLE
     #
         if (! &Apache::lonmysql::verify_sql_connection()) {
             my $serveradmin = $r->dir_config('lonAdmEMail');
-            $r->print('<h2><font color="Red">'.
+            $r->print('<h2 class="LC_error">'.
                       &mt('Unable to connect to database!').
-                      '</font></h2>');
-            $r->print('<p>'.
-                      &mt('Please notify the server administrator ').
-                      '<b>'.$serveradmin.'</b></p>');
+                      '</h2>');
+            $r->print('<p>'
+                     .&mt('Please notify the server administrator [_1]',
+                         ,'<b>'.$serveradmin.'</b>')
+                     .'</p>');
             $r->print('<p>'.
                       &mt('Course Statistics and Charts cannot be '.
                           'retrieved until the database is restarted.  '.