[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,