Diff for /loncom/interface/lonhelper.pm between versions 1.135 and 1.142

version 1.135, 2006/03/19 23:09:20 version 1.142, 2006/05/09 14:38:10
Line 184  use Apache::lonxml; Line 184  use Apache::lonxml;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonnet;  use Apache::lonnet;
   
   
 # Register all the tags with the helper, so the helper can   # Register all the tags with the helper, so the helper can 
 # push and pop them  # push and pop them
   
Line 1069  will be the state transistioned to if th Line 1070  will be the state transistioned to if th
 the choice is not multichoice. This will override the nextstate  the choice is not multichoice. This will override the nextstate
 passed to the parent C<choices> tag.  passed to the parent C<choices> tag.
   
   <choice> may optionally contain a 'relatedvalue' attribute, which
   if present will cause a text entry to appear to the right of the
   selection.  The value of the relatedvalue attribute is a variable
   into which the text entry will be stored e.g.:
   <choice computer='numberprovided" relatedvalue="num">Type the number in:</choice>
   
   <choice> may contain a relatededefault atribute which, if the
   relatedvalue attribute is present will be the initial value of the input
   box.
   
 =back  =back
   
 To create the choices programmatically, either wrap the choices in   To create the choices programmatically, either wrap the choices in 
Line 1159  sub start_choice { Line 1170  sub start_choice {
     my $computer = $token->[2]{'computer'};      my $computer = $token->[2]{'computer'};
     my $human = &mt(&Apache::lonxml::get_all_text('/choice',      my $human = &mt(&Apache::lonxml::get_all_text('/choice',
                                               $parser));                                                $parser));
     my $nextstate = $token->[2]{'nextstate'};      my $nextstate  = $token->[2]{'nextstate'};
     my $evalFlag = $token->[2]{'eval'};      my $evalFlag   = $token->[2]{'eval'};
       my $relatedVar = $token->[2]{'relatedvalue'}; 
       my $relatedDefault = $token->[2]{'relateddefault'};
     push @{$paramHash->{CHOICES}}, [&mtn($human), $computer, $nextstate,       push @{$paramHash->{CHOICES}}, [&mtn($human), $computer, $nextstate, 
                                     $evalFlag];                                      $evalFlag, $relatedVar, $relatedDefault];
     return '';      return '';
 }  }
   
Line 1272  BUTTONS Line 1285  BUTTONS
         }          }
         $result .= qq{id="id$id"};          $result .= qq{id="id$id"};
         my $choiceLabel = $choice->[0];          my $choiceLabel = $choice->[0];
         if ($choice->[4]) {  # if we need to evaluate this choice          if ($choice->[3]) {  # if we need to evaluate this choice
             $choiceLabel = "sub { my $helper = shift; my $state = shift;" .              $choiceLabel = "sub { my $helper = shift; my $state = shift;" .
                 $choiceLabel . "}";                  $choiceLabel . "}";
             $choiceLabel = eval($choiceLabel);              $choiceLabel = eval($choiceLabel);
             $choiceLabel = &$choiceLabel($helper, $self);              $choiceLabel = &$choiceLabel($helper, $self);
         }          }
         $result .= "/></td><td> ".qq{<label for="id$id">}.          $result .= "/></td><td> ".qq{<label for="id$id">}.
             $choiceLabel. "</label></td></tr>\n";              $choiceLabel. "</label></td>";
    if ($choice->[4]) {
       $result .='<td><input type="text" size="5" name="'
    .$choice->[4].'.forminput" value="'
                   .$choice->[5].'" /></td>';
    }
    $result .= "</tr>\n";
     }      }
     $result .= "</table>\n\n\n";      $result .= "</table>\n\n\n";
     $result .= $buttons;      $result .= $buttons;
Line 1313  sub postprocess { Line 1332  sub postprocess {
                 $helper->changeState($choice->[2]);                  $helper->changeState($choice->[2]);
             }              }
         }          }
    if ($choice->[4]) {
       my $varname = $choice->[4];
       $helper->{'VARS'}->{$varname} = $env{'form.'."$varname.forminput"};
    }
     }      }
     return 1;      return 1;
 }  }
