Diff for /loncom/publisher/lonpubdir.pm between versions 1.8 and 1.17

version 1.8, 2001/05/26 15:29:22 version 1.17, 2001/12/15 20:48:47
Line 1 Line 1
 # The LearningOnline Network with CAPA  # The LearningOnline Network with CAPA
 #  
 # (Publication Handler  # (Publication Handler
   #
   # $Id$
   #
   # Copyright Michigan State University Board of Trustees
   #
   # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
   #
   # LON-CAPA is free software; you can redistribute it and/or modify
   # it under the terms of the GNU General Public License as published by
   # the Free Software Foundation; either version 2 of the License, or
   # (at your option) any later version.
   #
   # LON-CAPA is distributed in the hope that it will be useful,
   # but WITHOUT ANY WARRANTY; without even the implied warranty of
   # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   # GNU General Public License for more details.
   #
   # You should have received a copy of the GNU General Public License
   # along with LON-CAPA; if not, write to the Free Software
   # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   #
   # /home/httpd/html/adm/gpl.txt
   #
   # http://www.lon-capa.org/
   #
 #   # 
 # (TeX Content Handler  # (TeX Content Handler
 #  #
   # YEAR=2000
 # 05/29/00,05/30,10/11 Gerd Kortemeyer)  # 05/29/00,05/30,10/11 Gerd Kortemeyer)
 #  #
 # 11/28,11/29,11/30,12/01,12/02,12/04,12/23 Gerd Kortemeyer  # 11/28,11/29,11/30,12/01,12/02,12/04,12/23 Gerd Kortemeyer
   # YEAR=2001
 # 03/23 Guy Albertelli  # 03/23 Guy Albertelli
 # 03/24,03/29 Gerd Kortemeyer)  # 03/24,03/29 Gerd Kortemeyer)
   # 03/31,04/03,05/09,06/23,08/18,08/20 Gerd Kortemeyer
   # 12/15 Scott Harrison
 #  #
 # 03/31,04/03,05/09 Gerd Kortemeyer  ###
   
 package Apache::lonpubdir;  package Apache::lonpubdir;
   
