Diff for /loncom/interface/lonhelper.pm between versions 1.146 and 1.147

version 1.146, 2006/05/09 22:15:30 version 1.147, 2006/05/09 22:43:19
Line 2274  no strict; Line 2274  no strict;
 use strict;  use strict;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonnet;  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.  #  Utility function used when rendering the <student> tag.
Line 2575  sub render { Line 2689  sub render {
     }      }
   
   
       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      # 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], '', $_];  
  }  
     }  
  }  
     }  
   
       if ($self->{'coursepersonnel'}) {
     # Load up the students   unshift @$current_members, (@$course_personnel);
     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"];  
     }  
   
  }  
     }      }
   
   
   
     #   Current personel      #   Current personel
   
     $result .= &render_student_list( $current_members,      $result .= &render_student_list( $current_members,

Removed from v.1.146  
changed lines
  Added in v.1.147


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>