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

version 1.145, 2006/05/09 21:44:18 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 2282  use Apache::lonnet; Line 2396  use Apache::lonnet;
 #  future...each one gets is own subpage of selection.  #  future...each one gets is own subpage of selection.
 #  This sub renders one of these pages.  #  This sub renders one of these pages.
 #  Parameters:  #  Parameters:
 #     $sections    - Set of sections in the course (hash reference).  
 #     $students    - Students in the section. (ref to array of references  #     $students    - Students in the section. (ref to array of references
 #                    to arrays).  #                    to arrays).
 #     $formprefix  - form path prefix for form element names  #     $formprefix  - form path prefix for form element names
Line 2301  use Apache::lonnet; Line 2414  use Apache::lonnet;
 #     HTML  text to add to the rendering of the helper.  #     HTML  text to add to the rendering of the helper.
 #  #
 sub render_student_list {  sub render_student_list {
     my (      my ($students, $formprefix, $defaultusers,
  $sections, $students, $formprefix, $defaultusers,  
  $multiselect, $resultname, $javascript) = @_;   $multiselect, $resultname, $javascript) = @_;
   
     my $result = "";      my $result = "";
Line 2421  SCRIPT Line 2533  SCRIPT
     # as well as from categories of personnel.      # as well as from categories of personnel.
   
     if ($multiselect) {      if ($multiselect) {
    #  Make a section hash so we can add sections to the choice:
   
    my %sections;
    for my $student (@$students) {
       my $sect = $student->[2];
       if ($sect ne "") {
    $sections{$sect} = 1;
       }
    }
   
  $result .= '<table><tr><td>';   $result .= '<table><tr><td>';
   
  my $size = scalar(keys(%$sections));   my $size = scalar(keys(%sections));
  $size += 3; # We have allstudents allpersonel nosection too.   $size += 3; # We have allstudents allpersonel nosection too.
  if ($size > 5) {    if ($size > 5) { 
     $size = 5;       $size = 5; 
Line 2434  SCRIPT Line 2556  SCRIPT
  $result .= '<option name="allpersonnel">All Course Personnel</option>';   $result .= '<option name="allpersonnel">All Course Personnel</option>';
  $result .= '<option name="nosection">No Section</option>';   $result .= '<option name="nosection">No Section</option>';
  $result .= "\n";   $result .= "\n";
  foreach my $sec (sort {lc($a) cmp lc($b)} (keys(%$sections))) {   foreach my $sec (sort {lc($a) cmp lc($b)} (keys(%sections))) {
     $result .= '<option name="'.$sec.'">'.$sec.'</option>'."\n";      $result .= '<option name="'.$sec.'">'.$sec.'</option>'."\n";
  }   }
  $result .= '</td><td valign="top">';   $result .= '</td><td valign="top">';
Line 2567  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"];  
     }  
   
  }  
     }  
   
   
     # Create a list of the sections that can be used to create the section   
     # selection list boxes:  
     #  
     my %sections;  
     for my $key (@keys) {  
  my $section_name = $classlist->{$key}->[$section];  
  if ($section_name ne "") {  
     $sections{$section_name} = 1;  
  }  
     }      }
   
   
     if ($self->{'multichoice'}) {  
   
  #  The variable $choice_widget will have the html to make the choice   
  #  selector.  
  my $size=5;  
  if (scalar(keys(%sections)) < 5) {  
     $size=scalar(keys(%sections));  
  }  
  my $result = '<select multiple name="chosensections" size="'.$size.'">'."\n";  
  foreach my $sec (sort {lc($a) cmp lc($b)} (keys(%sections))) {  
     $result .= "<option name=\"$sec\">$sec</option>\n";  
  }  
  $result .= "<option>none</option></select>\n";  
   
   
     }  
   
     #   Current personel      #   Current personel
   
     $result .= &render_student_list(\%sections,      $result .= &render_student_list( $current_members,
   $current_members,       "current",
   "current",       \%defaultUsers,
   \%defaultUsers,       $self->{'multichoice'},
     $self->{'multichoice'},       $self->{'variable'},
     $self->{'variable'},       1);
     1);  
   
   
     # If activeonly is not set then we can also give the expired students:      # If activeonly is not set then we can also give the expired students:
Line 2697  sub render { Line 2719  sub render {
   
  # And future.   # And future.
   
  $result .= &render_student_list(\%sections,   $result .= &render_student_list( $future_members,
       $future_members,   "future",
       "future",   \%defaultUsers,
       \%defaultUsers,   $self->{'multichoice'},
  $self->{'multichoice'},   $self->{'variable'},
  $self->{'variable'},   0);
  0);  
  # Past    # Past 
   
  $result .= &render_student_list(\%sections,   $result .= &render_student_list($expired_members,
       $expired_members,   "past",
       "past",   \%defaultUsers,
       \%defaultUsers,  
  $self->{'multichoice'},   $self->{'multichoice'},
  $self->{'variable'},   $self->{'variable'},
  0);   0);

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


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