Line 19  use Apache::File; Line 47  use Apache::File;
 use File::Copy;  use File::Copy;
 use Apache::Constants qw(:common :http :methods);  use Apache::Constants qw(:common :http :methods);
 use Apache::loncacc;  use Apache::loncacc;
 use Apache::lonnet;  use Apache::loncommon();
   
   
 sub handler {  sub handler {
   
Line 39  sub handler { Line 66  sub handler {
   my $uname;    my $uname;
   my $udom;    my $udom;
   
   unless (($uname,$udom)=    ($uname,$udom)=
     &Apache::loncacc::constructaccess(      &Apache::loncacc::constructaccess(
              $fn,$r->dir_config('lonDefDomain'))) {               $fn,$r->dir_config('lonDefDomain')); 
     unless (($uname) && ($udom)) {
      $r->log_reason($uname.' at '.$udom.       $r->log_reason($uname.' at '.$udom.
          ' trying to publish file '.$ENV{'form.filename'}.           ' trying to publish file '.$ENV{'form.filename'}.
          ' ('.$fn.') - not authorized',            ' ('.$fn.') - not authorized', 
Line 85  sub handler { Line 113  sub handler {
   my $linkdir='/~'.$uname.$thisdisfn;    my $linkdir='/~'.$uname.$thisdisfn;
   
   $r->print('<table border=2>'.    $r->print('<table border=2>'.
             '<tr><th>Filename</th><th>Modified</th><th>Status</th></tr>');   '<tr><th>Filename</th><th>Modified</th><th>Status</th><th>&nbsp;</th></tr>');
   
   my $filename;    my $filename;
   my $dirptr=16384;    my $dirptr=16384;
   
   opendir(DIR,$fn);    opendir(DIR,$fn);
   while ($filename=readdir(DIR)) {    my @files=sort(readdir(DIR));
     foreach my $filename (@files) {
      my ($cdev,$cino,$cmode,$cnlink,       my ($cdev,$cino,$cmode,$cnlink,
          $cuid,$cgid,$crdev,$csize,           $cuid,$cgid,$crdev,$csize,
          $catime,$cmtime,$cctime,           $catime,$cmtime,$cctime,
          $cblksize,$cblocks)=stat($fn.'/'.$filename);           $cblksize,$cblocks)=stat($fn.'/'.$filename);
      $filename=~/\.(\w+)$/;  
      if (($1 ne 'meta') && (&Apache::lonnet::fileembstyle($1))) {       my $extension='';
        if ($filename=~/\.(\w+)$/) { $extension=$1; }
        if ($cmode&$dirptr) {
            my $disfilename=$filename;
            if ($filename eq '..') {
        $disfilename='<i>Parent Directory</i>';
            }
            unless ((($filename eq '..') && ($thisdisfn eq '')) ||
                    ($filename eq '.')) {
              $r->print('<tr bgcolor=#BBBBFF'.
              '><td><a href="'.$linkdir.'/'.$filename.'">'.$disfilename.
    '</a></td><td>'.localtime($cmtime).'</td><td>&nbsp;</td><td>&nbsp;</td></tr>'
              );
            }
        } elsif (&Apache::loncommon::fileembstyle($extension) ne 'hdn') {
          my $status='Unpublished';           my $status='Unpublished';
          my $bgcol='#FFBBBB';           my $bgcol='#FFBBBB';
          if (-e $resdir.'/'.$filename) {           if (-e $resdir.'/'.$filename) {
Line 112  sub handler { Line 155  sub handler {
                 $status='Modified';                  $status='Modified';
                 $bgcol='#FFFFBB';                  $bgcol='#FFFFBB';
                 if                   if 
             (&Apache::lonnet::fileembstyle(($filename=~/\.(\w+)$/)) eq 'ssi') {           (&Apache::loncommon::fileembstyle(($filename=~/\.(\w+)$/)) eq 'ssi') {
                    $status.='<br><a href="/adm/diff?filename=/~'.$uname.                     $status.='<br><a href="/adm/diff?filename=/~'.$uname.
                                          '/'.$filename.                                           $thisdisfn.'/'.$filename.
        '&versionone=priv" target=cat>Diffs</a>';         '&versionone=priv" target=cat>Diffs</a>';
         }          }
             }                 }   
               $status.='<br><a href="/adm/retrieve?filename=/~'.$uname.
                 $thisdisfn.'/'.$filename.'" target=cat>Retrieve</a>';
  }   }
          $r->print('<tr bgcolor='.$bgcol.           $r->print('<tr bgcolor='.$bgcol.
          '><td><a href="'.$linkdir.'/'.$filename.'">'.$filename.           '><td><a href="'.$linkdir.'/'.$filename.'">'.$filename.
          '</a></td><td>'.localtime($cmtime).'</td><td>'.$status.'</td></tr>');           '</a></td><td>'.localtime($cmtime).'</td><td>'.$status.'</td>'.
      } elsif ($cmode&$dirptr) {       '<td><a target="_parent" href="/adm/publish?filename=/~'.$uname.
          my $disfilename=$filename;                                        $thisdisfn.'/'.$filename.'">'.
          if ($filename eq '..') {           'Publish</a></td></tr>');
      $disfilename='<i>Parent Directory</i>';       } else {
          }   # "hidden" extension and not a directory, so hide it away.
          unless ((($filename eq '..') && ($thisdisfn eq '')) ||  
                  ($filename eq '.')) {  
            $r->print('<tr bgcolor=#BBBBFF'.  
            '><td><a href="'.$linkdir.'/'.$filename.'">'.$disfilename.  
            '</a></td><td>'.localtime($cmtime).'</td><td>&nbsp;</td></tr>');  
          }  
      }       }
   }    }
   closedir(DIR);    closedir(DIR);
Line 143  sub handler { Line 182  sub handler {
   
 1;  1;
 __END__  __END__
   
   =head1 NAME
   
   Apache::lonpubdir - Publication Handler for Directories
   
   =head1 SYNOPSIS
   
   Invoked (for various locations) by /etc/httpd/conf/srm.conf:
   
   <LocationMatch "^/\~.*/$">
   PerlAccessHandler       Apache::loncacc
   SetHandler perl-script
   PerlHandler Apache::lonpubdir
   ErrorDocument     403 /adm/login
   ErrorDocument     404 /adm/notfound.html
   ErrorDocument     406 /adm/unauthorized.html
   ErrorDocument  500 /adm/errorhandler
   </LocationMatch>
   
   <Location /adm/pubdir>
   PerlAccessHandler       Apache::lonacc
   SetHandler perl-script
   PerlHandler Apache::lonpubdir
   ErrorDocument     403 /adm/login
   ErrorDocument     404 /adm/notfound.html
   ErrorDocument     406 /adm/unauthorized.html
   ErrorDocument  500 /adm/errorhandler
   </Location>
   
   =head1 INTRODUCTION
   
   This module enables cookie based authentication and is used
   to control access for many different LON-CAPA URIs.
   
   Whenever the client sends the cookie back to the server, 
   this cookie is handled by either lonacc.pm or loncacc.pm
   (see srm.conf for what is invoked when).  If
   the cookie is missing or invalid, the user is re-challenged
   for login information.
   
   This is part of the LearningOnline Network with CAPA project
   described at http://www.lon-capa.org.
   
   =head1 HANDLER SUBROUTINE
   
   This routine is called by Apache and mod_perl.
   
   =over 4
   
   =item *
   
   read in information
   
   =item *
   
   start page output
   
   =item *
   
   run through list of files and attempt to publish unhidden files
   
   =back
   
   =cut

Removed from v.1.8  
changed lines
  Added in v.1.17


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