Diff for /loncom/interface/lonselstudent.pm between versions 1.5 and 1.16

version 1.5, 2006/05/17 15:20:56 version 1.16, 2016/10/22 01:53:27
Line 28 Line 28
   
 package Apache::lonselstudent;  package Apache::lonselstudent;
 use     Apache::lonnet;  use     Apache::lonnet;
 use     Apache::loncoursedata;  use     Apache::lonlocal;
 use     HTML::Entities;  use     Apache::loncoursedata();
   use     HTML::Entities();
   
 #  #
 #  Utility function used when rendering <student> tags.  #  Utility function used when rendering <student> tags.
 #  This function produces a list references to four  #  This function produces a list references to four
 #  arrays:  #  arrays:
 #    (\@course_personel, \@current_members, \@expired_members, \@future_members)  #    (\@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:  # Where:
 #    course_personnel - Each element of this array is itself a reference to an array  #    course_personnel - Each element of this array is itself a reference to an array
 #                      containing information about a member of the course staff.  #                      containing information about a member of the course staff.
Line 53  use     HTML::Entities; Line 61  use     HTML::Entities;
 #  Course personnel elements include:  #  Course personnel elements include:
 #       [0]    Last, First of the user.  #       [0]    Last, First of the user.
 #       [1]    Role held by the user.  #       [1]    Role held by the user.
 #       [2]    Empty.  #       [2]    Section associated with role.
 #       [3]    Empty  #       [3]    Empty
 #       [4]    username:domain of the user.  #       [4]    username:domain of the user.
 #  #
