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

version 1.139, 2006/05/05 10:59:51 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">';
  $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 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 2370  sub render_student_list { Line 2493  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 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 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 2735  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:
     #      #
     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( $future_members,
       $future_members,   "future",
       "future",   \%defaultUsers,
       \%defaultUsers);   $self->{'multichoice'},
    $self->{'variable'},
    0);
    # Past 
   
    $result .= &render_student_list($expired_members,
    "past",
    \%defaultUsers,
    $self->{'multichoice'},
    $self->{'variable'},
    0);
     }      }
   
   
Line 3232  sub start_section { Line 3133  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 3217  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.146


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