--- loncom/interface/lonstatistics.pm	2006/05/01 05:39:44	1.130
+++ 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.130 2006/05/01 05:39:44 raeburn 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;
 
@@ -281,18 +284,18 @@ sub PrepareClasslist {
                   ($enrollment_status eq 'Any')) 
                  ){
                 my $groupcheck = 0;
-                if (grep/^all$/,@selected_groups) {
-                    push (@Students,$studenthash);
+                if (grep(/^all$/,@selected_groups)) {
+                    push(@Students,$studenthash);
                     last;
-                } elsif (grep/^none$/,@selected_groups) {
+                } elsif (grep(/^none$/,@selected_groups)) {
                     if ($studenthash->{'groups'} eq 'none') {
-                        push (@Students,$studenthash);
+                        push(@Students,$studenthash);
                         last;
                     }     
                 } else {
                     foreach my $group (@selected_groups) {
-                        if (grep/^$group$/,@studentsgroups) {
-                            push (@Students,$studenthash);
+                        if (grep(/^$group$/,@studentsgroups)) {
+                            push(@Students,$studenthash);
                             $groupcheck = 1;
                             last;
                         }
@@ -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,19 +452,19 @@ 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);
     }
     $description = &section_or_group_text($mode,'section',@sections).
-                   ' '.&section_or_group_text($mode,'group',@groups);
+	' '.&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);
         }
@@ -922,12 +934,12 @@ sub DisplayClasslist {
     #
     # Output some of the standard interface components
     my $Str;
-    $Str .= &Apache::lonhtmlcommon::breadcrumbs(undef,'Select One Student');
+    $Str .= &Apache::lonhtmlcommon::breadcrumbs('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('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') {
@@ -1163,19 +1175,19 @@ ENDSTYLE
                                             bug=>'Statistics and Charts'});
     if (! exists($env{'form.reportSelected'}) || 
         $env{'form.reportSelected'} eq '') {
-        $r->print(&Apache::lonhtmlcommon::breadcrumbs
-                  (undef,&mt('Statistics Main Page')).
+        $r->print(&Apache::lonhtmlcommon::breadcrumbs('Statistics Main Page').
                   &CreateMainMenu());
     } else {
     #
         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.  '.