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

version 1.1, 2001/04/01 02:58:51 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 Gerd Kortemeyer  ###
   
 package Apache::lonpubdir;  package Apache::lonpubdir;
   
Line 18  use strict; Line 46  use strict;
 use Apache::File;  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::loncommon();
   
 sub handler {  sub handler {
   
Line 33  sub handler { Line 62  sub handler {
   } else {    } else {
       $fn=$r->filename();        $fn=$r->filename();
   }    }
   
     my $uname;
     my $udom;
   
     ($uname,$udom)=
       &Apache::loncacc::constructaccess(
                $fn,$r->dir_config('lonDefDomain')); 
     unless (($uname) && ($udom)) {
        $r->log_reason($uname.' at '.$udom.
            ' trying to publish file '.$ENV{'form.filename'}.
            ' ('.$fn.') - not authorized', 
            $r->filename); 
        return HTTP_NOT_ACCEPTABLE;
     }
             
     $fn=~s/\/$//;
   
   unless ($fn) {     unless ($fn) { 
      $r->log_reason($ENV{'user.name'}.' at '.$ENV{'user.domain'}.       $r->log_reason($ENV{'user.name'}.' at '.$ENV{'user.domain'}.
          ' trying to publish empty directory', $r->filename);            ' trying to list empty directory', $r->filename); 
      return HTTP_NOT_FOUND;       return HTTP_NOT_FOUND;
   }     } 
   
 # ----------------------------------------------------------- Start page output  # ----------------------------------------------------------- Start page output
   
   my $uname=$ENV{'user.name'};  
   my $udom=$ENV{'user.domain'};  
   
   $r->content_type('text/html');    $r->content_type('text/html');
   $r->send_http_header;    $r->send_http_header;
Line 57  sub handler { Line 99  sub handler {
   my $thisdisfn=$fn;    my $thisdisfn=$fn;
   $thisdisfn=~s/^\/home\/$uname\/public_html//;    $thisdisfn=~s/^\/home\/$uname\/public_html//;
       
   $r->print('<h1>Construction Space Directory <tt>'.$thisdisfn.'</tt></h1>');    $r->print('<h1>Construction Space Directory <tt>'.$thisdisfn.'/</tt></h1>');
     
     if (($uname ne $ENV{'user.name'}) || ($udom ne $ENV{'user.domain'})) {
             $r->print('<h3><font color=red>Co-Author: '.$uname.' at '.$udom.
                  '</font></h3>');
     }
   
   
   my $docroot=$r->dir_config('lonDocRoot');    my $docroot=$r->dir_config('lonDocRoot');
   
   my $resdir=$docroot.'/res/'.$udom.'/'.$uname.$thisdisfn;    my $resdir=$docroot.'/res/'.$udom.'/'.$uname.$thisdisfn;
   my $linkdir='/~'.$uname.$thisdisfn;    my $linkdir='/~'.$uname.$thisdisfn;
   
     my $filename;    $r->print('<table border=2>'.
     opendir(DIR,$fn);   '<tr><th>Filename</th><th>Modified</th><th>Status</th><th>&nbsp;</th></tr>');
        while ($filename=readdir(DIR)) {  
            $filename=~/\.(\w+)$/;    my $filename;
            if (($1 ne 'meta') && ($1 ne 'save') && ($1 ne 'log')) {    my $dirptr=16384;
       $r->print($resdir.' - '.$linkdir.' = '.$filename.'<br>');  
    }  
        }  
     closedir(DIR);  
   
     opendir(DIR,$fn);
     my @files=sort(readdir(DIR));
     foreach my $filename (@files) {
        my ($cdev,$cino,$cmode,$cnlink,
            $cuid,$cgid,$crdev,$csize,
            $catime,$cmtime,$cctime,
            $cblksize,$cblocks)=stat($fn.'/'.$filename);
   
        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 $bgcol='#FFBBBB';
            if (-e $resdir.'/'.$filename) {
               my ($rdev,$rino,$rmode,$rnlink,
                   $ruid,$rgid,$rrdev,$rsize,
                   $ratime,$rmtime,$rctime,
                   $rblksize,$rblocks)=stat($resdir.'/'.$filename);
               if ($rmtime>=$cmtime) {
    $status='Published';
                   $bgcol='#BBFFBB';
               } else {
                   $status='Modified';
                   $bgcol='#FFFFBB';
                   if 
            (&Apache::loncommon::fileembstyle(($filename=~/\.(\w+)$/)) eq 'ssi') {
                      $status.='<br><a href="/adm/diff?filename=/~'.$uname.
                                            $thisdisfn.'/'.$filename.
          '&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.
            '><td><a href="'.$linkdir.'/'.$filename.'">'.$filename.
            '</a></td><td>'.localtime($cmtime).'</td><td>'.$status.'</td>'.
        '<td><a target="_parent" href="/adm/publish?filename=/~'.$uname.
                                         $thisdisfn.'/'.$filename.'">'.
            'Publish</a></td></tr>');
        } else {
    # "hidden" extension and not a directory, so hide it away.
        }
     }
     closedir(DIR);
   
   $r->print('</body></html>');    $r->print('</table></body></html>');
   return OK;      return OK;  
 }  }
   
   1;
   __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.1  
changed lines
  Added in v.1.17


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