Line 1554  sub render { Line 1577  sub render {
     my $date;      my $date;
   
     my $time=time;      my $time=time;
     $date = localtime($time);  
     $date->min(0);  
     my ($anytime,$onclick);      my ($anytime,$onclick);
   
     if (defined($self->{DEFAULT_VALUE})) {  
       # first check VARS for a valid new value from the user
       # then check DEFAULT_VALUE for a valid default time value
       # otherwise pick now as reasonably good time
   
       if (defined($helper->{VARS}{$var})
    &&  $helper->{VARS}{$var} > 0) {
    $date = localtime($helper->{VARS}{$var});
       } elsif (defined($self->{DEFAULT_VALUE})) {
         my $valueFunc = eval($self->{DEFAULT_VALUE});          my $valueFunc = eval($self->{DEFAULT_VALUE});
         die('Error in default value code for variable ' .           die('Error in default value code for variable ' . 
             $self->{'variable'} . ', Perl said: ' . $@) if $@;              $self->{'variable'} . ', Perl said: ' . $@) if $@;
         $time = &$valueFunc($helper, $self);          $time = &$valueFunc($helper, $self);
  if (lc($time) eq 'anytime') {   if (lc($time) eq 'anytime') {
     $anytime=1;      $anytime=1;
  } else {      $date = localtime(time);
       $date->min(0);
    } elsif (defined($time) && $time ne 0) {
     $date = localtime($time);      $date = localtime($time);
    } else {
       # leave date undefined so it'll default to now
  }   }
     } else {      }
   
       if (!defined($date)) {
    $date = localtime(time);
    $date->min(0);
     }      }
   
       &Apache::lonnet::logthis("date mode ");
   
     if ($anytime) {      if ($anytime) {
  $onclick = "onclick=\"javascript:updateCheck(this.form,'${var}anytime',false)\"";   $onclick = "onclick=\"javascript:updateCheck(this.form,'${var}anytime',false)\"";
     }      }
Line 1678  CHECK Line 1717  CHECK
  if ($anytime) {   if ($anytime) {
     $result.=' checked="checked" '      $result.=' checked="checked" '
  }   }
  $result.="name='${var}anytime'/>".&mt('Anytime').'</label>'   $result.="name='${var}anytime'/>".&mt('Any time').'</label>'
     }      }
     return $result;      return $result;
   
Line 1725  sub postprocess { Line 1764  sub postprocess {
  $helper->{VARS}->{$var} = $chosenDate;   $helper->{VARS}->{$var} = $chosenDate;
     }      }
   
       if (defined($self->{VALIDATOR})) {
    my $validator = eval($self->{VALIDATOR});
    die 'Died during evaluation of validator code; Perl said: ' . $@ if $@;
    my $invalid = &$validator($helper, $state, $self, $self->getValue());
    if ($invalid) {
       $self->{ERROR_MSG} = $invalid;
       return 0;
    }
       }
   
     if (defined($self->{NEXTSTATE})) {      if (defined($self->{NEXTSTATE})) {
         $helper->changeState($self->{NEXTSTATE});          $helper->changeState($self->{NEXTSTATE});
     }      }
