--- loncom/interface/lonstatistics.pm	2005/03/21 19:47:53	1.122
+++ loncom/interface/lonstatistics.pm	2005/12/13 16:25:32	1.126
@@ -1,6 +1,6 @@
 # The LearningOnline Network with CAPA
 #
-# $Id: lonstatistics.pm,v 1.122 2005/03/21 19:47:53 matthew Exp $
+# $Id: lonstatistics.pm,v 1.126 2005/12/13 16:25:32 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -55,7 +55,7 @@ use vars qw(
     @SelectedStudentData
     $enrollment_status);
 
-use Apache::lonnet();
+use Apache::lonnet;
 use Apache::lonhomework;
 use Apache::loncommon;
 use Apache::loncoursedata;
@@ -194,16 +194,16 @@ sub PrepareClasslist {
     &clear_classlist_variables();
     #
     # Retrieve the classlist
-    my $cid  = $ENV{'request.course.id'};
-    my $cdom = $ENV{'course.'.$cid.'.domain'};
-    my $cnum = $ENV{'course.'.$cid.'.num'};
-    my ($classlist,$field_names) = &Apache::loncoursedata::get_classlist($cid,
-                                                                  $cdom,$cnum);
+    my $cid  = $env{'request.course.id'};
+    my $cdom = $env{'course.'.$cid.'.domain'};
+    my $cnum = $env{'course.'.$cid.'.num'};
+    my ($classlist,$field_names) = &Apache::loncoursedata::get_classlist($cdom,
+									$cnum);
     my @selected_sections = &get_selected_sections();
     #
     # Deal with instructors with restricted section access
-    if ($ENV{'request.course.sec'} !~ /^\s*$/) {
-        @selected_sections = ($ENV{'request.course.sec'});
+    if ($env{'request.course.sec'} !~ /^\s*$/) {
+        @selected_sections = ($env{'request.course.sec'});
     }
     #
     # Set up %StudentData
@@ -217,7 +217,7 @@ sub PrepareClasslist {
     #
     # get the status requested
     $enrollment_status = 'Active';
-    $enrollment_status = $ENV{'form.Status'} if (exists($ENV{'form.Status'}));
+    $enrollment_status = $env{'form.Status'} if (exists($env{'form.Status'}));
     #
     # Process the classlist
     while (my ($student,$student_data) = each (%$classlist)) {
@@ -257,8 +257,8 @@ sub PrepareClasslist {
     }
     #
     # Put the consolidated section data in the right place
-    if ($ENV{'request.course.sec'} !~ /^\s*$/) {
-        @Sections = ($ENV{'request.course.sec'});
+    if ($env{'request.course.sec'} !~ /^\s*$/) {
+        @Sections = ($env{'request.course.sec'});
     } else {
         @Sections = sort {$a cmp $b} keys(%Sections);
         unshift(@Sections,'all'); # Put 'all' at the front of the list
@@ -266,16 +266,17 @@ sub PrepareClasslist {
     #
     # Sort the Students
     my $sortby = 'fullname';
-    $sortby = $ENV{'form.sort'} if (exists($ENV{'form.sort'}));
+    $sortby = $env{'form.sort'} if (exists($env{'form.sort'}));
     my @TmpStudents = sort { $a->{$sortby} cmp $b->{$sortby} ||
-                             $a->{'fullname'} cmp $b->{'fullname'} } @Students;
+                             lc($a->{'fullname'}) cmp lc($b->{'fullname'}) ||
+			     lc($a->{'username'}) cmp lc($b->{'username'}) } @Students;
     @Students = @TmpStudents;
     # 
     # Now deal with that current student thing....
     $curr_student = undef;
-    if (exists($ENV{'form.SelectedStudent'})) {
+    if (exists($env{'form.SelectedStudent'})) {
         my ($current_uname,$current_dom) = 
-            split(':',$ENV{'form.SelectedStudent'});
+            split(':',$env{'form.SelectedStudent'});
         my $i;
         for ($i = 0; $i<=$#Students; $i++) {
             next if (($Students[$i]->{'username'} ne $current_uname) || 
@@ -297,12 +298,9 @@ sub PrepareClasslist {
         }
     }
     #
-    if (exists($ENV{'form.StudentData'})) {
-        if (ref($ENV{'form.StudentData'}) eq 'ARRAY') {
-            @SelectedStudentData = @{$ENV{'form.StudentData'}};
-        } else {
-            @SelectedStudentData = ($ENV{'form.StudentData'});
-        }
+    if (exists($env{'form.StudentData'})) {
+	@SelectedStudentData = 
+	    &Apache::loncommon::get_env_multiple('form.StudentData');
     } else {
         @SelectedStudentData = ('username');
     }
@@ -330,14 +328,8 @@ Returns an array of the selected section
 #######################################################
 #######################################################
 sub get_selected_sections {
-    my @selected_sections;
-    if (exists($ENV{'form.Section'})) {
-        if (ref($ENV{'form.Section'})) {
-            @selected_sections = @{$ENV{'form.Section'}};
-        } elsif ($ENV{'form.Section'} !~ /^\s*$/) {
-            @selected_sections = ($ENV{'form.Section'});
-        }
-    }
+    my @selected_sections = 
+	&Apache::loncommon::get_env_multiple('form.Section');
     @selected_sections = ('all') if (! @selected_sections);
     foreach (@selected_sections) {
         if ($_ eq 'all') {
@@ -346,8 +338,8 @@ sub get_selected_sections {
     }
     #
     # Deal with instructors with restricted section access
-    if ($ENV{'request.course.sec'} !~ /^\s*$/) {
-        @selected_sections = ($ENV{'request.course.sec'});
+    if ($env{'request.course.sec'} !~ /^\s*$/) {
+        @selected_sections = ($env{'request.course.sec'});
     }
     return @selected_sections;
 }
@@ -386,29 +378,29 @@ sub section_and_enrollment_description {
     if (scalar(@sections) == 1 && $sections[0] ne 'all') {
         if ($mode eq 'localized') {
             $description = &mt('Section [_1]. [_2] enrollment status.',
-                               $sections[0],$ENV{'form.Status'});
+                               $sections[0],$env{'form.Status'});
         } elsif ($mode eq 'plaintext') {
             $description = 'Section '.$sections[0].'. '.
-                $ENV{'form.Status'}.' enrollment status.';
+                $env{'form.Status'}.' enrollment status.';
         }
     } elsif (scalar(@sections) && $sections[0] eq 'all') {
         if ($mode eq 'localized') {
             $description = &mt('All sections. [_1] enrollment status.',
-                               $ENV{'form.Status'});
+                               $env{'form.Status'});
         } elsif ($mode eq 'plaintext') {
             $description = 'All sections. '.
-                $ENV{'form.Status'}.' enrollment status.';
+                $env{'form.Status'}.' enrollment status.';
         }
     } elsif (scalar(@sections)) {
         my $lastsection = pop(@sections);
         if ($mode eq 'localized') {
             $description = &mt('Sections [_1] and [_2]. [_3] enrollment status.',
                                join(', ',@sections),$lastsection,
-                               $ENV{'form.Status'});
+                               $env{'form.Status'});
         } elsif ($mode eq 'plaintext') {
             $description = 
                 'Sections '.join(', ',@sections).' and '.$lastsection.'. '.
-                $ENV{'form.Status'}.' enrollment status.';
+                $env{'form.Status'}.' enrollment status.';
         }
     }
     return $description;
@@ -569,16 +561,9 @@ Returns: Array of symbs of selected maps
 #######################################################
 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');
-    }
+    my @selected_maps = 
+	&Apache::loncommon::get_env_multiple('form.'.$elementname);
+    @selected_maps = ('all') if (! @selected_maps);
     foreach my $map (@selected_maps) {
         if ($map eq 'all') {
             @selected_maps = ('all');
@@ -808,30 +793,30 @@ sub DisplayClasslist {
     my @selected_sections = &get_selected_sections();
     if (! @Students) {
         if ($selected_sections[0] eq 'all') { 
-            if (lc($ENV{'form.Status'}) eq 'any') {
+            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') {
+            } 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') {
+            } 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') {
+            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') {
+            } 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') {
+            } elsif (lc($env{'form.Status'}) eq 'expired') {
                 $Str .= '<h2>'.
                     &mt('There are no previously enrolled students in the selected sections.').
                     '</h2>';
@@ -872,7 +857,7 @@ sub DisplayClasslist {
             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 .= '&sort='.&Apache::lonnet::escape($env{'form.sort'});
                 $Str .= '&SelectedStudent=';
                 $Str .= &Apache::lonnet::escape($sname).'">';
                 $Str .= $student->{$field}.'&nbsp';
@@ -964,16 +949,16 @@ sub handler {
     if ($loaderror) { return $loaderror; }
     $loaderror=
        &Apache::lonnet::overloaderror($r,
-         $ENV{'course.'.$ENV{'request.course.id'}.'.home'});
+         $env{'course.'.$env{'request.course.id'}.'.home'});
     if ($loaderror) { return $loaderror; }
     #
     # Check for access
-    if (! &Apache::lonnet::allowed('vgr',$ENV{'request.course.id'})) {
-        $ENV{'user.error.msg'}=
+    if (! &Apache::lonnet::allowed('vgr',$env{'request.course.id'})) {
+        $env{'user.error.msg'}=
             $r->uri.":vgr:0:0:Cannot view grades for complete course";
         if (! &Apache::lonnet::allowed('vgr',
-                      $ENV{'request.course.id'}.'/'.$ENV{'request.course.sec'})) {
-            $ENV{'user.error.msg'}=
+                      $env{'request.course.id'}.'/'.$env{'request.course.sec'})) {
+            $env{'user.error.msg'}=
                 $r->uri.":vgr:0:0:Cannot view grades with given role";
             return HTTP_NOT_ACCEPTABLE;
         }
@@ -1014,8 +999,8 @@ ENDSTYLE
                                             text =>'Statistics',
                                             faq=>139,
                                             bug=>'Statistics and Charts'});
-    if (! exists($ENV{'form.reportSelected'}) || 
-        $ENV{'form.reportSelected'} eq '') {
+    if (! exists($env{'form.reportSelected'}) || 
+        $env{'form.reportSelected'} eq '') {
         $r->print(&Apache::lonhtmlcommon::breadcrumbs
                   (undef,&mt('Statistics Main Page')).
                   &CreateMainMenu());
@@ -1039,8 +1024,8 @@ ENDSTYLE
         }
         #
         # Clean out the caches
-        if (exists($ENV{'form.ClearCache'})) {
-            &Apache::loncoursedata::delete_caches($ENV{'requres.course.id'});
+        if (exists($env{'form.ClearCache'})) {
+            &Apache::loncoursedata::delete_caches($env{'requres.course.id'});
         }
         #
         # Begin form output
@@ -1048,7 +1033,7 @@ ENDSTYLE
         $r->print('method="post" action="/adm/statistics">');
         $r->rflush();
         #
-        my $GoToPage = $ENV{'form.reportSelected'};
+        my $GoToPage = $env{'form.reportSelected'};
         #
         $r->print('<input type="hidden" name="reportSelected" value="'.
                   $GoToPage.'">');