--- loncom/publisher/lonpubdir.pm 2001/04/01 02:58:51 1.1 +++ loncom/publisher/lonpubdir.pm 2001/04/09 23:49:04 1.4 @@ -10,7 +10,7 @@ # 03/23 Guy Albertelli # 03/24,03/29 Gerd Kortemeyer) # -# 03/31 Gerd Kortemeyer +# 03/31,04/03 Gerd Kortemeyer package Apache::lonpubdir; @@ -34,10 +34,11 @@ sub handler { $fn=$r->filename(); } + $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; } @@ -57,24 +58,63 @@ sub handler { my $thisdisfn=$fn; $thisdisfn=~s/^\/home\/$uname\/public_html//; - $r->print('

Construction Space Directory '.$thisdisfn.'

'); + $r->print('

Construction Space Directory '.$thisdisfn.'/

'); 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; - $r->print(''); + 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'; + } + } + $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('
FilenameModifiedStatus
'.$filename. + ''.localtime($cmtime).''.$status.'
'.$disfilename. + ''.localtime($cmtime).' 
'); return OK; } + +1; +__END__