version 1.1, 2000/02/22 21:33:18
|
version 1.4, 2000/08/04 19:24:12
|
Line 3
|
Line 3
|
# (Login Screen |
# (Login Screen |
# 5/21/99,5/22,5/25,5/26,5/31,6/2,6/10,7/12,7/14 Gerd Kortemeyer) |
# 5/21/99,5/22,5/25,5/26,5/31,6/2,6/10,7/12,7/14 Gerd Kortemeyer) |
# 11/23 Gerd Kortemeyer |
# 11/23 Gerd Kortemeyer |
|
# 07/20-08/04 H.K. Ng |
# |
# |
package Apache::lonindexer; |
package Apache::lonindexer; |
|
|
Line 33 sub handler {
|
Line 34 sub handler {
|
</head> |
</head> |
<body bgcolor="#FFFFFF"> |
<body bgcolor="#FFFFFF"> |
ENDHEADER |
ENDHEADER |
|
|
|
my $line; |
|
my (@attrchk,@openpath); |
|
my $uri=$r->uri; |
|
my $iconpath="/res/adm/pages/indexericons/"; |
|
|
|
$r->print("<h2>The LearningOnline Network Directory Browser</h2>\n"); |
|
|
|
for (my $i=0; $i<=5; $i++) { |
|
$attrchk[$i] = "checked" if $ENV{'form.attr'.$i} == 1; |
|
} |
|
$r->print(<<END); |
|
<b>Display file attributes</b><br> |
|
<form method="post" name="fileattr" action="$uri" enctype="application/x-www-form-urlencoded"> |
|
<table border=0><tr> |
|
<td><input type=checkbox name=attr0 value="1" $attrchk[0]>Size</td> |
|
<td><input type=checkbox name=attr1 value="1" $attrchk[1]>Last access</td> |
|
<td><input type=checkbox name=attr2 value="1" $attrchk[2]>Last modified</td> |
|
</tr><tr> |
|
<td><input type=checkbox name=attr3 value="1" $attrchk[3]>Author</td> |
|
<td><input type=checkbox name=attr4 value="1" $attrchk[4]>Keywords</td> |
|
<td><input type=checkbox name=attr5 value="1" $attrchk[5]>Language</td> |
|
</tr></table> |
|
<input type=hidden name=openuri value="$ENV{'form.openuri'}"> |
|
<input type="submit" name="dirlistattr" value="Review"> |
|
<input type="submit" name="dirlistattr" value="Refresh"> |
|
</form> |
|
END |
|
my $titleclr="#ddffff"; |
|
my $fileclr="#ffffdd"; |
|
|
|
$r->print("<table border=0><tr><td bgcolor=#eeeeee>\n"); |
|
$r->print("<table border=0><tr>\n"); |
|
$r->print("<td bgcolor=$titleclr><b>Name</b></td>\n"); |
|
$r->print("<td bgcolor=$titleclr align=right><b>Size (bytes) </b></td>\n") if ($ENV{'form.attr0'} == 1); |
|
$r->print("<td bgcolor=$titleclr><b>Last accessed</b></td>\n") if ($ENV{'form.attr1'} == 1); |
|
$r->print("<td bgcolor=$titleclr><b>Last modified</b></td>\n") if ($ENV{'form.attr2'} == 1); |
|
$r->print("</tr>"); |
|
|
|
if ($ENV{'form.openuri'} =~ /$uri\&/) { |
|
my @pathcom = split(/\//,$uri); |
|
pop @pathcom; |
|
my $splituri = join ('/',@pathcom); |
|
$uri = join ('',$splituri,"/"); |
|
} |
|
|
|
|
|
my $openuri = $ENV{'form.openuri'}; |
|
# $r->print ("<hr>openuri=$openuri<br>"); |
|
$openuri =~ s/$uri(.*)\&//g; |
|
# $r->print ("<hr>parsed openuri=$openuri<br>"); |
|
@openpath = split(/\&/,$openuri); |
|
# $r->print ("<hr>open path=@openpath<br>"); |
|
push @openpath, $uri; |
|
# $r->print ("<hr>append current uri to open path=@openpath<br>"); |
|
@openpath = sort @openpath; |
|
# $r->print ("<hr>sorted open path=@openpath<br>"); |
|
|
|
|
|
my $indent = -1; |
|
&display_line ($r,1,"/res/".$domain."&domain"); |
|
&branch ($r,"/res/".$domain."/",$indent,@openpath); |
|
|
|
$r->print("</table>"); |
|
$r->print("</td></tr></table>"); |
|
$r->print("</body></html>\n"); |
|
# &display_env($r); |
|
|
|
return OK; |
|
} |
|
|
|
# my @packlist=&Apache::lonnet::dirlist($uri); |
|
# print "Dir list<br>".join('<br>',@packlist)."<br>"; |
|
|
|
sub branch { |
|
my ($r,$uri,$indent,@openuri)=@_; |
|
my ($calluri,$line,@list); |
|
my ($domusr,$foo,$strip,$testdir,$compuri,$chkdir,$diropen); |
|
my $dirptr=16384; |
|
$indent++; |
|
|
|
foreach $calluri (@openuri) { |
|
@list=&get_list($r,$uri); |
|
foreach $line (@list) { |
|
chomp $line; |
|
|
|
($strip,$domusr,$foo,$testdir,$foo)=split(/\&/,$line,5); |
|
$compuri=join("",$strip,"/"); |
|
$chkdir=$testdir&$dirptr; |
|
if ($domusr eq "domain" or $domusr eq "user") { |
|
$chkdir = $dirptr; |
|
$testdir = $dirptr; |
|
} |
|
$diropen = 0; |
|
$diropen = 1 if ($compuri eq $calluri); |
|
&display_line($r,$diropen,$line,$indent); |
|
|
|
my @securi; |
|
push @securi,$calluri; |
|
&branch($r,$compuri,$indent,@securi) if ($calluri =~ $compuri and $calluri=~/^$uri/ and $chkdir == $dirptr and $testdir ne ""); |
|
} |
|
} |
|
$indent--; |
|
} |
|
|
|
# ------ get complete list based on the uri ------ |
|
sub get_list { |
|
my ($r,$uri)=@_; |
|
my @list; |
|
my $luri=$uri; |
|
$luri=~s/\//_/g; |
|
unlink "/home/httpd/perl/tmp/$ENV{'user.name'}_dirlist*.tmp" if ($ENV{'form.dirlistattr'} eq "Refresh"); |
|
my $dirlist = "/home/httpd/perl/tmp/$ENV{'user.name'}_dirlist$luri.tmp"; |
|
if (-e $dirlist) { |
|
my $FH = Apache::File->new($dirlist); |
|
@list=<$FH>; |
|
} else { |
|
@list=&Apache::lonnet::dirlist($uri); |
|
my $FH = Apache::File->new(">$dirlist"); |
|
print $FH join("\n",@list); |
|
} |
|
return @list=&match_ext($r,@list); |
|
} |
|
|
|
# ------ get previously opened path, if any ------ |
|
sub get_openpath { |
|
my $uri=shift; |
|
my @list; |
|
my $openlist = "/home/httpd/perl/tmp/$ENV{'user.name'}_dirlist_open_path.tmp"; |
|
if (-e $openlist) { |
|
my $FH = Apache::File->new($openlist); |
|
@list=<$FH>; |
|
close ($FH); |
|
my $line; |
|
my $FH = Apache::File->new(">$openlist"); |
|
print $FH "$uri\n" if $list[0] eq ""; |
|
foreach $line (@list) { |
|
chomp $line; |
|
if ($line eq $uri) { |
|
my @pathcom = split(/\//,$uri); |
|
pop @pathcom; |
|
my $splituri = join ('/',@pathcom); |
|
$uri = join ('',$splituri,"/"); |
|
} else { |
|
print $FH "$line\n"; |
|
} |
|
} |
|
} else { |
|
my $FH = Apache::File->new(">$openlist"); |
|
print $FH "$uri\n"; |
|
} |
|
return $uri; |
|
} |
|
|
|
sub match_ext { |
|
my ($r,@packlist)=@_; |
|
my $line; |
|
my @trimlist; |
|
my $nextline; |
|
my @fileext; |
|
my $dirptr=16384; |
|
|
|
my $tabdir = $r->dir_config('lonTabDir'); |
|
my $fn = $tabdir."/filetypes.tab"; |
|
if (-e $fn) { |
|
my $FH=Apache::File->new($fn); |
|
my @content=<$FH>; |
|
foreach $line (@content) { |
|
(my $ext,my $foo) = split /\s+/,$line; |
|
push @fileext,$ext; |
|
} |
|
} |
|
foreach $line (@packlist) { |
|
my ($foo,$strip) = split(/\/html/,$line); |
|
my @unpacklist = split (/\&/,$strip); |
|
|
|
my @pathfn = split (/\//,$unpacklist[0]); |
|
my $fndir = $pathfn[scalar(@pathfn)-1]; |
|
my @filecom = split (/\./,$fndir); |
|
my $curfext = $filecom[scalar(@filecom)-1]; |
|
my $fnptr = $unpacklist[3]&$dirptr; |
|
if ($fnptr == 0 and $unpacklist[3] ne "") { |
|
foreach $nextline (@fileext) { |
|
push @trimlist,$strip if $nextline eq $curfext; |
|
} |
|
} else { |
|
push @trimlist,$strip; |
|
} |
|
} |
|
return @trimlist; |
|
} |
|
|
|
sub display_line{ |
|
my ($r,$diropen,$line,$indent)=@_; |
|
my (@pathfn, $fndir, $fnptr); |
|
my $dirptr=16384; |
|
my $fileclr="#ffffe6"; |
|
my $iconpath="/res/adm/pages/indexericons/"; |
|
|
|
my @filecom = split (/\&/,$line); |
|
my @pathcom = split (/\//,$filecom[0]); |
|
my $listname = $pathcom[scalar(@pathcom)-1]; |
|
my $fnptr = $filecom[3]&$dirptr; |
|
|
|
my $tabtag="</td>"; |
|
my $nextline; |
|
my $i=0; |
|
|
|
while ($i<=5) { |
|
my $key="form.attr".$i; |
|
$tabtag=join('',$tabtag,"<td bgcolor=",$fileclr,"> </td>") if $ENV{$key} == 1; |
|
$i++; |
|
} |
|
|
|
if ($filecom[1] eq "domain") { |
|
$r->print("<tr>"); |
|
$r->print("<td bgcolor=$fileclr valign=bottom>"); |
|
&begin_form ($r,$filecom[0]); |
|
$r->print ("<input src=\"$iconpath"); |
|
$r->print ("comp.blue.gif\""); |
|
$r->print (" name=\"submit\" height=\"22\" type=\"image\" border=\"0\">\n"); |
|
$r->print("Domain - $listname $tabtag</tr></form>\n"); |
|
return OK; |
|
} |
|
|
|
if ($filecom[1] eq "user") { |
|
$r->print("<tr>"); |
|
$r->print("<td bgcolor=$fileclr valign=bottom>\n"); |
|
&begin_form ($r,$filecom[0]); |
|
my $count = 0; |
|
while ($count <= $indent) { |
|
$r->print("<img src=",$iconpath,"white_space_20_22.gif border=0>\n"); |
|
$count++; |
|
} |
|
$r->print ("<input src=\"$iconpath"); |
|
$r->print ("folder_pointer_closed.gif\"") if $diropen == 0; |
|
$r->print ("folder_pointer_opened.gif\"") if $diropen == 1; |
|
$r->print (" name=\"submit\" height=\"22\" type=\"image\" border=\"0\">\n"); |
|
$r->print("<img src=",$iconpath,"quill.gif border=0>\n"); |
|
$r->print("$listname $tabtag</tr></form>\n"); |
|
return OK; |
|
} |
|
|
|
# display file |
|
if ($fnptr == 0 and $filecom[3] ne "") { |
|
my @file_ext = split (/\./,$listname); |
|
my $curfext = $file_ext[scalar(@file_ext)-1]; |
|
my $count = 0; |
|
$r->print("<tr><td bgcolor=$fileclr>"); |
|
while ($count <= $indent) { |
|
$r->print("<img src=",$iconpath,"white_space_20_22.gif border=0>\n"); |
|
$count++; |
|
} |
|
$r->print("<img src=",$iconpath,"white_space_20_22.gif border=0>\n"); |
|
$r->print("<img src=$iconpath$curfext.gif border=0>\n"); |
|
$r->print(" <a href=$filecom[0]>",$listname,"</a> </td>\n"); |
|
$r->print("<td bgcolor=$fileclr align=right valign=bottom> ",$filecom[8]," </td>\n") if $ENV{'form.attr0'} == 1; |
|
$r->print("<td bgcolor=$fileclr valign=bottom> ".(localtime($filecom[9]))." </td>\n") if $ENV{'form.attr1'} == 1; |
|
$r->print("<td bgcolor=$fileclr valign=bottom> ".(localtime($filecom[10]))." </td>\n") if $ENV{'form.attr2'} == 1; |
|
$r->print("</tr>\n"); |
|
} |
|
|
|
# display directory |
|
if ($fnptr == $dirptr) { |
|
my @file_ext = split (/\./,$listname); |
|
my $curfext = $file_ext[scalar(@file_ext)-1]; |
|
$r->print("<tr><td bgcolor=$fileclr valign=bottom>"); |
|
&begin_form ($r,$filecom[0]); |
|
|
|
my $count = 0; |
|
while ($count <= $indent) { |
|
$r->print("<img src=",$iconpath,"white_space_20_22.gif border=0>\n"); |
|
$count++; |
|
} |
|
|
|
$r->print ("<input src=\"$iconpath"); |
|
$r->print ("folder_pointer_closed.gif\"") if $diropen == 0; |
|
$r->print ("folder_pointer_opened.gif\"") if $diropen == 1; |
|
$r->print (" name=\"submit\" height=\"22\" type=\"image\" border=\"0\">\n"); |
|
$r->print("<img src=",$iconpath,"folder_closed.gif border=0>\n") if $diropen == 0; |
|
$r->print("<img src=",$iconpath,"folder_opened.gif border=0>\n") if $diropen == 1; |
|
$r->print("$listname $tabtag</tr></form>\n"); |
|
} |
|
} |
|
|
|
sub begin_form { |
|
my ($r,$uri) = @_; |
|
my $currenturi = $r->uri; |
|
my $openuri = $ENV{'form.openuri'}; |
|
if ($ENV{'form.openuri'} =~ /$currenturi(.*)\&/) { |
|
$openuri =~ s/$currenturi(.*)\&//g; |
|
} else { |
|
$currenturi = join ('',$currenturi,"&"); |
|
$openuri = join ('&',$ENV{'form.openuri'},$currenturi); |
|
$openuri =~ s/\&+/\&/g; |
|
} |
|
$r->print ("<form method=\"post\" name=\"dirpath\" action=\"$uri/\" enctype=\"application/x-www-form-urlencoded\">\n"); |
|
$r->print ("<input type=hidden name=openuri value=\"$openuri\">\n"); |
|
|
|
for (my $i=0; $i<=5; $i++) { |
|
$r->print ("<input type=hidden name=attr$i value=\"1\">\n") if $ENV{'form.attr'.$i} == 1; |
|
} |
|
} |
|
|
|
sub display_env { |
|
my $r=shift; |
my %otherenv; |
my %otherenv; |
$otherenv{'hi'}='there'; |
$otherenv{'hi'}='there'; |
$otherenv{'does_this'}='work?'; |
$otherenv{'does_this'}='work?'; |
Line 41 ENDHEADER
|
Line 348 ENDHEADER
|
foreach $envkey (sort keys %ENV) { |
foreach $envkey (sort keys %ENV) { |
$r->print("$envkey: $ENV{$envkey}<br>\n"); |
$r->print("$envkey: $ENV{$envkey}<br>\n"); |
} |
} |
$r->print("</body></html>\n"); |
# $r->print("<hr>".&Apache::lonnet::ssi('/res/msu/korte/test.tex')); |
return OK; |
# $r->print("<hr>".join('<br>',&Apache::lonnet::dirlist('/res/msu/korte/'))); |
} |
} |
|
|
1; |
1; |
__END__ |
__END__ |