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

version 1.143, 2006/05/09 18:15:39 version 1.146, 2006/05/09 22:15:30
Line 2282  use Apache::lonnet; Line 2282  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 2291  use Apache::lonnet; Line 2290  use Apache::lonnet;
 #                    set of students won't collide.  #                    set of students won't collide.
 #     $defaultusers - reference to a hash containng  #     $defaultusers - reference to a hash containng
 #                     the set of users that should be on or off.  #                     the set of users that should be on or off.
   #     $multiselect  - True if multiselect allowed.
   #     $resultname   - Name of result variable.
   #     $javascript   - If true, the javascript to run this is output
   #                     This should be true for the first call for a page
   #                     and false for all other calls... only matters if
   #                     multiselect is true.
 #  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 ($self,      my ($students, $formprefix, $defaultusers,
  $sections, $students, $formprefix, $defaultusers) = @_;   $multiselect, $resultname, $javascript) = @_;
   
     my $multiselect = $self->{'multichoice'};  
     my $result = "";      my $result = "";
   
       if ($javascript && $multiselect) {
           $result .= <<SCRIPT;
   <script type="text/javascript">
   // <!--
   
       function findElement(name) {
    var i;
    var ele;
    for(i =0; i < document.forms.helpform.elements.length; i++) {
       ele = document.forms.helpform.elements[i];
       if(ele.name == name) {
    return ele;
       }
    }
    return null;
       }
       function isStudent(element) {
    if(element.value.indexOf(":Student") != -1) {
       return 1;
    }
    return 0;
       }
       function section(element) {
    var i;
    var info;
    if (element.value.indexOf(':') != -1) {
       info = element.value.split(':');
       return info[2];
    } else {
       return "";
    }
       }
       function rightSubForm(element, which) {
    if (element.value.indexOf(which) != -1) {
       return true;
    } else {
       return false;
    }
       }
   
       function setAllStudents(value, which) {
    var i;
    var ele;
    for (i =0; i < document.forms.helpform.elements.length; i++) {
       ele = document.forms.helpform.elements[i];
       if(isStudent(ele) && rightSubForm(ele, which)) {
    ele.checked=value;
       }
    }
       }
       function setAllCoursePersonnel(value, which) {
    var i;
    var ele;
    for (i =0; i < document.forms.helpform.elements.length; i++) {
       ele = document.forms.helpform.elements[i];
       if(!isStudent(ele) && rightSubForm(ele, which)) {
    ele.checked = value;
       }
    }
       }
       function setSection(which, value, subform) {
    var i;
    var ele;
    for (i =0; i < document.forms.helpform.elements.length; i++) {
       ele = document.forms.helpform.elements[i];
       if (ele.value.indexOf(':') != -1) {
    if ((section(ele) == which) && rightSubForm(ele, subform)) {
       ele.checked = value;
    }
       }
    }
       }
   
       function setCheckboxes(listbox, which, value) {
    var k;
    var elem;
    var what;
           elem = findElement(listbox);
    if (elem != null) {
       for (k = 0; k < elem.length; k++) {
    if (elem.options[k].selected) {
       what = elem.options[k].text;
       if (what == 'All Students') {
    setAllStudents(value, which);
       } else if (what == 'All Course Personnel') {
    setAllCoursePersonnel(value, which);
       } else if (what == 'No Section') {
    setSection('',value, which);
       } else {
    setSection(what, value, which);
       }
    }
       }
    }
       }
       function selectSections(listbox, which) {
    setCheckboxes(listbox, which, true);
   
       }
       function unselectSections(listbox, which) {
    setCheckboxes(listbox, which, false);
       }
   
   // -->
   </script>
   SCRIPT
   
       }
   
     # If multiple selections are allowed, we have a listbox      # If multiple selections are allowed, we have a listbox
     # at the top which allows quick selections from each section      # at the top which allows quick selections from each section
     # 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 2319  sub render_student_list { Line 2442  sub render_student_list {
  $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 2352  sub render_student_list { Line 2475  sub render_student_list {
     my $checked = 0;      my $checked = 0;
     for my $student (@$students) {      for my $student (@$students) {
  $result .= '<tr><td><input type="'.$input_type.'"  name="'.   $result .= '<tr><td><input type="'.$input_type.'"  name="'.
     $self->{'variable'}.".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 2362  sub render_student_list { Line 2485  sub render_student_list {
  $result .= ' checked ="checked" ';   $result .= ' checked ="checked" ';
  $checked = 1;   $checked = 1;
     }      }
  } elsif (!$self->{'multichoice'} && !$checked) {   } elsif (!$multiselect  && !$checked) {
     $result .= ' checked="checked" ';      $result .= ' checked="checked" ';
     $checked = 1; # First one for radio if no default specified.      $checked = 1; # First one for radio if no default specified.
  }   }
