--- loncom/publisher/lonpubdir.pm 2001/04/01 02:58:51 1.1 +++ loncom/publisher/lonpubdir.pm 2001/05/09 16:57:07 1.6 @@ -10,7 +10,7 @@ # 03/23 Guy Albertelli # 03/24,03/29 Gerd Kortemeyer) # -# 03/31 Gerd Kortemeyer +# 03/31,04/03,05/09 Gerd Kortemeyer package Apache::lonpubdir; @@ -18,6 +18,7 @@ use strict; use Apache::File; use File::Copy; use Apache::Constants qw(:common :http :methods); +use Apache::loncacc; sub handler { @@ -33,18 +34,30 @@ sub handler { } else { $fn=$r->filename(); } + + my $uname; + my $udom; + + unless (($uname,$udom)= + &Apache::loncacc::constructaccess( + $fn,$r->dir_config('lonDefDomain'))) { + $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) { $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; } # ----------------------------------------------------------- Start page output - my $uname=$ENV{'user.name'}; - my $udom=$ENV{'user.domain'}; $r->content_type('text/html'); $r->send_http_header; @@ -57,24 +70,74 @@ sub handler { my $thisdisfn=$fn; $thisdisfn=~s/^\/home\/$uname\/public_html//; - $r->print('

Construction Space Directory '.$thisdisfn.'

'); + $r->print('

Construction Space Directory '.$thisdisfn.'/

'); + + if (($uname ne $ENV{'user.name'}) || ($udom ne $ENV{'user.domain'})) { + $r->print('

Co-Author: '.$uname.' at '.$udom. + '

'); + } + my $docroot=$r->dir_config('lonDocRoot'); my $resdir=$docroot.'/res/'.$udom.'/'.$uname.$thisdisfn; my $linkdir='/~'.$uname.$thisdisfn; - my $filename; - opendir(DIR,$fn); - while ($filename=readdir(DIR)) { - $filename=~/\.(\w+)$/; - if (($1 ne 'meta') && ($1 ne 'save') && ($1 ne 'log')) { - $r->print($resdir.' - '.$linkdir.' = '.$filename.'
'); - } - } - closedir(DIR); + $r->print(''. + ''); + + my $filename; + my $dirptr=16384; + opendir(DIR,$fn); + while ($filename=readdir(DIR)) { + my ($cdev,$cino,$cmode,$cnlink, + $cuid,$cgid,$crdev,$csize, + $catime,$cmtime,$cctime, + $cblksize,$cblocks)=stat($fn.'/'.$filename); + $filename=~/\.(\w+)$/; + if (($1 ne 'meta') && (&Apache::lonnet::fileembstyle($1))) { + 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::lonnet::fileembstyle(($filename=~/\.(\w+)$/)) eq 'ssi') { + $status.='
Diffs'; + } + } + } + $r->print(''); + } elsif ($cmode&$dirptr) { + my $disfilename=$filename; + if ($filename eq '..') { + $disfilename='Parent Directory'; + } + unless ((($filename eq '..') && ($thisdisfn eq '')) || + ($filename eq '.')) { + $r->print(''); + } + } + } + closedir(DIR); - $r->print(''); + $r->print('
FilenameModifiedStatus
'.$filename. + ''.localtime($cmtime).''.$status.'
'.$disfilename. + ''.localtime($cmtime).' 
'); return OK; } + +1; +__END__