[LON-CAPA-cvs] cvs: loncom /interface lonhelper.pm

foxr lon-capa-cvs@mail.lon-capa.org
Tue, 09 May 2006 22:43:19 -0000


foxr		Tue May  9 18:43:19 2006 EDT

  Modified files:              
    /loncom/interface	lonhelper.pm 
  Log:
  Factor out student/staff enumeration from the helper.. all this stuff is so that
  we can try to use those functions to generate a similar student/staff choice
  list in the lonmsgdisplay.pm module. 
  
  
Index: loncom/interface/lonhelper.pm
diff -u loncom/interface/lonhelper.pm:1.146 loncom/interface/lonhelper.pm:1.147
--- loncom/interface/lonhelper.pm:1.146	Tue May  9 18:15:30 2006
+++ loncom/interface/lonhelper.pm	Tue May  9 18:43:19 2006
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # .helper XML handler to implement the LON-CAPA helper
 #
-# $Id: lonhelper.pm,v 1.146 2006/05/09 22:15:30 foxr Exp $
+# $Id: lonhelper.pm,v 1.147 2006/05/09 22:43:19 foxr Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -2274,6 +2274,120 @@
 use strict;
 use Apache::lonlocal;
 use Apache::lonnet;
+#
+#  Utility function used when rendering <student> tags.
+#  This function produces a list references to four
+#  arrays:
+#    (\@course_personel, \@current_members, \@expired_members, \@future_members)
+#  
+# Where:
+#    course_personnel - Each element of this array is itself a reference to an array
+#                      containing information about a member of the course staff.
+#    current_members  - Each element of this array is itself a reference to an
+#                       array that contains information about current students in
+#                       the course.
+#    expired_members  - Each element of this array is itself a reference to an
+#                       array that contains information about students whose 
+#                       status has expired.
+#    future_members   - Each element of this arrya is itself a reference to an
+#                       array that contains information about students who will
+#                       become active at a future date.
+#
+#  Course personnel elements include:
+#       [0]    Last, First of the user.
+#       [1]    Role held by the user.
+#       [2]    Empty.
+#       [3]    Empty
+#       [4]    username:domain of the user.
+#
+#  Student member array elements are:
+#       [0]    Last, First of the user.
+#       [1]    Status of the user one of ("Active", "Future", or "Expired')
+#              depending on which array the user was put in.
+#       [2]    Section the student is in.
+#       [3]    Role of the member (student).
+#       [4]    username:domain of the user.
+#
+sub get_people_in_class {
+    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 $person (@people) {
+		push @course_personnel, [join(':', @$person), $person->[0], '', $_];
+	    }
+	}
+    }
+    #  Students must be split into the three categories:
+
+    my @current_members;
+    my @future_members;
+    my @expired_members;
+
+    #   Indices into the coures data elements.
+
+    my $section    = &Apache::loncoursedata::CL_SECTION();
+    my $fullname   = &Apache::loncoursedata::CL_FULLNAME();
+    my $status     = &Apache::loncoursedata::CL_STATUS();
+    my $start_date = &Apache::loncoursedata::CL_START();
+
+
+    my $classlist = &Apache::loncoursedata::get_classlist();
+    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];
+    } @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.
+	    
+	    my $now = time;
+	    if ($classlist->{$_}->[$start_date] > $now) {
+		push @future_members, [$_, $classlist->{$_}->[$fullname],
+					$classlist->{$_}->[$section],
+					"Future", "Student"];
+	    } else {
+		push @expired_members, [$_, $classlist->{$_}->[$fullname],
+					$classlist->{$_}->[$section],
+					"Expired", "Student"];
+	    }
+
+	}
+    }
+    return (\@course_personnel, 
+	    \@current_members,
+	    \@expired_members,
+	    \@future_members);
+
+}
 
 #
 #  Utility function used when rendering the <student> tag.
@@ -2575,91 +2689,20 @@
     }
 
 
+    my ($course_personnel, 
+	$current_members, 
+	$expired_members, 
+	$future_members) = &get_people_in_class();
 
-    # my $choices = [];
-
-    #
-    #  We need to parcel out the personel in to three arrays:
-    #   $current_members[] - Contains those whose roles are currently active.
-    #   $expired_members[] - Contains those whose roles have expired.
-    #   $future_members[]  - Contains those whose roles will become active in the
-    #                        future.
-    #
-    # Constants
-    my $section    = &Apache::loncoursedata::CL_SECTION();
-    my $fullname   = &Apache::loncoursedata::CL_FULLNAME();
-    my $status     = &Apache::loncoursedata::CL_STATUS();
-    my $start_date = &Apache::loncoursedata::CL_START();
-
-    my $current_members = [];
-    my $expired_members = [];
-    my $future_members  = [];
 
 
     # Load up the non-students, if necessary
-    if ($self->{'coursepersonnel'}) {
-	my %coursepersonnel = Apache::lonnet::get_course_adv_roles();
-	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 $person (@people) {
-		    push @$current_members, [join(':', @$person), $person->[0], '', $_];
-		}
-	    }
-	}
-    }
 
-
-    # Load up the students
-    my $classlist = &Apache::loncoursedata::get_classlist();
-    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];
-    } @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.
-	    
-	    my $now = time;
-	    if ($classlist->{$_}->[$start_date] > $now) {
-		push @$future_members, [$_, $classlist->{$_}->[$fullname],
-					$classlist->{$_}->[$section],
-					"Future", "Student"];
-	    } else {
-		push @$expired_members, [$_, $classlist->{$_}->[$fullname],
-					$classlist->{$_}->[$section],
-					"Expired", "Student"];
-	    }
-
-	}
+    if ($self->{'coursepersonnel'}) {
+	unshift @$current_members, (@$course_personnel);
     }
 
 
-
     #   Current personel
 
     $result .= &render_student_list( $current_members,