Line 2226  use strict; Line 2275  use strict;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonnet;  use Apache::lonnet;
   
   #
   #  Utility function used when rendering the <student> tag.
   #  This function renders a segment of course personel
   #  Personel are broken up by the helper into past, current and
   #  future...each one gets is own subpage of selection.
   #  This sub renders one of these pages.
   #  Parameters:
   #     $sections    - Set of sections in the course (hash reference).
   #     $students    - Students in the section. (ref to array of references
   #                    to arrays).
   #     $formprefix  - form path prefix for form element names
   #                    This is used to make each form element
   #                    so that the segments having to do with each
   #                    set of students won't collide.
   #     $defaultusers - reference to a hash containng
   #                     the set of users that should be on or off.
   #  Returns:
   #     HTML  text to add to the rendering of the helper.
   #
   sub render_student_list {
       my ($self,
    $sections, $students, $formprefix, $defaultusers) = @_;
   
       my $multiselect = $self->{'multichoice'};
       my $result = "";
   
       # If multiple selections are allowed, we have a listbox
       # at the top which allows quick selections from each section
       # as well as from categories of personnel.
   
       if ($multiselect) {
    $result .= '<table><tr><td>';
   
    my $size = scalar(keys(%$sections));
    $size += 3; # We have allstudents allpersonel nosection too.
    if ($size > 5) { 
       $size = 5; 
    }
    $result .= '<select multiple name="'.$formprefix
       .'.chosensections" size="'.$size.'">'."\n";
    $result .= '<option name="allstudents">All Students</option>';
    $result .= '<option name="allpersonnel">All Course Personnel</option>';
    $result .= '<option name="nosection">No Section</option>';
    $result .= "\n";
    foreach my $sec (sort {lc($a) cmp lc($b)} (keys(%$sections))) {
       $result .= '<option name="'.$sec.'">'.$sec.'</option>'."\n";
    }
    $result .= '</td><td valign="top">';
    $result .= '<input type="button" name="'.$formprefix.'.select" value="Select" onclick='
       ."'selectSections(\"$formprefix.chosensections\", \"$formprefix\")'".' /></td>';
    $result .= '<td valign="top"><input type="button" name="'.$formprefix
       .'.unselect" value="Unselect"  onclick='.
       "'unselectSections(\"$formprefix.chosensections\", \"$formprefix\")' ".' /></td></tr></table>';
       }
   
       #  Now we list the students, but the form element type
       #  will depend on whether or not multiselect is true.
       #  True -> checkboxes.
       #  False -> radiobuttons.
   
       $result .= "<table border=\"2\">\n";
       $result .= '<tr><th></th><th align="center">Name</th>'."\n";
       $result .= '    <th align="center">Section</th>'."\n";
       $result .= '    <th align="center">Status</th>'."\n";
       $result .= '    <th align="center">Role</th>'."\n";
       $result .= '    <th align="center">Username : Domain</th></tr>'."\n";
   
       my $input_type;
       if ($multiselect) {
    $input_type = "checkbox";
       } else {
    $input_type = "radio";
       }
   
       my $checked = 0;
       for my $student (@$students) {
    $result .= '<tr><td><input type="'.$input_type.'"  name="'.
       $self->{'variable'}.".forminput".'"';
    my $user    = $student->[0];
   
    # Figure out which students are checked by default...
   
    if(%$defaultusers) {
       if (exists ($defaultusers->{$user})) {
    $result .= ' checked ="checked" ';
    $checked = 1;
       }
    } elsif (!$self->{'multichoice'} && !$checked) {
       $result .= ' checked="checked" ';
       $checked = 1; # First one for radio if no default specified.
    }
    $result .= ' value="'. HTML::Entities::encode($user .          ':'
         .$student->[2] . ':'
         .$student->[1] . ':'
         .$student->[3] . ':'
         .$student->[4] . ":"
         .$formprefix,   "<>&\"'")
       ."\" /></td><td>\n";
    $result .= HTML::Entities::encode($student->[1], '<>&"')
           . '</td><td align="center" >'."\n";
    $result .= HTML::Entities::encode($student->[2], '<>&"')
              . '</td><td align="center">'."\n";
    $result .= HTML::Entities::encode($student->[3], '<>&"')
           . '</td><td align="center">'."\n";
    $result .= HTML::Entities::encode($student->[4], '<>&"')
            . '</td><td align="center">'."\n";
    $result .= HTML::Entities::encode($student->[0], '<>&"')
           . '</td></tr>'."\n";
       }
       $result .=" </table> <br /> <hr />\n";
   
       return $result;
   }
   
 BEGIN {  BEGIN {
     &Apache::lonhelper::register('Apache::lonhelper::student',      &Apache::lonhelper::register('Apache::lonhelper::student',
                               ('student'));                                ('student'));
Line 2274  sub render { Line 2437  sub render {
         $result = <<SCRIPT;          $result = <<SCRIPT;
 <script type="text/javascript">  <script type="text/javascript">
 // <!--  // <!--
     function checkall(value, checkName) {  
  for (i=0; i<document.forms.helpform.elements.length; i++) {      function findElement(name) {
             ele = document.forms.helpform.elements[i];   var i;
             if (ele.name == checkName + '.forminput') {   var ele;
                 document.forms.helpform.elements[i].checked=value;   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 checksec(value) {      function isStudent(element) {
  for (i=0; i<document.forms.helpform.elements.length; i++) {   if(element.value.indexOf(":Student") != -1) {
     comp = document.forms.helpform.elements.chksec.value;      return 1;
             if (document.forms.helpform.elements[i].value.indexOf(':'+comp+':') != -1) {   }
  if (document.forms.helpform.elements[i].value.indexOf(':Active') != -1) {   return 0;
     document.forms.helpform.elements[i].checked=value;  
  }  
             }  
         }  
     }      }
     function checkactive() {      function section(element) {
  for (i=0; i<document.forms.helpform.elements.length; i++) {   var i;
             if (document.forms.helpform.elements[i].value.indexOf(':Active') != -1) {   var info;
                 document.forms.helpform.elements[i].checked=true;   if (element.value.indexOf(':') != -1) {
             }       info = element.value.split(':');
         }      return info[2];
    } else {
       return "";
    }
     }      }
     function checkexpired()  {      function rightSubForm(element, which) {
  for (i=0; i<document.forms.helpform.elements.length; i++) {   if (element.value.indexOf(which) != -1) {
             if (document.forms.helpform.elements[i].value.indexOf(':Expired') != -1) {      return true;
                 document.forms.helpform.elements[i].checked=true;   } else {
             }       return false;
         }   }
     }      }
     function uncheckexpired() {  
  for (i=0; i<document.forms.helpform.elements.length; i++) {      function setAllStudents(value, which) {
             if (document.forms.helpform.elements[i].value.indexOf(':Expired') != -1) {   var i;
                 document.forms.helpform.elements[i].checked=false;   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 getDesiredState() {     // Return desired person state radio value.      function setAllCoursePersonnel(value, which) {
         numRadio = document.forms.helpform.personstate.length;   var i;
         for (i =0; i < numRadio; i++) {   var ele;
     if (document.forms.helpform.personstate[i].checked) {   for (i =0; i < document.forms.helpform.elements.length; i++) {
                 return document.forms.helpform.personstate[i].value;      ele = document.forms.helpform.elements[i];
             }      if(!isStudent(ele) && rightSubForm(ele, which)) {
         }   ele.checked = value;
         return "";      }
    }
     }      }
       function setSection(which, value, subform) {
     function checksections(value) {    // Check selected sections.   var i;
         numSections  = document.forms.helpform.chosensections.length;   var ele;
  desiredState = getDesiredState();   for (i =0; i < document.forms.helpform.elements.length; i++) {
       ele = document.forms.helpform.elements[i];
  for (var option = 0; option < numSections; option++) {      if (ele.value.indexOf(':') != -1) {
     if(document.forms.helpform.chosensections.options[option].selected) {   if ((section(ele) == which) && rightSubForm(ele, subform)) {
  section = document.forms.helpform.chosensections.options[option].text;      ele.checked = value;
  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];      function setCheckboxes(listbox, which, value) {
  if (desiredState == hisState ||   var k;
     desiredState == "All") {   var elem;
     if(hisSection == section ||   var what;
        section =="" ) {          elem = findElement(listbox);
  document.forms.helpform.elements[i].checked = value;   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>
 SCRIPT  SCRIPT
Line 2374  SCRIPT Line 2560  SCRIPT
 </table>  </table>
 <br />  <br />
 BUTTONS  BUTTONS
     $result .= $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 2394  BUTTONS Line 2580  BUTTONS
  %defaultUsers = map { if ($_) {($_,1) } } @defaultUsers;   %defaultUsers = map { if ($_) {($_,1) } } @defaultUsers;
  delete($defaultUsers{''});   delete($defaultUsers{''});
     }      }
     my $choices = [];  
     my $expired_students = []; # Will hold expired students.  
   
       # 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'}) {      if ($self->{'coursepersonnel'}) {
Line 2412  BUTTONS Line 2618  BUTTONS
  @people = sort { $a->[0] cmp $b->[0] } @people;   @people = sort { $a->[0] cmp $b->[0] } @people;
   
  for my $person (@people) {   for my $person (@people) {
     push @$choices, [join(':', @$person), $person->[0], '', $_];      push @$current_members, [join(':', @$person), $person->[0], '', $_];
  }   }
     }      }
  }   }
     }      }
   
     # Constants  
     my $section = Apache::loncoursedata::CL_SECTION();  
     my $fullname = Apache::loncoursedata::CL_FULLNAME();  
     my $status = Apache::loncoursedata::CL_STATUS();  
   
     # Load up the students      # Load up the students
     my $classlist = &Apache::loncoursedata::get_classlist();      my $classlist = &Apache::loncoursedata::get_classlist();
Line 2433  BUTTONS Line 2635  BUTTONS
         }          }
         return $classlist->{$a}->[$fullname] cmp $classlist->{$b}->[$fullname];          return $classlist->{$a}->[$fullname] cmp $classlist->{$b}->[$fullname];
     } @keys;      } @keys;
     #   
     #  now add the fancy section choice... first enumerate the sections:  
     if ($self->{'multichoice'}) {  
  my %sections;  
  for my $key (@keys) {  
     my $section_name = $classlist->{$key}->[$section];  
     if ($section_name ne "") {  
  $sections{$section_name} = 1;  
     }  
  }  
  #  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 $choice_widget = '<select multiple name="chosensections" size="'.$size.'">'."\n";  
  foreach my $sec (sort {lc($a) cmp lc($b)} (keys(%sections))) {  
     $choice_widget .= "<option name=\"$sec\">$sec</option>\n";  
  }  
  $choice_widget .= "<option>none</option></select>\n";  
   
  # Build a table without any borders to contain the section based  
  # selection:  
   
  my $section_selectors =<<SECTIONSELECT;  
 <table border="0">  
   <tr valign="top">  
    <td>For Sections:</td><td>$choice_widget</td>  
    <td><label><input type="radio" name="personstate" value="Active" checked />  
                Current Students</label></td>  
    <td><label><input type="radio" name="personstate" value="All" />  
                All students</label></td>  
    <td><label><input type="radio" name="personstate" value="Expired" />  
                Expired Students</label></td>  
   </tr>  
   <tr>  
    <td><input type="button" value="Select" onclick="checksections(true);" /></td>  
    <td><input type="button" value="Unselect" onclick="checksections(false);" /></td></tr>  
 </table>  
 <br />  
 SECTIONSELECT  
          $result .= $section_selectors;  
     }  
   
     # username, fullname, section, type  
     for (@keys) {      for (@keys) {
   
  # We split the active students into the choices array and  
         # inactive ones into expired_students so that we can put them in 2 separate  
  # tables.  
   
  if ( $classlist->{$_}->[$status] eq   if ( $classlist->{$_}->[$status] eq
     'Active') {      'Active') {
     push @$choices, [$_, $classlist->{$_}->[$fullname],       push @$current_members, [$_, $classlist->{$_}->[$fullname], 
      $classlist->{$_}->[$section],       $classlist->{$_}->[$section],
      $classlist->{$_}->[$status], 'Student'];       $classlist->{$_}->[$status], 'Student'];
  } else {   } else {
     push @$expired_students, [$_, $classlist->{$_}->[$fullname],       #  Need to figure out if this user is future or
       $classlist->{$_}->[$section],      #  Expired... If the start date is in the future
       $classlist->{$_}->[$status], 'Student'];      #  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"];
       }
   
  }   }
     }      }
   
     my $name = $self->{'coursepersonnel'} ? &mt('Name') : &mt('Student Name');  
     my $type = 'radio';  
     if ($self->{'multichoice'}) { $type = 'checkbox'; }  
     $result .= "<table cellspacing='2' cellpadding='2' border='0'>\n";  
     $result .= "<tr><td></td><td align='center'><b>$name</b></td>".  
         "<td align='center'><b>" . &mt('Section') . "</b></td>" .   
  "<td align='center'><b>".&mt('Status')."</b></td>" .   
  "<td align='center'><b>" . &mt("Role") . "</b></td>" .  
  "<td align='center'><b>".&mt('Username').":".&mt('Domain')."</b></td></tr>";  
   
     my $checked = 0;      # Create a list of the sections that can be used to create the section 
     #      # selection list boxes:
     # Give the active students and staff:  
     #      #
     for my $choice (@$choices) {      my %sections;
         $result .= "<tr><td><input type='$type' name='" .      for my $key (@keys) {
             $self->{'variable'} . '.forminput' . "'";   my $section_name = $classlist->{$key}->[$section];
                if ($section_name ne "") {
  if (%defaultUsers) {      $sections{$section_name} = 1;
     my $user=$choice->[0];   }
     if (exists($defaultUsers{$user})) {      }
  $result .= " checked='checked' ";  
  $checked = 1;  
     }      if ($self->{'multichoice'}) {
  } elsif (!$self->{'multichoice'} && !$checked) {  
             $result .= " checked='checked' ";   #  The variable $choice_widget will have the html to make the choice 
             $checked = 1;   #  selector.
         }   my $size=5;
         $result .=   if (scalar(keys(%sections)) < 5) {
             " value='" . HTML::Entities::encode($choice->[0] . ':'       $size=scalar(keys(%sections));
  .$choice->[2] . ':'    }
  .$choice->[1] . ':'    my $result = '<select multiple name="chosensections" size="'.$size.'">'."\n";
  .$choice->[3], "<>&\"'")   foreach my $sec (sort {lc($a) cmp lc($b)} (keys(%sections))) {
             . "' /></td><td>"      $result .= "<option name=\"$sec\">$sec</option>\n";
             . HTML::Entities::encode($choice->[1],'<>&"')   }
             . "</td><td align='center'>"    $result .= "<option>none</option></select>\n";
             . HTML::Entities::encode($choice->[2],'<>&"')  
             . "</td>\n<td>"   
     . HTML::Entities::encode($choice->[3],'<>&"')  
             . "</td>\n<td>"   
     . HTML::Entities::encode($choice->[4],'<>&"')  
             . "</td>\n<td>"   
     . HTML::Entities::encode($choice->[0],'<>&"')  
     . "</td></tr>\n";  
     }      }
     $result .= "</table>\n\n";  
       #   Current personel
   
       $result .= $self->render_student_list(\%sections,
     $current_members,
     "current",
     \%defaultUsers);
   
   
     # 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_students) > 0)) {      if (!$self->{'activeonly'} && ((scalar @$expired_members) > 0)) {
  $result .= "<p>Inactive students: </p>\n";  
  $result .= <<INACTIVEBUTTONS;   # And future.
    <table>  
               <tr>   $result .= $self->render_student_list(\%sections,
                  <td><input type="button" value="Select expired" onclick="checkexpired();" /> </td>        $future_members,
  <td><input type="button" value="Unselect expired" onclick="uncheckexpired();" /></td>        "future",
               </tr>        \%defaultUsers);
            </table>   # Past 
 INACTIVEBUTTONS  
  $result .= "<table>\n";   $result .= $self->render_student_list(\%sections,
         $expired_members,
  for my $choice (@$expired_students) {        "past",
         $result .= "<tr><td><input type='$type' name='" .        \%defaultUsers);
             $self->{'variable'} . '.forminput' . "'";  
               
  if (%defaultUsers) {  
     my $user=$choice->[0];  
     if (exists($defaultUsers{$user})) {  
  $result .= " checked='checked' ";  
  $checked = 1;  
     }  
  } elsif (!$self->{'multichoice'} && !$checked) {  
             $result .= " checked='checked' ";  
             $checked = 1;  
         }  
         $result .=  
             " value='" . HTML::Entities::encode($choice->[0] . ':'   
  .$choice->[2] . ':'   
  .$choice->[1] . ':'   
  .$choice->[3], "<>&\"'")  
             . "' /></td><td>"  
             . HTML::Entities::encode($choice->[1],'<>&"')  
             . "</td><td align='center'>"   
             . HTML::Entities::encode($choice->[2],'<>&"')  
             . "</td>\n<td>"   
     . HTML::Entities::encode($choice->[3],'<>&"')  
             . "</td>\n<td>"   
     . HTML::Entities::encode($choice->[4],'<>&"')  
             . "</td>\n<td>"   
     . HTML::Entities::encode($choice->[0],'<>&"')  
     . "</td></tr>\n";      
  }  
  $result .= "</table>\n";  
   
     }      }
   
   
Line 3049  sub start_section { Line 3177  sub start_section {
     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 3115  sub start_group { Line 3241  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(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 3226  sub postprocess { Line 3350  sub postprocess {
   
     if (defined($self->{VALIDATOR})) {      if (defined($self->{VALIDATOR})) {
  my $validator = eval($self->{VALIDATOR});   my $validator = eval($self->{VALIDATOR});
  die 'Died during evaluation of evaulation code; Perl said: ' . $@ if $@;   die 'Died during evaluation of validator code; Perl said: ' . $@ if $@;
  my $invalid = &$validator($helper, $state, $self, $self->getValue());   my $invalid = &$validator($helper, $state, $self, $self->getValue());
  if ($invalid) {   if ($invalid) {
     $self->{ERROR_MSG} = $invalid;      $self->{ERROR_MSG} = $invalid;

Removed from v.1.135  
changed lines
  Added in v.1.142


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