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

version 1.139, 2006/05/05 10:59:51 version 1.145, 2006/05/09 21:44:18
Line 2291  use Apache::lonnet; Line 2291  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 (
  $sections, $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.
Line 2308  sub render_student_list { Line 2423  sub render_student_list {
     if ($multiselect) {      if ($multiselect) {
  $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 2323  sub render_student_list { Line 2438  sub render_student_list {
     $result .= '<option name="'.$sec.'">'.$sec.'</option>'."\n";      $result .= '<option name="'.$sec.'">'.$sec.'</option>'."\n";
  }   }
  $result .= '</td><td valign="top">';   $result .= '</td><td valign="top">';
  $result .= '<input type="button" name="'.$formprefix.'.select" value="Select" onClick='   $result .= '<input type="button" name="'.$formprefix.'.select" value="Select" onclick='
     ."'selectSections(\"$formprefix.chosensections\")'".' /></td>';      ."'selectSections(\"$formprefix.chosensections\", \"$formprefix\")'".' /></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="Unselect"  onclick='.
     "'unselectSections(\"$formprefix.chosensections\")' ".' /></td></tr></table>';      "'unselectSections(\"$formprefix.chosensections\", \"$formprefix\")' ".' /></td></tr></table>';
     }      }
   
     #  Now we list the students, but the form element type      #  Now we list the students, but the form element type
Line 2352  sub render_student_list { Line 2467  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 2477  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 2370  sub render_student_list { Line 2485  sub render_student_list {
       .$student->[2] . ':'        .$student->[2] . ':'
       .$student->[1] . ':'        .$student->[1] . ':'
       .$student->[3] . ':'        .$student->[3] . ':'
       .$student->[4], "<>&\"'")        .$student->[4] . ":"
         .$formprefix,   "<>&\"'")
     ."\" /></td><td>\n";      ."\" /></td><td>\n";
  $result .= HTML::Entities::encode($student->[1], '<>&"')   $result .= HTML::Entities::encode($student->[1], '<>&"')
         . '</td><td align="center" >'."\n";          . '</td><td align="center" >'."\n";
Line 2432  sub render { Line 2548  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 setAllStudents(value) {  
  var i;  
  var ele;  
  for (i =0; i < document.forms.helpform.elements.length; i++) {  
     ele = document.forms.helpform.elements[i];  
     if(isStudent(ele)) {  
  ele.checked=value;  
     }  
  }  
     }  
     function setAllCoursePersonnel(value) {  
  var i;  
  var ele;  
  for (i =0; i < document.forms.helpform.elements.length; i++) {  
     ele = document.forms.helpform.elements[i];  
     if(!isStudent(ele)) {  
  ele.checked = value;  
     }  
  }  
     }  
     function setSection(which, value) {  
  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) {  
     ele.checked = value;  
  }  
     }  
  }  
     }  
   
     function setCheckboxes(listbox, 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);  
     } else if (what == 'All Course Personnel') {  
  setAllCoursePersonnel(value);  
     } else if (what == 'No Section') {  
  setSection('',value);  
     } else {  
  setSection(what, value);  
     }  
  }  
     }  
  }  
     }  
     function selectSections(listbox) {  
  setCheckboxes(listbox, true);  
   
     }  
     function unselectSections(listbox) {  
  setCheckboxes(listbox, false);  
     }  
     /* ----------------------------- */  
       
     function checkall(value, checkName) {  
  for (i=0; i<document.forms.helpform.elements.length; i++) {  
             ele = document.forms.helpform.elements[i];  
             if (ele.name == checkName + '.forminput') {  
                 document.forms.helpform.elements[i].checked=value;  
             }  
         }  
     }  
     function checksec(value) {  
  for (i=0; i<document.forms.helpform.elements.length; i++) {  
     comp = document.forms.helpform.elements.chksec.value;  
             if (document.forms.helpform.elements[i].value.indexOf(':'+comp+':') != -1) {  
  if (document.forms.helpform.elements[i].value.indexOf(':Active') != -1) {  
     document.forms.helpform.elements[i].checked=value;  
  }  
             }  
         }  
     }  
     function checkactive() {  
  for (i=0; i<document.forms.helpform.elements.length; i++) {  
             if (document.forms.helpform.elements[i].value.indexOf(':Active') != -1) {  
                 document.forms.helpform.elements[i].checked=true;  
             }   
         }  
     }  
     function checkexpired()  {  
  for (i=0; i<document.forms.helpform.elements.length; i++) {  
             if (document.forms.helpform.elements[i].value.indexOf(':Expired') != -1) {  
                 document.forms.helpform.elements[i].checked=true;  
             }   
         }  
     }  
     function uncheckexpired() {  
  for (i=0; i<document.forms.helpform.elements.length; i++) {  
             if (document.forms.helpform.elements[i].value.indexOf(':Expired') != -1) {  
                 document.forms.helpform.elements[i].checked=false;  
             }   
         }  
     }  
     function getDesiredState() {     // Return desired person state radio value.  
         numRadio = document.forms.helpform.personstate.length;  
         for (i =0; i < numRadio; i++) {  
     if (document.forms.helpform.personstate[i].checked) {  
                 return document.forms.helpform.personstate[i].value;  
             }  
         }  
         return "";  
     }  
   
     function checksections(value) {    // Check selected sections.  
         numSections  = document.forms.helpform.chosensections.length;  
  desiredState = getDesiredState();  
   
  for (var option = 0; option < numSections; option++) {  
     if(document.forms.helpform.chosensections.options[option].selected) {  
  section = document.forms.helpform.chosensections.options[option].text;  
  if (section == "none") {  
     section ="";  
  }  
  for (i = 0; i < document.forms.helpform.elements.length; i++ ) {  
     if (document.forms.helpform.elements[i].value.indexOf(':') != -1) {  
  info = document.forms.helpform.elements[i].value.split(':');  
  hisSection = info[2];  
  hisState   = info[4];  
  if (desiredState == hisState ||  
     desiredState == "All") {  
     if(hisSection == section ||  
        section =="" ) {  
  document.forms.helpform.elements[i].checked = value;  
     }  
  }  
     }  
  }  
             }  
  }  
    }  
 // -->  
 </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 2766  BUTTONS Line 2682  BUTTONS
   
     #   Current personel      #   Current personel
   
     $result .= $self->render_student_list(\%sections,      $result .= &render_student_list(\%sections,
   $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:
     #      #
     if (!$self->{'activeonly'} && ((scalar @$expired_members) > 0)) {      if (!$self->{'activeonly'} && ((scalar @$expired_members) > 0)) {
   
  # Past   
   
  $result .= $self->render_student_list(\%sections,  
       $expired_members,  
       "past",  
       \%defaultUsers);  
   
  # And future.   # And future.
   
  $result .= $self->render_student_list(\%sections,   $result .= &render_student_list(\%sections,
       $future_members,        $future_members,
       "future",        "future",
       \%defaultUsers);        \%defaultUsers,
    $self->{'multichoice'},
    $self->{'variable'},
    0);
    # Past 
   
    $result .= &render_student_list(\%sections,
         $expired_members,
         "past",
         \%defaultUsers,
    $self->{'multichoice'},
    $self->{'variable'},
    0);
     }      }
   
   
Line 3232  sub start_section { Line 3156  sub start_section {
   
     my $section = Apache::loncoursedata::CL_SECTION();      my $section = Apache::loncoursedata::CL_SECTION();
     my $classlist = Apache::loncoursedata::get_classlist();      my $classlist = Apache::loncoursedata::get_classlist();
     foreach (keys %$classlist) {      foreach my $user (keys(%$classlist)) {
         my $sectionName = $classlist->{$_}->[$section];          my $section_name = $classlist->{$user}[$section];
         if (!$sectionName) {          if (!$section_name) {
             $choices{"No section assigned"} = "";              $choices{"No section assigned"} = "";
         } else {          } else {
             $choices{$sectionName} = $sectionName;              $choices{$section_name} = $section_name;
         }          }
     }       } 
         
     for my $sectionName (sort(keys(%choices))) {      if (exists($choices{"No section assigned"})) {
  push @{$paramHash->{CHOICES}}, [$sectionName, $sectionName];   push(@{$paramHash->{CHOICES}}, 
        ['No section assigned','No section assigned']);
    delete($choices{"No section assigned"});
       }
       for my $section_name (sort {lc($a) cmp lc($b) } (keys(%choices))) {
    push @{$paramHash->{CHOICES}}, [$section_name, $section_name];
     }      }
     return if ($token->[2]{'onlysections'});      return if ($token->[2]{'onlysections'});
   
     # add in groups to the end of the list      # add in groups to the end of the list
     my %curr_groups;      my %curr_groups = &Apache::loncommon::coursegroups();
     if (&Apache::loncommon::coursegroups(\%curr_groups)) {      foreach my $group_name (sort(keys(%curr_groups))) {
  foreach my $group_name (sort(keys(%curr_groups))) {   push(@{$paramHash->{CHOICES}}, [$group_name, $group_name]);
     push(@{$paramHash->{CHOICES}}, [$group_name, $group_name]);  
  }  
     }      }
 }      }    
   
Line 3313  sub start_group { Line 3240  sub start_group {
     # Populate the CHOICES element      # Populate the CHOICES element
     my %choices;      my %choices;
   
     my %curr_groups;      my %curr_groups = &Apache::loncommon::coursegroups();
     if (&Apache::loncommon::coursegroups(\%curr_groups)) {      foreach my $group_name (sort {lc($a) cmp lc($b)} (keys(%curr_groups))) {
  foreach my $group_name (sort(keys(%curr_groups))) {   push(@{$paramHash->{CHOICES}}, [$group_name, $group_name]);
     push(@{$paramHash->{CHOICES}}, [$group_name, $group_name]);  
  }  
     }      }
 }  }
   

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


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