Line 66  use     HTML::Entities; Line 74  use     HTML::Entities;
 #       [4]    username:domain of the user.  #       [4]    username:domain of the user.
 #  #
 sub get_people_in_class {  sub get_people_in_class {
     my %coursepersonnel = &Apache::lonnet::get_course_adv_roles();      my ($section_restriction,$personnel_section) = @_;
       my %coursepersonnel = &Apache::lonnet::get_course_adv_roles($env{'request.course.id'},1);
       my $crstype = &Apache::loncommon::course_type();
     #      #
     #  Enumerate the course_personnel.      #  Enumerate the course_personnel.
     #      #
     my @course_personnel;      my @course_personnel;
     for my $role (sort(keys(%coursepersonnel))) {      foreach my $key (sort(keys(%coursepersonnel))) {
           my ($role,$section) = split(/:/,$key);
  # extract the names so we can sort them   # extract the names so we can sort them
           next if (($personnel_section ne '') && ($personnel_section ne $section)); 
  my @people;   my @people;
  for my $person (split(/,/, $coursepersonnel{$role})) {          
    foreach my $person (split(/,/, $coursepersonnel{$key})) {
     my ($uname,$domain) = split(/:/, $person);      my ($uname,$domain) = split(/:/, $person);
     push(@people, [&Apache::loncommon::plainname($uname,$domain),      push(@people, [&Apache::loncommon::plainname($uname,$domain),
    $uname,$domain]);     $uname,$domain]);
  }   }
  @people = sort { $a->[0] cmp $b->[0] } (@people);   @people = sort { $a->[0] cmp $b->[0] } (@people);
           
  for my $person (@people) {   foreach my $person (@people) {
     push(@course_personnel, [join(':', $person->[1],$person->[2]),       push(@course_personnel, [join(':', $person->[1],$person->[2]), 
      $person->[0], '', '', $role]);       $person->[0], $section, 'Active',
                                        &Apache::lonnet::plaintext($role)]);
  }   }
     }      }
     #  Students must be split into the three categories:      #  Students must be split into the three categories:
Line 102  sub get_people_in_class { Line 116  sub get_people_in_class {
   
     my $classlist = &Apache::loncoursedata::get_classlist();      my $classlist = &Apache::loncoursedata::get_classlist();
     my @keys = keys(%{$classlist});      my @keys = keys(%{$classlist});
     # Sort by: Section, name      # Sort by: fullname, username
     @keys = sort {      @keys = sort {
         if ($classlist->{$a}->[$section] ne $classlist->{$b}->[$section]) {   lc($classlist->{$a}[$fullname]) cmp lc($classlist->{$b}[$fullname]) ||
             return $classlist->{$a}->[$section] cmp $classlist->{$b}->[$section];   lc($a) cmp lc($b)
         }  
         return $classlist->{$a}->[$fullname] cmp $classlist->{$b}->[$fullname];  
     } (@keys);      } (@keys);
     
   
   
   
     for (@keys) {      for my $user (@keys) {
    if (!$section_restriction || 
  if ( $classlist->{$_}->[$status] eq      ($section_restriction eq $classlist->{$user}->[$section])) {
     '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->{$user}->[$status] eq
     if ($classlist->{$_}->[$start_date] > $now) {   'Active') {
  push(@future_members, [$_, $classlist->{$_}->[$fullname],   push(@current_members, [$user, $classlist->{$user}->[$fullname], 
  $classlist->{$_}->[$section],   $classlist->{$user}->[$section],
  "Future", "Student"]);   $classlist->{$user}->[$status], 'Student']);
     } else {      } else {
  push(@expired_members, [$_, $classlist->{$_}->[$fullname],   #  Need to figure out if this user is future or
  $classlist->{$_}->[$section],   #  Expired... If the start date is in the future
  "Expired", "Student"]);   #  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,       return (\@course_personnel, 
Line 167  sub get_people_in_class { Line 183  sub get_people_in_class {
 #                     This should be true for the first call for a page  #                     This should be true for the first call for a page
 #                     and false for all other calls... only matters if  #                     and false for all other calls... only matters if
 #                     multiselect is true.  #                     multiselect is true.
   #     $context      - If email, do not include <br /><hr /> tags at the end
   #                     of the data table.
 #  Returns:  #  Returns:
 #     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 ($students, $formname, $formprefix, $defaultusers,      my ($students, $formname, $formprefix, $defaultusers,
  $multiselect, $resultname, $javascript) = @_;   $multiselect, $resultname, $javascript, $context) = @_;
   
     my $result = "";      my $result = "";
   
       # no students so no output
       return if (!@$students);
   
     if ($javascript && $multiselect) {      if ($javascript && $multiselect) {
         $result .= <<SCRIPT;          $result .= <<SCRIPT;
 <script type="text/javascript">  <script type="text/javascript">
 // <!--  // <!--
   
     function findElement(name) {      function findElement(name,formname) {
  var i;   var i;
  var ele;   var ele;
  for(i =0; i < document.forms.$formname.elements.length; i++) {   for(i =0; i < formname.elements.length; i++) {
     ele = document.forms.$formname.elements[i];      ele = formname.elements[i];
     if(ele.name == name) {      if(ele.name == name) {
  return ele;   return ele;
     }      }
Line 216  sub render_student_list { Line 237  sub render_student_list {
  }   }
     }      }
   
     function setAllStudents(value, which) {      function setAllStudents(value, which, formname) {
  var i;   var i;
  var ele;   var ele;
  for (i =0; i < document.forms.$formname.elements.length; i++) {   for (i =0; i < formname.elements.length; i++) {
     ele = document.forms.$formname.elements[i];      ele = formname.elements[i];
     if(isStudent(ele) && rightSubForm(ele, which)) {      if(isStudent(ele) && rightSubForm(ele, which)) {
  ele.checked=value;   ele.checked=value;
     }      }
  }   }
     }      }
     function setAllCoursePersonnel(value, which) {      function setAllCoursePersonnel(value, which, formname) {
  var i;   var i;
  var ele;   var ele;
  for (i =0; i < document.forms.$formname.elements.length; i++) {   for (i =0; i < formname.elements.length; i++) {
     ele = document.forms.$formname.elements[i];      ele = formname.elements[i];
     if(!isStudent(ele) && rightSubForm(ele, which)) {      if(!isStudent(ele) && rightSubForm(ele, which)) {
  ele.checked = value;   ele.checked = value;
     }      }
  }   }
     }      }
     function setSection(which, value, subform) {      function setSection(which, value, subform, formname) {
  var i;   var i;
  var ele;   var ele;
  for (i =0; i < document.forms.$formname.elements.length; i++) {   for (i =0; i < formname.elements.length; i++) {
     ele = document.forms.$formname.elements[i];      ele = formname.elements[i];
     if (ele.value.indexOf(':') != -1) {      if (ele.value.indexOf(':') != -1) {
  if ((section(ele) == which) && rightSubForm(ele, subform)) {   if ((section(ele) == which) && rightSubForm(ele, subform)) {
     ele.checked = value;      ele.checked = value;
Line 249  sub render_student_list { Line 270  sub render_student_list {
  }   }
     }      }
   
     function setCheckboxes(listbox, which, value) {      function setCheckboxes(listbox, which, value, formname) {
  var k;   var k;
  var elem;   var elem;
  var what;   var what;
         elem = findElement(listbox);          elem = findElement(listbox, formname);
  if (elem != null) {   if (elem != null) {
     for (k = 0; k < elem.length; k++) {      for (k = 0; k < elem.length; k++) {
  if (elem.options[k].selected) {   if (elem.options[k].selected) {
     what = elem.options[k].text;      what = elem.options[k].value;
     if (what == 'All Students') {      if (what == 'allstudents') {
  setAllStudents(value, which);   setAllStudents(value, which, formname);
     } else if (what == 'All Course Personnel') {      } else if (what == 'allpersonnel') {
  setAllCoursePersonnel(value, which);   setAllCoursePersonnel(value, which, formname);
     } else if (what == 'No Section') {      } else if (what == 'nosection') {
  setSection('',value, which);   setSection('',value, which, formname);
     } else {      } else {
  setSection(what, value, which);   setSection(what, value, which, formname);
     }      }
  }   }
     }      }
  }   }
     }      }
     function selectSections(listbox, which) {      function selectSections(listbox, which, formname) {
  setCheckboxes(listbox, which, true);   setCheckboxes(listbox, which, true, formname);
   
     }      }
     function unselectSections(listbox, which) {      function unselectSections(listbox, which, formname) {
  setCheckboxes(listbox, which, false);   setCheckboxes(listbox, which, false, formname);
     }      }
   
 // -->  // -->
Line 307  SCRIPT Line 328  SCRIPT
  if ($size > 5) {    if ($size > 5) { 
     $size = 5;       $size = 5; 
  }   }
  $result .= '<select multiple name="'.$formprefix   $result .= '<select multiple="multiple" name="'.$formprefix
     .'.chosensections" size="'.$size.'">'."\n";      .'.chosensections" size="'.$size.'">'."\n";
  $result .= '<option name="allstudents">All Students</option>';   $result .= '<option value="allstudents">'.&mt('All Students').'</option>';
  $result .= '<option name="allpersonnel">All Course Personnel</option>';   $result .= '<option value="allpersonnel">'.&mt('All Course Personnel').'</option>';
  $result .= '<option name="nosection">No Section</option>';   $result .= '<option value="nosection">'.&mt('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 value="'.$sec.'">'.$sec.'</option>'."\n";
  }   }
  $result .= '</td><td valign="top">';   $result .= '</select></td><td valign="top">';
  $result .= '<input type="button" name="'.$formprefix.'.select" value="Select" onclick='   $result .= '<input type="button" name="'.$formprefix.'.select" value="'.&mt('Select').'" onclick='
     ."'selectSections(\"$formprefix.chosensections\", \"$formprefix\")'".' /></td>';      ."'selectSections(\"$formprefix.chosensections\", \"$formprefix\", document.forms.$formname)'".' /></td>';
  $result .= '<td valign="top"><input type="button" name="'.$formprefix   $result .= '<td valign="top"><input type="button" name="'.$formprefix
     .'.unselect" value="Unselect"  onclick='.      .'.unselect" value="'.&mt('Unselect').'"  onclick='.
     "'unselectSections(\"$formprefix.chosensections\", \"$formprefix\")' ".' /></td></tr></table>';      "'unselectSections(\"$formprefix.chosensections\", \"$formprefix\", document.forms.$formname)' ".' /></td></tr></table>';
     }      }
   
     #  Now we list the students, but the form element type      #  Now we list the students, but the form element type
Line 331  SCRIPT Line 352  SCRIPT
   
     $result .= &Apache::loncommon::start_data_table();      $result .= &Apache::loncommon::start_data_table();
     $result .= &Apache::loncommon::start_data_table_header_row();      $result .= &Apache::loncommon::start_data_table_header_row();
     $result .= '<th></th><th>Name</th>'."\n";      $result .= '<th></th><th>'.&mt('Name').'</th>'."\n";
     $result .= '    <th>Section</th>'."\n";      $result .= '    <th>'.&mt('Section').'</th>'."\n";
     $result .= '    <th>Status</th>'."\n";      $result .= '    <th>'.&mt('Status').'</th>'."\n";
     $result .= '    <th>Role</th>'."\n";      $result .= '    <th>'.&mt('Role').'</th>'."\n";
     $result .= '    <th>Username : Domain</th>'."\n";      $result .= '    <th>'.&mt('Username : Domain').'</th>'."\n";
     $result .= &Apache::loncommon::end_data_table_header_row();      $result .= &Apache::loncommon::end_data_table_header_row();
   
     my $input_type;      my $input_type;
Line 349  SCRIPT Line 370  SCRIPT
     for my $student (@$students) {      for my $student (@$students) {
  $result .= &Apache::loncommon::start_data_table_row().   $result .= &Apache::loncommon::start_data_table_row().
     '<td><input type="'.$input_type.'"  name="'.      '<td><input type="'.$input_type.'"  name="'.
     $resultname.".forminput".'"';      $resultname."_forminput".'"';
  my $user    = $student->[0];   my $user    = $student->[0];
   
  # Figure out which students are checked by default...   # Figure out which students are checked by default...
Line 382  SCRIPT Line 403  SCRIPT
         . '</td>'.&Apache::loncommon::end_data_table_row().          . '</td>'.&Apache::loncommon::end_data_table_row().
  "\n";   "\n";
     }      }
     $result .= &Apache::loncommon::end_data_table().      $result .= &Apache::loncommon::end_data_table();
  " <br /> <hr />\n";      if ($context ne 'email') {
    $result .= "<br /> <hr />\n";
       }
   
     return $result;      return $result;
 }  }

Removed from v.1.5  
changed lines
  Added in v.1.16


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