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

version 1.146, 2006/05/09 22:15:30 version 1.159, 2006/12/12 20:41:08
Line 183  use Apache::File; Line 183  use Apache::File;
 use Apache::lonxml;  use Apache::lonxml;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonnet;  use Apache::lonnet;
   use Apache::longroup;
   use Apache::lonselstudent;
   use LONCAPA;
   
 # 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 362  use Apache::loncommon; Line 364  use Apache::loncommon;
 use Apache::File;  use Apache::File;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonnet;  use Apache::lonnet;
   use LONCAPA;
   
 sub new {  sub new {
     my $proto = shift;      my $proto = shift;
Line 467  sub _saveVars { Line 470  sub _saveVars {
 sub _varsInFile {  sub _varsInFile {
     my $self = shift;      my $self = shift;
     my @vars = ();      my @vars = ();
     for my $key (keys %{$self->{VARS}}) {      for my $key (keys(%{$self->{VARS}})) {
         push @vars, &Apache::lonnet::escape($key) . '=' .          push(@vars, &escape($key) . '=' . &escape($self->{VARS}->{$key}));
             &Apache::lonnet::escape($self->{VARS}->{$key});  
     }      }
     return join ('&', @vars);      return join ('&', @vars);
 }  }
Line 484  sub declareVar { Line 486  sub declareVar {
         $self->{VARS}->{$var} = '';          $self->{VARS}->{$var} = '';
     }      }
   
     my $envname = 'form.' . $var . '.forminput';      my $envname = 'form.' . $var . '_forminput';
     if (defined($env{$envname})) {      if (defined($env{$envname})) {
         if (ref($env{$envname})) {          if (ref($env{$envname})) {
             $self->{VARS}->{$var} = join('|||', @{$env{$envname}});              $self->{VARS}->{$var} = join('|||', @{$env{$envname}});
Line 1021  sub postprocess { Line 1023  sub postprocess {
 }  }
 1;  1;
   
   package Apache::lonhelper::helpicon;
   
   =pod
   
   =head1 Elements
   
   =head2 Element: helpiconX<helpicon, helper element>
   
   Helpicon elements add a help icon at the current location.
   Example:
   
      <helpicon file="Help">
        General Help
      </helpicon>
   
   In this example will generate a help icon to the Help.hlp url with a
   description of 'General Help'. The description is not required and if
   left out (Example: <helpicon file="Help" /> only the icon will be
   added.)
   
   =head3 Localization
   
   The description text will be run through the normalize_string function
   and that will be used as a call to &mt.
   
   =cut
   
   no strict;
   @ISA = ("Apache::lonhelper::element");
   use strict;
   use Apache::lonlocal;
   
   BEGIN {
       &Apache::lonhelper::register('Apache::lonhelper::helpicon',
    ('helpicon'));
   }
   
   sub new {
       my $ref = Apache::lonhelper::element->new();
       bless($ref);
   }
   
   # CONSTRUCTION: Construct the message element from the XML
   sub start_helpicon {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   
       if ($target ne 'helper') {
           return '';
       }
   
       $paramHash->{HELP_TEXT} = &mtn(&Apache::lonxml::get_all_text('/helpicon',
    $parser));
   
       $paramHash->{HELP_TEXT} =~s/^\s+//;
       $paramHash->{HELP_TEXT} =~s/\s+$//;
   
       if (defined($token->[2]{'file'})) {
           $paramHash->{HELP_FILE} = $token->[2]{'file'};
       }
       return '';
   }
   
   sub end_helpicon {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   
       if ($target ne 'helper') {
           return '';
       }
       Apache::lonhelper::helpicon->new();
       return '';
   }
   
   sub render {
       my $self = shift;
   
       my $text;
       if ( $self->{HELP_TEXT} ne '') {
    $text=&mtn($text);
       }
   
       return &Apache::loncommon::help_open_topic($self->{HELP_FILE},
          $text);
   }
   1;
   
   package Apache::lonhelper::skip;
   
   =pod
   
   =head1 Elements
   
   =head2 Element: skipX<skip>
   
   The <skip> tag allows you define conditions under which the current state 
   should be skipped over and define what state to skip to.
   
     <state name="SKIP">
       <skip>
          <clause>
            #some code that decides whether to skip the state or not
          </clause>
          <nextstate>FINISH</nextstate>
       </skip>
       <message nextstate="FINISH">A possibly skipped state</message>
     </state>
   
   =cut
   
   no strict;
   @ISA = ("Apache::lonhelper::element");
   use strict;
   
   BEGIN {
       &Apache::lonhelper::register('Apache::lonhelper::skip',
    ('skip'));
   }
   
   sub new {
       my $ref = Apache::lonhelper::element->new();
       bless($ref);
   }
   
   sub start_skip {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   
       if ($target ne 'helper') {
           return '';
       }
       # let <cluase> know what text to skip to
       $paramHash->{SKIPTAG}='/skip';
       return '';
   }
   
   sub end_skip {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   
       if ($target ne 'helper') {
           return '';
       }
       Apache::lonhelper::skip->new();
       return '';
   }
   
   sub render {
       my $self = shift;
       return '';
   }
   # If a NEXTSTATE is set, switch to it
   sub preprocess {
       my ($self) = @_;
   
       if (defined($self->{NEXTSTATE})) {
           $helper->changeState($self->{NEXTSTATE});
       }
   
       return 1;
   }
   
   1;
   
 package Apache::lonhelper::choices;  package Apache::lonhelper::choices;
   
 =pod  =pod
Line 1203  sub render { Line 1365  sub render {
     function checkall(value, checkName) {      function checkall(value, checkName) {
  for (i=0; i<document.forms.helpform.elements.length; i++) {   for (i=0; i<document.forms.helpform.elements.length; i++) {
             ele = document.forms.helpform.elements[i];              ele = document.forms.helpform.elements[i];
             if (ele.name == checkName + '.forminput') {              if (ele.name == checkName + '_forminput') {
                 document.forms.helpform.elements[i].checked=value;                  document.forms.helpform.elements[i].checked=value;
             }              }
         }          }
Line 1276  BUTTONS Line 1438  BUTTONS
     foreach my $choice (@{$self->{CHOICES}}) {      foreach my $choice (@{$self->{CHOICES}}) {
         my $id = &new_id();          my $id = &new_id();
         $result .= "<tr>\n<td width='20'>&nbsp;</td>\n";          $result .= "<tr>\n<td width='20'>&nbsp;</td>\n";
         $result .= "<td valign='top'><input type='$type' name='$var.forminput'"          $result .= "<td valign='top'><input type='$type' name='${var}_forminput'"
             . " value='" .               . " value='" . 
             HTML::Entities::encode($choice->[1],"<>&\"'")               HTML::Entities::encode($choice->[1],"<>&\"'") 
             . "'";              . "'";
Line 1295  BUTTONS Line 1457  BUTTONS
             $choiceLabel. "</label></td>";              $choiceLabel. "</label></td>";
  if ($choice->[4]) {   if ($choice->[4]) {
     $result .='<td><input type="text" size="5" name="'      $result .='<td><input type="text" size="5" name="'
  .$choice->[4].'.forminput" value="'   .$choice->[4].'_forminput" value="'
                 .$choice->[5].'" /></td>';                  .$choice->[5].'" /></td>';
  }   }
  $result .= "</tr>\n";   $result .= "</tr>\n";
Line 1310  BUTTONS Line 1472  BUTTONS
 # given, switch to it  # given, switch to it
 sub postprocess {  sub postprocess {
     my $self = shift;      my $self = shift;
     my $chosenValue = $env{'form.' . $self->{'variable'} . '.forminput'};      my $chosenValue = $env{'form.' . $self->{'variable'} . '_forminput'};
   
     if (!defined($chosenValue) && !$self->{'allowempty'}) {      if (!defined($chosenValue) && !$self->{'allowempty'}) {
         $self->{ERROR_MSG} =           $self->{ERROR_MSG} = 
Line 1334  sub postprocess { Line 1496  sub postprocess {
         }          }
  if ($choice->[4]) {   if ($choice->[4]) {
     my $varname = $choice->[4];      my $varname = $choice->[4];
     $helper->{'VARS'}->{$varname} = $env{'form.'."$varname.forminput"};      $helper->{'VARS'}->{$varname} = $env{'form.'."${varname}_forminput"};
  }   }
     }      }
     return 1;      return 1;
Line 1443  sub render { Line 1605  sub render {
  $checkedChoices{$self->{CHOICES}->[0]->[1]} = 1;   $checkedChoices{$self->{CHOICES}->[0]->[1]} = 1;
     }      }
   
     $result .= "<select name='${var}.forminput'>\n";      $result .= "<select name='${var}_forminput'>\n";
     foreach my $choice (@{$self->{CHOICES}}) {      foreach my $choice (@{$self->{CHOICES}}) {
         $result .= "<option value='" .           $result .= "<option value='" . 
             HTML::Entities::encode($choice->[1],"<>&\"'")               HTML::Entities::encode($choice->[1],"<>&\"'") 
Line 1469  sub render { Line 1631  sub render {
 # given, switch to it  # given, switch to it
 sub postprocess {  sub postprocess {
     my $self = shift;      my $self = shift;
     my $chosenValue = $env{'form.' . $self->{'variable'} . '.forminput'};      my $chosenValue = $env{'form.' . $self->{'variable'} . '_forminput'};
   
     if (!defined($chosenValue) && !$self->{'allowempty'}) {      if (!defined($chosenValue) && !$self->{'allowempty'}) {
         $self->{ERROR_MSG} = "You must choose one or more choices to" .          $self->{ERROR_MSG} = "You must choose one or more choices to" .
Line 1608  sub render { Line 1770  sub render {
  $date->min(0);   $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 2024  sub render { Line 2184  sub render {
     function checkall(value, checkName) {      function checkall(value, checkName) {
  for (i=0; i<document.forms.helpform.elements.length; i++) {   for (i=0; i<document.forms.helpform.elements.length; i++) {
             ele = document.forms.helpform.elements[i];              ele = document.forms.helpform.elements[i];
             if (ele.name == checkName + '.forminput') {              if (ele.name == checkName + '_forminput') {
                 document.forms.helpform.elements[i].checked=value;                  document.forms.helpform.elements[i].checked=value;
             }              }
         }          }
Line 2123  BUTTONS Line 2283  BUTTONS
     }      }
     $col .=       $col .= 
                         "<td align='center'><input type='checkbox' name ='$option_var".                          "<td align='center'><input type='checkbox' name ='$option_var".
  ".forminput' value='".   "_forminput' value='".
  $resource_name . "' $checked /> </td>";   $resource_name . "' $checked /> </td>";
  }   }
     }      }
   
             $col .= "<td align='center'><input type='$inputType' name='${var}.forminput' ";              $col .= "<td align='center'><input type='$inputType' name='${var}_forminput' ";
     if (%defaultSymbs) {      if (%defaultSymbs) {
  my $symb=$resource->symb();   my $symb=$resource->symb();
  if (exists($defaultSymbs{$symb})) {   if (exists($defaultSymbs{$symb})) {
Line 2157  BUTTONS Line 2317  BUTTONS
  my $resource_name =      my $resource_name =   
     &HTML::Entities::encode(&$valueFunc($resource),"<>&\"'");      &HTML::Entities::encode(&$valueFunc($resource),"<>&\"'");
  if ($addparts && (scalar(@{$resource->parts}) > 1)) {   if ($addparts && (scalar(@{$resource->parts}) > 1)) {
     $col .= "<select onclick=\"javascript:updateRadio(this.form,'${var}.forminput','$resource_name');updateHidden(this.form,'$id','${var}');\" name='part_$id.forminput'>\n";      $col .= "<select onclick=\"javascript:updateRadio(this.form,'${var}_forminput','$resource_name');updateHidden(this.form,'$id','${var}');\" name='part_${id}_forminput'>\n";
     $col .= "<option value=\"$part\">All Parts</option>\n";      $col .= "<option value=\"$part\">All Parts</option>\n";
     foreach my $part (@{$resource->parts}) {      foreach my $part (@{$resource->parts}) {
  $col .= "<option value=\"$part\">Part: $part</option>\n";   $col .= "<option value=\"$part\">Part: $part</option>\n";
Line 2179  BUTTONS Line 2339  BUTTONS
  }   }
     }      }
     function updateHidden(form,id,name) {      function updateHidden(form,id,name) {
  var select=form['part_'+id+'.forminput'];   var select=form['part_'+id+'_forminput'];
  var hidden=form[name+'_part.forminput'];   var hidden=form[name+'_part_forminput'];
  var which=select.selectedIndex;   var which=select.selectedIndex;
  hidden.value=select.options[which].value;   hidden.value=select.options[which].value;
     }      }
 // -->  // -->
 </script>  </script>
 <input type="hidden" name="${var}_part.forminput" />  <input type="hidden" name="${var}_part_forminput" />
   
 RADIO  RADIO
     $env{'form.condition'} = !$self->{'toponly'};      $env{'form.condition'} = !$self->{'toponly'};
Line 2275  use strict; Line 2435  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:  
 #     $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.  
 #     $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:  
 #     HTML  text to add to the rendering of the helper.  
 #  
 sub render_student_list {  
     my ($students, $formprefix, $defaultusers,  
  $multiselect, $resultname, $javascript) = @_;  
   
     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  
     # at the top which allows quick selections from each section  
     # as well as from categories of personnel.  
   
     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>';  
   
  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="'.  
     $resultname.".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 (!$multiselect  && !$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 2575  sub render { Line 2498  sub render {
     }      }
   
   
       my ($course_personnel, 
    $current_members, 
    $expired_members, 
    $future_members) = 
       &Apache::lonselstudent::get_people_in_class($env{'request.course.sec'});
   
     # 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'}) {  
  my %coursepersonnel = Apache::lonnet::get_course_adv_roles();  
  for (sort keys %coursepersonnel) {  
     for my $role (split /,/, $coursepersonnel{$_}) {  
  # extract the names so we can sort them  
  my @people;  
   
  for (split /,/, $role) {  
     push @people, [split /:/, $role];  
  }  
   
  @people = sort { $a->[0] cmp $b->[0] } @people;  
   
  for my $person (@people) {  
     push @$current_members, [join(':', @$person), $person->[0], '', $_];  
  }  
     }  
  }  
     }  
   
   
     # Load up the students  
     my $classlist = &Apache::loncoursedata::get_classlist();  
     my @keys = keys %{$classlist};  
     # Sort by: Section, name  
     @keys = sort {  
         if ($classlist->{$a}->[$section] ne $classlist->{$b}->[$section]) {  
             return $classlist->{$a}->[$section] cmp $classlist->{$b}->[$section];  
         }  
         return $classlist->{$a}->[$fullname] cmp $classlist->{$b}->[$fullname];  
     } @keys;  
    
   
   
       if ($self->{'coursepersonnel'}) {
     for (@keys) {   unshift @$current_members, (@$course_personnel);
   
  if ( $classlist->{$_}->[$status] eq  
     '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->{$_}->[$start_date] > $now) {  
  push @$future_members, [$_, $classlist->{$_}->[$fullname],  
  $classlist->{$_}->[$section],  
  "Future", "Student"];  
     } else {  
  push @$expired_members, [$_, $classlist->{$_}->[$fullname],  
  $classlist->{$_}->[$section],  
  "Expired", "Student"];  
     }  
   
  }  
     }      }
   
   
   
     #   Current personel      #   Current personel
   
     $result .= &render_student_list( $current_members,      $result .= '<h4>'.&mt('Select Currently Enrolled Students and Active Course Personnel').'</h4>';
      "current",      $result .= &Apache::lonselstudent::render_student_list( $current_members,
      \%defaultUsers,      "helpform",
      $self->{'multichoice'},      "current", 
      $self->{'variable'},      \%defaultUsers,
      1);      $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(@$future_members)) > 0)) {
   
  # And future.   # And future.
   
  $result .= &render_student_list( $future_members,   $result .= '<h4>'.&mt('Select Future Enrolled Students and Future Course Personnel').'</h4>';
  "future",         
  \%defaultUsers,   $result .= &Apache::lonselstudent::render_student_list( $future_members,
  $self->{'multichoice'},   "helpform",
  $self->{'variable'},   "future",
  0);   \%defaultUsers,
    $self->{'multichoice'},
    $self->{'variable'},
    0);
       }
       if (!$self->{'activeonly'} && ((scalar(@$expired_members)) > 0)) {
  # Past    # Past 
   
  $result .= &render_student_list($expired_members,   $result .= '<h4>'.&mt('Select Previously Enrolled Students and Inactive Course Personnel').'</h4>';
  "past",   $result .= &Apache::lonselstudent::render_student_list($expired_members,
  \%defaultUsers,         "helpform",
  $self->{'multichoice'},         "past",
  $self->{'variable'},         \%defaultUsers,
  0);         $self->{'multichoice'},
          $self->{'variable'},
          0);
     }      }
   
   
Line 2700  sub render { Line 2562  sub render {
 sub postprocess {  sub postprocess {
     my $self = shift;      my $self = shift;
   
     my $result = $env{'form.' . $self->{'variable'} . '.forminput'};      my $result = $env{'form.' . $self->{'variable'} . '_forminput'};
     if (!$result && !$self->{'emptyallowed'}) {      if (!$result && !$self->{'emptyallowed'}) {
  if ($self->{'coursepersonnel'}) {   if ($self->{'coursepersonnel'}) {
     $self->{ERROR_MSG} =       $self->{ERROR_MSG} = 
Line 2885  sub render { Line 2747  sub render {
     function checkall(value, checkName) {      function checkall(value, checkName) {
  for (i=0; i<document.forms.helpform.elements.length; i++) {   for (i=0; i<document.forms.helpform.elements.length; i++) {
             ele = document.forms.helpform.elements[i];              ele = document.forms.helpform.elements[i];
             if (ele.name == checkName + '.forminput') {              if (ele.name == checkName + '_forminput') {
                 document.forms.helpform.elements[i].checked=value;                  document.forms.helpform.elements[i].checked=value;
             }              }
         }          }
Line 3002  BUTTONS Line 2864  BUTTONS
             my $id = &new_id();              my $id = &new_id();
             $result .= '<tr><td align="right"' . " bgcolor='$color'>" .              $result .= '<tr><td align="right"' . " bgcolor='$color'>" .
                 "<input $onclick type='$type' name='" . $var                  "<input $onclick type='$type' name='" . $var
             . ".forminput' ".qq{id="$id"}." value='" . HTML::Entities::encode($fileName,"<>&\"'").              . "_forminput' ".qq{id="$id"}." value='" . HTML::Entities::encode($fileName,"<>&\"'").
                 "'";                  "'";
             if (!$self->{'multichoice'} && $choices == 0) {              if (!$self->{'multichoice'} && $choices == 0) {
                 $result .= ' checked="checked"';                  $result .= ' checked="checked"';
Line 3063  sub fileState { Line 2925  sub fileState {
   
 sub postprocess {  sub postprocess {
     my $self = shift;      my $self = shift;
     my $result = $env{'form.' . $self->{'variable'} . '.forminput'};      my $result = $env{'form.' . $self->{'variable'} . '_forminput'};
     if (!$result) {      if (!$result) {
         $self->{ERROR_MSG} = 'You must choose at least one file '.          $self->{ERROR_MSG} = 'You must choose at least one file '.
             'to continue.';              'to continue.';
Line 3153  sub start_section { Line 3015  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 = &Apache::loncommon::coursegroups();      my %curr_groups = &Apache::longroup::coursegroups();
     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 3217  sub start_group { Line 3079  sub start_group {
     # Populate the CHOICES element      # Populate the CHOICES element
     my %choices;      my %choices;
   
     my %curr_groups = &Apache::loncommon::coursegroups();      my %curr_groups = &Apache::longroup::coursegroups();
     foreach my $group_name (sort {lc($a) cmp lc($b)} (keys(%curr_groups))) {      foreach my $group_name (sort {lc($a) cmp lc($b)} (keys(%curr_groups))) {
  push(@{$paramHash->{CHOICES}}, [$group_name, $group_name]);   push(@{$paramHash->{CHOICES}}, [$group_name, $group_name]);
     }      }
Line 3299  sub render { Line 3161  sub render {
         $result .= '<p><font color="#FF0000">' . $self->{ERROR_MSG} . '</font></p>';          $result .= '<p><font color="#FF0000">' . $self->{ERROR_MSG} . '</font></p>';
     }      }
   
     $result .= '<input type="string" name="' . $self->{'variable'} . '.forminput"';      $result .= '<input type="string" name="' . $self->{'variable'} . '_forminput"';
   
     if (defined($self->{'size'})) {      if (defined($self->{'size'})) {
         $result .= ' size="' . $self->{'size'} . '"';          $result .= ' size="' . $self->{'size'} . '"';
Line 3432  sub start_clause { Line 3294  sub start_clause {
     die 'Error in clause of condition, Perl said: ' . $@ if $@;      die 'Error in clause of condition, Perl said: ' . $@ if $@;
     if (!&$clause($helper, $paramHash)) {      if (!&$clause($helper, $paramHash)) {
         # Discard all text until the /condition.          # Discard all text until the /condition.
         &Apache::lonxml::get_all_text('/condition', $parser);   my $end_tag = $paramHash->{SKIPTAG} || '/condition';
           &Apache::lonxml::get_all_text($end_tag, $parser);
     }      }
 }  }
   
Line 3705  sub render { Line 3568  sub render {
     if ($vars->{GRANULARITY} eq 'whole_course') {      if ($vars->{GRANULARITY} eq 'whole_course') {
         $resourceString .= '<li>'.&mt('for <b>all resources in the course</b>').'</li>';          $resourceString .= '<li>'.&mt('for <b>all resources in the course</b>').'</li>';
  if ($vars->{TARGETS} eq 'course') {   if ($vars->{TARGETS} eq 'course') {
     $level = 11; # general course, see lonparmset.pm perldoc      $level = 14; # general course, see lonparmset.pm perldoc
  } elsif ($vars->{TARGETS} eq 'section') {   } elsif ($vars->{TARGETS} eq 'section') {
       $level = 9;
    } elsif ($vars->{TARGETS} eq 'group') {
     $level = 6;      $level = 6;
  } else {   } else {
     $level = 3;      $level = 3;
Line 3721  sub render { Line 3586  sub render {
         $symb = $res->symb();          $symb = $res->symb();
         $resourceString .= '<li>'.&mt('for the map named [_1]',"<b>$title</b>").'</li>';          $resourceString .= '<li>'.&mt('for the map named [_1]',"<b>$title</b>").'</li>';
  if ($vars->{TARGETS} eq 'course') {   if ($vars->{TARGETS} eq 'course') {
     $level = 10; # general course, see lonparmset.pm perldoc      $level = 13; # general course, see lonparmset.pm perldoc
  } elsif ($vars->{TARGETS} eq 'section') {   } elsif ($vars->{TARGETS} eq 'section') {
       $level = 8;
    } elsif ($vars->{TARGETS} eq 'group') {
     $level = 5;      $level = 5;
  } else {   } else {
     $level = 2;      $level = 2;
Line 3738  sub render { Line 3605  sub render {
         my $title = $res->compTitle();          my $title = $res->compTitle();
         $resourceString .= '<li>'.&mt('for the resource named [_1] part [_2]',"<b>$title</b>","<b>$part</b>").'</li>';          $resourceString .= '<li>'.&mt('for the resource named [_1] part [_2]',"<b>$title</b>","<b>$part</b>").'</li>';
  if ($vars->{TARGETS} eq 'course') {   if ($vars->{TARGETS} eq 'course') {
     $level = 7; # general course, see lonparmset.pm perldoc      $level = 10; # general course, see lonparmset.pm perldoc
  } elsif ($vars->{TARGETS} eq 'section') {   } elsif ($vars->{TARGETS} eq 'section') {
       $level = 7;
    } elsif ($vars->{TARGETS} eq 'group') {
     $level = 4;      $level = 4;
  } else {   } else {
     $level = 1;      $level = 1;

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


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