Diff for /loncom/interface/lonhelper.pm between versions 1.18 and 1.23

version 1.18, 2003/05/05 15:17:25 version 1.23, 2003/05/07 19:24:07
Line 1689  BUTTONS Line 1689  BUTTONS
             $checked = 1;              $checked = 1;
         }          }
         $result .=          $result .=
             " value='" . HTML::Entities::encode($_)              " value='" . HTML::Entities::encode($_ . ':' . $choices->{$_}->[$section])
             . "' /></td><td>"              . "' /></td><td>"
             . HTML::Entities::encode($choices->{$_}->[$fullname])              . HTML::Entities::encode($choices->{$_}->[$fullname])
             . "</td><td align='center'>"               . "</td><td align='center'>" 
Line 1835  sub render { Line 1835  sub render {
   
     my $filterFunc = $self->{FILTER_FUNC};      my $filterFunc = $self->{FILTER_FUNC};
     my $buttons = '';      my $buttons = '';
       my $type = 'radio';
       if ($self->{'multichoice'}) {
           $type = 'checkbox';
       }
   
     if ($self->{'multichoice'}) {      if ($self->{'multichoice'}) {
         $result = <<SCRIPT;          $result = <<SCRIPT;
Line 1847  sub render { Line 1851  sub render {
             }              }
         }          }
     }      }
   
       function checkallclass(value, className) {
           for (i=0; i<document.forms.helpform.elements.length; i++) {
               ele = document.forms.helpform.elements[i];
               if (ele.type == "$type" && ele.onclick) {
                   document.forms.helpform.elements[i].checked=value;
               }
           }
       }
 </script>  </script>
 SCRIPT  SCRIPT
         $buttons = <<BUTTONS;          $buttons = <<BUTTONS;
 <br /> &nbsp;  <br /> &nbsp;
 <input type="button" onclick="checkall(true, '$var')" value="Select All Files" />  <input type="button" onclick="checkall(true, '$var')" value="Select All Files" />
 <input type="button" onclick="checkall(false, '$var')" value="Unselect All Files" />  <input type="button" onclick="checkall(false, '$var')" value="Unselect All Files" />
   BUTTONS
   
           if ($helper->{VARS}->{'construction'}) {
               $buttons .= <<BUTTONS;
   <input type="button" onclick="checkallclass(true, 'Published')" value="Select All Published" />
   <input type="button" onclick="checkallclass(false, 'Published')" value="Unselect All Published" />
 <br /> &nbsp;  <br /> &nbsp;
 BUTTONS  BUTTONS
          }
     }      }
   
     # Get the list of files in this directory.      # Get the list of files in this directory.
Line 1876  BUTTONS Line 1896  BUTTONS
         $result .= '<br /><font color="#FF0000">' . $self->{ERROR_MSG} . '</font><br /><br />';          $result .= '<br /><font color="#FF0000">' . $self->{ERROR_MSG} . '</font><br /><br />';
     }      }
   
     $result .= '<table border="0" cellpadding="1" cellspacing="1">';      $result .= '<table border="0" cellpadding="2" cellspacing="0">';
   
     # Keeps track if there are no choices, prints appropriate error      # Keeps track if there are no choices, prints appropriate error
     # if there are none.       # if there are none. 
     my $choices = 0;      my $choices = 0;
     my $type = 'radio';  
     if ($self->{'multichoice'}) {  
         $type = 'checkbox';  
     }  
     # Print each legitimate file choice.      # Print each legitimate file choice.
     for my $file (@fileList) {      for my $file (@fileList) {
         $file = (split(/&/, $file))[0];          $file = (split(/&/, $file))[0];
Line 1893  BUTTONS Line 1909  BUTTONS
         }          }
         my $fileName = $subdir .'/'. $file;          my $fileName = $subdir .'/'. $file;
         if (&$filterFunc($file)) {          if (&$filterFunc($file)) {
             $result .= '<tr><td align="right">' .              (my $status, my $color) = @{fileState($subdir, $file)};
                 "<input type='$type' name='" . $var  
               # Netscape 4 is stupid and there's nowhere to put the
               # information on the input tag that the file is Published,
               # Unpublished, etc. In *real* browsers we can just say
               # "class='Published'" and check the className attribute of
               # the input tag, but Netscape 4 is too stupid to understand
               # that attribute, and un-comprehended attributes are not
               # reflected into the object model. So instead, what I do 
               # is either have or don't have an "onclick" handler that 
               # does nothing, give Published files the onclick handler, and
               # have the checker scripts check for that. Stupid and clumsy,
               # and only gives us binary "yes/no" information (at least I
               # couldn't figure out how to reach into the event handler's
               # actual code to retreive a value), but it works well enough
               # here.
           
               my $onclick = '';
               if ($status eq 'Published' && $helper->{VARS}->{'construction'}) {
                   $onclick = 'onclick="a=1" ';
               }
               $result .= '<tr><td align="right"' . " bgcolor='$color'>" .
                   "<input $onclick type='$type' name='" . $var
             . ".forminput' value='" . HTML::Entities::encode($fileName) .              . ".forminput' value='" . HTML::Entities::encode($fileName) .
                 "'";                  "'";
             if (!$self->{'multichoice'} && $choices == 0) {              if (!$self->{'multichoice'} && $choices == 0) {
                 $result .= ' checked';                  $result .= ' checked';
             }              }
             $result .= "/></td><td>" . $file . "</td></tr>\n";              $result .= "/></td><td bgcolor='$color'>" . $file .
                    "</td><td bgcolor='$color'>$status</td></tr>\n";
             $choices++;              $choices++;
         }          }
     }      }
Line 1916  BUTTONS Line 1954  BUTTONS
     return $result;      return $result;
 }  }
   
   # Determine the state of the file: Published, unpublished, modified.
   # Return the color it should be in and a label as a two-element array
   # reference.
   # Logic lifted from lonpubdir.pm, even though I don't know that it's still
   # the most right thing to do.
   
   sub fileState {
       my $constructionSpaceDir = shift;
       my $file = shift;
       
       my $docroot = $Apache::lonnet::perlvar{'lonDocRoot'};
       my $subdirpart = $constructionSpaceDir;
       $subdirpart =~ s/^\/home\/$ENV{'user.name'}\/public_html//;
       my $resdir = $docroot . '/res/' . $ENV{'user.domain'} . '/' . $ENV{'user.name'} .
           $subdirpart;
   
       my @constructionSpaceFileStat = stat($constructionSpaceDir . '/' . $file);
       my @resourceSpaceFileStat = stat($resdir . '/' . $file);
       if (!@resourceSpaceFileStat) {
           return ['Unpublished', '#FFCCCC'];
       }
   
       my $constructionSpaceFileModified = $constructionSpaceFileStat[9];
       my $resourceSpaceFileModified = $resourceSpaceFileStat[9];
       
       if ($constructionSpaceFileModified > $resourceSpaceFileModified) {
           return ['Modified', '#FFFFCC'];
       }
       return ['Published', '#CCFFCC'];
   }
   
 sub postprocess {  sub postprocess {
     my $self = shift;      my $self = shift;
     my $result = $ENV{'form.' . $self->{'variable'} . '.forminput'};      my $result = $ENV{'form.' . $self->{'variable'} . '.forminput'};

Removed from v.1.18  
changed lines
  Added in v.1.23


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