--- loncom/interface/lonselstudent.pm	2006/05/17 15:04:42	1.4
+++ loncom/interface/lonselstudent.pm	2006/06/30 01:43:06	1.8
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # lonselstudent.pm : Reusable subs for student selection.
 #
-# $Id: lonselstudent.pm,v 1.4 2006/05/17 15:04:42 albertel Exp $
+# $Id: lonselstudent.pm,v 1.8 2006/06/30 01:43:06 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -36,7 +36,14 @@ use     HTML::Entities;
 #  This function produces a list references to four
 #  arrays:
 #    (\@course_personel, \@current_members, \@expired_members, \@future_members)
-#  
+#
+#
+# Parameters;
+#
+#  restrict           - Optional.. if present and defined should be a section name.
+#                       The *_members arrays will then only contain people
+#                       in that section
+#
 # Where:
 #    course_personnel - Each element of this array is itself a reference to an array
 #                      containing information about a member of the course staff.
@@ -66,25 +73,25 @@ use     HTML::Entities;
 #       [4]    username:domain of the user.
 #
 sub get_people_in_class {
+    my ($section_restriction) = @_;
     my %coursepersonnel = &Apache::lonnet::get_course_adv_roles();
     #
     #  Enumerate the course_personnel.
     #
     my @course_personnel;
-    for (sort(keys(%coursepersonnel))) {
-	for my $role (split(/,/, $coursepersonnel{$_})) {
-	    # extract the names so we can sort them
-	    my @people;
-	    
-	    for (split(/,/, $role)) {
-		push(@people, [split(/:/, $role)]);
-	    }
-	    
-	    @people = sort { $a->[0] cmp $b->[0] } (@people);
+    for my $role (sort(keys(%coursepersonnel))) {
+	# extract the names so we can sort them
+	my @people;
+	for my $person (split(/,/, $coursepersonnel{$role})) {
+	    my ($uname,$domain) = split(/:/, $person);
+	    push(@people, [&Apache::loncommon::plainname($uname,$domain),
+			   $uname,$domain]);
+	}
+	@people = sort { $a->[0] cmp $b->[0] } (@people);
 	    
-	    for my $person (@people) {
-		push(@course_personnel, [join(':', @$person), $person->[0], '', $_]);
-	    }
+	for my $person (@people) {
+	    push(@course_personnel, [join(':', $person->[1],$person->[2]), 
+				     $person->[0], '', '', $role]);
 	}
     }
     #  Students must be split into the three categories:
@@ -105,38 +112,41 @@ sub get_people_in_class {
     my @keys = keys(%{$classlist});
     # Sort by: Section, name
     @keys = sort {
-        if ($classlist->{$a}->[$section] ne $classlist->{$b}->[$section]) {
-            return $classlist->{$a}->[$section] cmp $classlist->{$b}->[$section];
-        }
-        return $classlist->{$a}->[$fullname] cmp $classlist->{$b}->[$fullname];
+	lc($classlist->{$a}[$section])  cmp lc($classlist->{$b}[$section])  ||
+	lc($classlist->{$a}[$fullname]) cmp lc($classlist->{$b}[$fullname]) ||
+	lc($a) cmp lc($b)
     } (@keys);
  
 
 
 
-    for (@keys) {
-
-	if ( $classlist->{$_}->[$status] eq
-	    'Active') {
-	    push(@current_members, [$_, $classlist->{$_}->[$fullname], 
-			     $classlist->{$_}->[$section],
-			     $classlist->{$_}->[$status], 'Student']);
-	} else {
-	    #  Need to figure out if this user is future or
-	    #  Expired... If the start date is in the future
-	    #  the user is future...else expired.
+    for my $user (@keys) {
+	if (!$section_restriction || 
+	    ($section_restriction eq $classlist->{$user}->[$section])) {
 	    
-	    my $now = time;
-	    if ($classlist->{$_}->[$start_date] > $now) {
-		push(@future_members, [$_, $classlist->{$_}->[$fullname],
-					$classlist->{$_}->[$section],
-					"Future", "Student"]);
+	    if ( $classlist->{$user}->[$status] eq
+		 'Active') {
+		push(@current_members, [$user, $classlist->{$user}->[$fullname], 
+					$classlist->{$user}->[$section],
+					$classlist->{$user}->[$status], 'Student']);
 	    } else {
-		push(@expired_members, [$_, $classlist->{$_}->[$fullname],
-					$classlist->{$_}->[$section],
-					"Expired", "Student"]);
+		#  Need to figure out if this user is future or
+		#  Expired... If the start date is in the future
+		#  the user is future...else expired.
+		
+		my $now = time;
+		if ($classlist->{$user}->[$start_date] > $now) {
+		    push(@future_members, [$user, $classlist->{$user}->[$fullname],
+					   $classlist->{$user}->[$section],
+					   "Future", "Student"]);
+		} else {
+		    push(@expired_members, [$user,
+					    $classlist->{$user}->[$fullname],
+					    $classlist->{$user}->[$section],
+					    "Expired", "Student"]);
+		}
+		
 	    }
-
 	}
     }
     return (\@course_personnel, 
@@ -177,6 +187,9 @@ sub render_student_list {
 
     my $result = "";
 
+    # no students so no output
+    return if (!@$students);
+
     if ($javascript && $multiselect) {
         $result .= <<SCRIPT;
 <script type="text/javascript">