Diff for /loncom/interface/lonhelper.pm between versions 1.120 and 1.131

version 1.120, 2005/10/11 21:27:44 version 1.131, 2006/03/02 23:56:55
Line 576  sub display { Line 576  sub display {
     my $html=&Apache::lonxml::xmlbegin();      my $html=&Apache::lonxml::xmlbegin();
     my $stateTitle=&mt($state->title());      my $stateTitle=&mt($state->title());
     my $helperTitle = &mt($self->{TITLE});      my $helperTitle = &mt($self->{TITLE});
       my $browser_searcher_js = &Apache::loncommon::browser_and_searcher_javascript();
     my $bodytag = &Apache::loncommon::bodytag($helperTitle,'','');      my $bodytag = &Apache::loncommon::bodytag($helperTitle,'','');
     my $previous = HTML::Entities::encode(&mt("<- Previous"), '<>&"');      my $previous = HTML::Entities::encode(&mt("<- Previous"), '<>&"');
     my $next = HTML::Entities::encode(&mt("Next ->"), '<>&"');      my $next = HTML::Entities::encode(&mt("Next ->"), '<>&"');
Line 586  sub display { Line 587  sub display {
 $html  $html
     <head>      <head>
         <title>$loncapaHelper: $helperTitle</title>          <title>$loncapaHelper: $helperTitle</title>
           <script type="text/javascript">
   $browser_searcher_js
           </script>
     </head>      </head>
     $bodytag      $bodytag
 HEADER  HEADER
Line 1557  sub render { Line 1561  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})) {      if (defined($self->{DEFAULT_VALUE})) {
Line 1564  sub render { Line 1570  sub render {
         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') { $time=time; $anytime=1; }   if (lc($time) eq 'anytime') {
       $anytime=1;
    } else {
       $date = localtime($time);
    }
       } else {
   
     }      }
     if ($anytime) {      if ($anytime) {
  $onclick = "onclick=\"javascript:updateCheck(this.form,'${var}anytime',false)\"";   $onclick = "onclick=\"javascript:updateCheck(this.form,'${var}anytime',false)\"";
     }      }
     # Default date: The current hour.      # Default date: The current hour.
     $date = localtime($time);  
     $date->min(0);  
   
     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 1661  sub render { Line 1671  sub render {
         $result .= "</select>\n";          $result .= "</select>\n";
     }      }
     if ($self->{'anytime'}) {      if ($self->{'anytime'}) {
     $result.=(<<CHECK);   $result.=(<<CHECK);
 <script type="text/javascript">  <script type="text/javascript">
 // <!--  // <!--
     function updateCheck(form,name,value) {      function updateCheck(form,name,value) {
Line 1671  sub render { Line 1681  sub render {
 // -->  // -->
 </script>  </script>
 CHECK  CHECK
   
  $result.="&nbsp;or&nbsp;<label><input type='checkbox' ";   $result.="&nbsp;or&nbsp;<label><input type='checkbox' ";
  if ($anytime) {   if ($anytime) {
     $result.=' checked="checked" '      $result.=' checked="checked" '
Line 2018  BUTTONS Line 2027  BUTTONS
  $mapUrl = $self->{MAP_URL};   $mapUrl = $self->{MAP_URL};
     }      }
   
       my %defaultSymbs;
       if (defined($self->{DEFAULT_VALUE})) {
           my $valueFunc = eval($self->{DEFAULT_VALUE});
           die 'Error in default value code for variable ' . 
               $self->{'variable'} . ', Perl said: ' . $@ if $@;
           my @defaultSymbs = &$valueFunc($helper, $self);
    if (!$multichoice && @defaultSymbs) { # only allowed 1
       @defaultSymbs = ($defaultSymbs[0]);
    }
    %defaultSymbs = map { if ($_) {($_,1) } } @defaultSymbs;
    delete($defaultSymbs{''});
       }
   
     # Create the composite function that renders the column on the nav map      # Create the composite function that renders the column on the nav map
     # have to admit any language that lets me do this can't be all bad      # have to admit any language that lets me do this can't be all bad
Line 2066  BUTTONS Line 2087  BUTTONS
     }      }
   
             $col .= "<td align='center'><input type='$inputType' name='${var}.forminput' ";              $col .= "<td align='center'><input type='$inputType' name='${var}.forminput' ";
             if (!$checked && !$multichoice) {      if (%defaultSymbs) {
                 $col .= "checked='checked' ";   my $symb=$resource->symb();
                 $checked = 1;   if (exists($defaultSymbs{$symb})) {
             }      $col .= "checked='checked' ";
     if ($multichoice) { # all resources start checked; see bug 1174      $checked = 1;
  $col .= "checked='checked' ";   }
  $checked = 1;      } else {
    if (!$checked && !$multichoice) {
       $col .= "checked='checked' ";
       $checked = 1;
    }
    if ($multichoice) { # all resources start checked; see bug 1174
       $col .= "checked='checked' ";
       $checked = 1;
    }
     }      }
             $col .= "value='" . $resource_name  . "' /></td>";              $col .= "value='" . $resource_name  . "' /></td>";
   
Line 2190  selection. Defaults to false. Line 2219  selection. Defaults to false.
 If true, only active students and course personnel will be  If true, only active students and course personnel will be
 shown. Defaults to false.  shown. Defaults to false.
   
   =item * B<emptyallowed>:
   
   If true, the selection of no users is allowed. Defaults to false.
   
 =back  =back
   
 =cut  =cut
Line 2225  sub start_student { Line 2258  sub start_student {
     if (defined($token->[2]{'nextstate'})) {      if (defined($token->[2]{'nextstate'})) {
         $paramHash->{NEXTSTATE} = $token->[2]{'nextstate'};          $paramHash->{NEXTSTATE} = $token->[2]{'nextstate'};
     }      }
       $paramHash->{'emptyallowed'} = $token->[2]{'emptyallowed'};
           
 }      }    
   
Line 2340  SCRIPT Line 2374  SCRIPT
 </table>  </table>
 <br />  <br />
 BUTTONS  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 />';
     }      }
   
       my %defaultUsers;
       if (defined($self->{DEFAULT_VALUE})) {
           my $valueFunc = eval($self->{DEFAULT_VALUE});
           die 'Error in default value code for variable ' . 
               $self->{'variable'} . ', Perl said: ' . $@ if $@;
           my @defaultUsers = &$valueFunc($helper, $self);
    if (!$self->{'multichoice'} && @defaultUsers) { # only allowed 1
       @defaultUsers = ($defaultUsers[0]);
    }
    %defaultUsers = map { if ($_) {($_,1) } } @defaultUsers;
    delete($defaultUsers{''});
       }
     my $choices = [];      my $choices = [];
   
     # Load up the non-students, if necessary      # Load up the non-students, if necessary
Line 2384  BUTTONS Line 2432  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      # username, fullname, section, type
     for (@keys) {      for (@keys) {
Line 2411  BUTTONS Line 2503  BUTTONS
         $result .= "<tr><td><input type='$type' name='" .          $result .= "<tr><td><input type='$type' name='" .
             $self->{'variable'} . '.forminput' . "'";              $self->{'variable'} . '.forminput' . "'";
                           
         if (!$self->{'multichoice'} && !$checked) {   if (%defaultUsers) {
       my $user=$choice->[0];
       if (exists($defaultUsers{$user})) {
    $result .= " checked='checked' ";
    $checked = 1;
       }
    } elsif (!$self->{'multichoice'} && !$checked) {
             $result .= " checked='checked' ";              $result .= " checked='checked' ";
             $checked = 1;              $checked = 1;
         }          }
Line 2434  BUTTONS Line 2532  BUTTONS
     }      }
   
     $result .= "</table>\n\n";      $result .= "</table>\n\n";
     $result .= $buttons;     
     #  
     #  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;  
     }  
     return $result;      return $result;
 }  }
   
Line 2486  sub postprocess { Line 2541  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->{'emptyallowed'}) {
         $self->{ERROR_MSG} =    if ($self->{'coursepersonnel'}) {
     &mt('You must choose at least one student to continue.');      $self->{ERROR_MSG} = 
    &mt('You must choose at least one user to continue.');
    } else {
       $self->{ERROR_MSG} = 
    &mt('You must choose at least one student to continue.');
    }
         return 0;          return 0;
     }      }
   
Line 2933  sub end_section { Line 2993  sub end_section {
 }      }    
 1;  1;
   
   package Apache::lonhelper::group;
   
   =pod
    
   =head2 Element: groupX<group, helper element>
    
   <section> allows the user to choose one or more groups from the current course.
   
   It takes the standard attributes "variable", "multichoice", and "nextstate", meaning what they do for most other elements.
    
   =cut
   
   no strict;
   @ISA = ("Apache::lonhelper::choices");
   use strict;
   
   BEGIN {
       &Apache::lonhelper::register('Apache::lonhelper::group',
                                    ('group'));
   }
   
   sub new {
       my $ref = Apache::lonhelper::choices->new();
       bless($ref);
   }
    
   sub start_group {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
    
       if ($target ne 'helper') {
           return '';
       }
   
       $paramHash->{CHOICES} = [];
   
       $paramHash->{'variable'} = $token->[2]{'variable'};
       $helper->declareVar($paramHash->{'variable'});
       $paramHash->{'multichoice'} = $token->[2]{'multichoice'};
       if (defined($token->[2]{'nextstate'})) {
           $paramHash->{NEXTSTATE} = $token->[2]{'nextstate'};
       }
   
       # Populate the CHOICES element
       my %choices;
   
       my $numgroups;
       my %curr_groups;
       if (&Apache::loncommon::coursegroups(\%curr_groups)) {
           foreach my $group_name (keys %curr_groups) {
               $choices{$group_name} = $group_name;
           }
       }
       foreach my $group_name (sort(keys(%choices))) {
           push @{$paramHash->{CHOICES}}, [$group_name, $group_name];
       }
   }
                                                                                       
   sub end_group {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   
       if ($target ne 'helper') {
           return '';
       }
       Apache::lonhelper::group->new();
   }
   1;
   
 package Apache::lonhelper::string;  package Apache::lonhelper::string;
   
 =pod  =pod
Line 3314  sub render { Line 3441  sub render {
     }      }
     my $previous = HTML::Entities::encode(&mt("<- Previous"), '<>&"');      my $previous = HTML::Entities::encode(&mt("<- Previous"), '<>&"');
     my $next = HTML::Entities::encode(&mt("Next ->"), '<>&"');      my $next = HTML::Entities::encode(&mt("Next ->"), '<>&"');
       my $target = " target='loncapaclient'";
       if (($env{'browser.interface'} eq 'textual') ||
           ($env{'environment.remote'} eq 'off')) {  $target='';  }
     $result .= "<center>\n" .      $result .= "<center>\n" .
  "<form action='".$actionURL."' method='post' target='loncapaclient'>\n" .   "<form action='".$actionURL."' method='post' $target>\n" .
  "<input type='button' onclick='history.go(-1)' value='$previous' />" .   "<input type='button' onclick='history.go(-1)' value='$previous' />" .
  "<input type='hidden' name='orgurl' value='$targetURL' />" .   "<input type='hidden' name='orgurl' value='$targetURL' />" .
  "<input type='hidden' name='selectrole' value='1' />\n" .   "<input type='hidden' name='selectrole' value='1' />\n" .
Line 3516  sub render { Line 3646  sub render {
         $result .= '<li>'.&mt('for section [_1]',"<b>$section</b>").'</li>';          $result .= '<li>'.&mt('for section [_1]',"<b>$section</b>").'</li>';
  $result .= "<input type='hidden' name='csec' value='" .   $result .= "<input type='hidden' name='csec' value='" .
             HTML::Entities::encode($section,"'<>&\"") . "' />\n";              HTML::Entities::encode($section,"'<>&\"") . "' />\n";
       } elsif ($vars->{TARGETS} eq 'group') {
           my $group = $vars->{GROUP_NAME};
           $result .= '<li>'.&mt('for group [_1]',"<b>$group</b>").'</li>';
           $result .= "<input type='hidden' name='cgroup' value='" .
               HTML::Entities::encode($group,"'<>&\"") . "' />\n";
     } else {      } else {
         # FIXME: This is probably wasteful! Store the name!          # FIXME: This is probably wasteful! Store the name!
         my $classlist = Apache::loncoursedata::get_classlist();          my $classlist = Apache::loncoursedata::get_classlist();

Removed from v.1.120  
changed lines
  Added in v.1.131


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