Line 2433  sub render { Line 2556  sub render {
     my $buttons = '';      my $buttons = '';
     my $var = $self->{'variable'};      my $var = $self->{'variable'};
   
     if ($self->{'multichoice'}) {  
         $result = <<SCRIPT;  
 <script type="text/javascript">  
 // <!--  
   
     function findElement(name) {  
  var i;  
  var ele;  
  for(i =0; i < document.forms.helpform.elements.length; i++) {  
     ele = document.forms.helpform.elements[i];  
     if(ele.name == name) {  
  return ele;  
     }  
  }  
  return null;  
     }  
     function isStudent(element) {  
  if(element.value.indexOf(":Student") != -1) {  
     return 1;  
  }  
  return 0;  
     }  
     function section(element) {  
  var i;  
  var info;  
  if (element.value.indexOf(':') != -1) {  
     info = element.value.split(':');  
     return info[2];  
  } else {  
     return "";  
  }  
     }  
     function rightSubForm(element, which) {  
  if (element.value.indexOf(which) != -1) {  
     return true;  
  } else {  
     return false;  
  }  
     }  
   
     function setAllStudents(value, which) {  
  var i;  
  var ele;  
  for (i =0; i < document.forms.helpform.elements.length; i++) {  
     ele = document.forms.helpform.elements[i];  
     if(isStudent(ele) && rightSubForm(ele, which)) {  
  ele.checked=value;  
     }  
  }  
     }  
     function setAllCoursePersonnel(value, which) {  
  var i;  
  var ele;  
  for (i =0; i < document.forms.helpform.elements.length; i++) {  
     ele = document.forms.helpform.elements[i];  
     if(!isStudent(ele) && rightSubForm(ele, which)) {  
  ele.checked = value;  
     }  
  }  
     }  
     function setSection(which, value, subform) {  
  var i;  
  var ele;  
  for (i =0; i < document.forms.helpform.elements.length; i++) {  
     ele = document.forms.helpform.elements[i];  
     if (ele.value.indexOf(':') != -1) {  
  if ((section(ele) == which) && rightSubForm(ele, subform)) {  
     ele.checked = value;  
  }  
     }  
  }  
     }  
   
     function setCheckboxes(listbox, which, value) {  
  var k;  
  var elem;  
  var what;  
         elem = findElement(listbox);  
  if (elem != null) {  
     for (k = 0; k < elem.length; k++) {  
  if (elem.options[k].selected) {  
     what = elem.options[k].text;  
     if (what == 'All Students') {  
  setAllStudents(value, which);  
     } else if (what == 'All Course Personnel') {  
  setAllCoursePersonnel(value, which);  
     } else if (what == 'No Section') {  
  setSection('',value, which);  
     } else {  
  setSection(what, value, which);  
     }  
  }  
     }  
  }  
     }  
     function selectSections(listbox, which) {  
  setCheckboxes(listbox, which, true);  
   
     }  
     function unselectSections(listbox, which) {  
  setCheckboxes(listbox, which, false);  
     }  
   
 // -->  
 </script>  
 SCRIPT  
   
         my %lt=&Apache::lonlocal::texthash(  
                     'ocs'  => "Select Only Current Students",  
                     'ues'  => "Unselect Expired Students",  
                     'sas'  => "Select All Students",  
                     'uas'  => "Unselect All Students",  
                     'sfsg' => "Select Current Students for Section/Group",  
     'ufsg' => "Unselect for Section/Group");  
    
         $buttons = <<BUTTONS;  
 <br />  
 <table>  
     
   <tr>  
      <td><input type="button" onclick="checkall(true, '$var')" value="$lt{'sas'}" /></td>  
      <td> <input type="button" onclick="checkall(false, '$var')" value="$lt{'uas'}" /><br /></td>  
   </tr>  
     
 </table>  
 <br />  
 BUTTONS  
 #    $result .= $buttons;     
   
 }  
   
     if (defined $self->{ERROR_MSG}) {      if (defined $self->{ERROR_MSG}) {
         $result .= '<font color="#FF0000">' . $self->{ERROR_MSG} . '</font><br /><br />';          $result .= '<font color="#FF0000">' . $self->{ERROR_MSG} . '</font><br /><br />';
Line 2666  BUTTONS Line 2659  BUTTONS
     }      }
   
   
     # 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 .= $self->render_student_list(\%sections,      $result .= &render_student_list( $current_members,
   $current_members,       "current",
   "current",       \%defaultUsers,
   \%defaultUsers);       $self->{'multichoice'},
        $self->{'variable'},
        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 2709  BUTTONS Line 2676  BUTTONS
   
  # And future.   # And future.
   
  $result .= $self->render_student_list(\%sections,   $result .= &render_student_list( $future_members,
       $future_members,   "future",
       "future",   \%defaultUsers,
       \%defaultUsers);   $self->{'multichoice'},
    $self->{'variable'},
    0);
  # Past    # Past 
   
  $result .= $self->render_student_list(\%sections,   $result .= &render_student_list($expired_members,
       $expired_members,   "past",
       "past",   \%defaultUsers,
       \%defaultUsers);   $self->{'multichoice'},
    $self->{'variable'},
    0);
     }      }
   
   

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


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