File:  [LON-CAPA] / loncom / interface / lonindexer.pm
Revision 1.1: download - view: text, annotated - select for diffs
Mon Aug 28 21:07:32 2000 UTC (23 years, 10 months ago) by www
Branches: MAIN
CVS tags: HEAD
Lonindexer moved

    1: # The LearningOnline Network with CAPA
    2: # Directory Indexer
    3: # (Login Screen
    4: # 5/21/99,5/22,5/25,5/26,5/31,6/2,6/10,7/12,7/14 Gerd Kortemeyer)
    5: # 11/23 Gerd Kortemeyer
    6: # 07/20-08/04 H.K. Ng
    7: #
    8: package Apache::lonindexer;
    9: 
   10: use strict;
   11: use Apache::lonnet();
   12: use Apache::Constants qw(:common);
   13: 
   14: sub handler {
   15:     my $r = shift;
   16:     $r->content_type('text/html');
   17:     $r->send_http_header;
   18:     return OK if $r->header_only;
   19: 
   20:     my $iconpath= $r->dir_config('lonIconsURL');
   21:     my $domain  = $r->dir_config('lonDefDomain');
   22:     my $role    = $r->dir_config('lonRole');
   23:     my $loadlim = $r->dir_config('lonLoadLim');
   24:     my $servadm = $r->dir_config('lonAdmEMail');
   25:     my $sysadm  = $r->dir_config('lonSysEMail');
   26:     my $lonhost = $r->dir_config('lonHostID');
   27:     my $tabdir  = $r->dir_config('lonTabDir');
   28: 
   29: # ---------------------------------------------------------------- Print Header
   30:     $r->print(<<ENDHEADER);
   31: <html>
   32: <head>
   33: <title>The LearningOnline Network Directory Browser</title>
   34: </head>
   35: <body bgcolor="#FFFFFF">
   36: ENDHEADER
   37: 
   38:     my $line;
   39:     my (@attrchk,@openpath);
   40:     my $uri=$r->uri;
   41:     my $iconpath="/res/adm/pages/indexericons/";
   42: 
   43:     $r->print("<h2>The LearningOnline Network Directory Browser</h2>\n");
   44: 
   45:     for (my $i=0; $i<=5; $i++) {
   46: 	$attrchk[$i] = "checked" if $ENV{'form.attr'.$i} == 1;
   47:     }
   48:     $r->print(<<END);
   49: <b>Display file attributes</b><br>
   50: <form method="post" name="fileattr" action="$uri" enctype="application/x-www-form-urlencoded">
   51: <table border=0><tr>
   52: <td><input type=checkbox name=attr0 value="1" $attrchk[0]>Size</td>
   53: <td><input type=checkbox name=attr1 value="1" $attrchk[1]>Last access</td>
   54: <td><input type=checkbox name=attr2 value="1" $attrchk[2]>Last modified</td>
   55: </tr><tr>
   56: <td><input type=checkbox name=attr3 value="1" $attrchk[3]>Author</td>
   57: <td><input type=checkbox name=attr4 value="1" $attrchk[4]>Keywords</td>
   58: <td><input type=checkbox name=attr5 value="1" $attrchk[5]>Language</td>
   59: </tr></table>
   60: <input type=hidden name=openuri value="$ENV{'form.openuri'}">
   61: <input type="submit" name="dirlistattr" value="Review">
   62: <input type="submit" name="dirlistattr" value="Refresh">
   63: </form>
   64: END
   65:     my $titleclr="#ddffff";
   66:     my $fileclr="#ffffdd";
   67: 
   68:     $r->print("<table border=0><tr><td bgcolor=#eeeeee>\n");
   69:     $r->print("<table border=0><tr>\n");
   70:     $r->print("<td bgcolor=$titleclr><b>Name</b></td>\n");
   71:     $r->print("<td bgcolor=$titleclr align=right><b>Size (bytes) </b></td>\n") if ($ENV{'form.attr0'} == 1);
   72:     $r->print("<td bgcolor=$titleclr><b>Last accessed</b></td>\n") if ($ENV{'form.attr1'} == 1);
   73:     $r->print("<td bgcolor=$titleclr><b>Last modified</b></td>\n") if ($ENV{'form.attr2'} == 1);
   74:     $r->print("</tr>");
   75: 
   76:     if ($ENV{'form.openuri'} =~ /$uri\&/) {
   77: 	my @pathcom = split(/\//,$uri);
   78: 	pop @pathcom;
   79: 	my $splituri = join ('/',@pathcom);
   80: 	$uri = join ('',$splituri,"/");
   81:     }
   82: 
   83: 
   84:     my $openuri = $ENV{'form.openuri'};
   85: #    $r->print ("<hr>openuri=$openuri<br>");
   86:     $openuri =~ s/$uri(.*)\&//g;
   87: #    $r->print ("<hr>parsed openuri=$openuri<br>");
   88:     @openpath = split(/\&/,$openuri);
   89: #    $r->print ("<hr>open path=@openpath<br>");
   90:     push @openpath, $uri;
   91: #    $r->print ("<hr>append current uri to open path=@openpath<br>");
   92:     @openpath = sort @openpath;
   93: #    $r->print ("<hr>sorted open path=@openpath<br>");
   94: 
   95: 
   96:     my $indent = -1;
   97:     &display_line ($r,1,"/res/".$domain."&domain");
   98:     &branch ($r,"/res/".$domain."/",$indent,@openpath);
   99: 
  100:     $r->print("</table>");
  101:     $r->print("</td></tr></table>");
  102:     $r->print("</body></html>\n");
  103: #    &display_env($r);
  104: 
  105:     return OK;
  106: }
  107:  
  108: #    my @packlist=&Apache::lonnet::dirlist($uri);
  109: #    print "Dir list<br>".join('<br>',@packlist)."<br>";    
  110: 
  111: sub branch {
  112:     my ($r,$uri,$indent,@openuri)=@_;
  113:     my ($calluri,$line,@list);
  114:     my ($domusr,$foo,$strip,$testdir,$compuri,$chkdir,$diropen);
  115:     my $dirptr=16384;
  116:     $indent++;
  117: 
  118:     foreach $calluri (@openuri) {
  119: 	@list=&get_list($r,$uri);
  120: 	foreach $line (@list) {
  121: 	    chomp $line;
  122: 
  123: 	    ($strip,$domusr,$foo,$testdir,$foo)=split(/\&/,$line,5);
  124: 	    $compuri=join("",$strip,"/");
  125: 	    $chkdir=$testdir&$dirptr;
  126: 	    if ($domusr eq "domain" or $domusr eq "user") {
  127: 		$chkdir = $dirptr;
  128: 		$testdir = $dirptr;
  129: 	    }
  130: 	    $diropen = 0;
  131: 	    $diropen = 1 if ($compuri eq $calluri);
  132: 	    &display_line($r,$diropen,$line,$indent);
  133: 
  134: 	    my @securi;
  135: 	    push @securi,$calluri;
  136: 	    &branch($r,$compuri,$indent,@securi) if ($calluri =~ $compuri and $calluri=~/^$uri/ and $chkdir == $dirptr and $testdir ne "");
  137: 	}
  138:     }
  139:     $indent--;
  140: }
  141: 
  142: # ------ get complete list based on the uri ------
  143: sub get_list {
  144:     my ($r,$uri)=@_;
  145:     my @list;
  146:     my $luri=$uri;
  147:     $luri=~s/\//_/g;
  148:     unlink "/home/httpd/perl/tmp/$ENV{'user.name'}_dirlist*.tmp" if ($ENV{'form.dirlistattr'} eq "Refresh");
  149:     my $dirlist = "/home/httpd/perl/tmp/$ENV{'user.name'}_dirlist$luri.tmp";
  150:     if (-e $dirlist) {
  151: 	my $FH = Apache::File->new($dirlist);
  152: 	@list=<$FH>;
  153:     } else {
  154: 	@list=&Apache::lonnet::dirlist($uri);
  155: 	my $FH = Apache::File->new(">$dirlist");
  156: 	print $FH join("\n",@list);
  157:     }
  158:     return @list=&match_ext($r,@list);
  159: }
  160: 
  161: # ------ get previously opened path, if any ------
  162: sub get_openpath {
  163:     my $uri=shift;
  164:     my @list;
  165:     my $openlist = "/home/httpd/perl/tmp/$ENV{'user.name'}_dirlist_open_path.tmp";
  166:     if (-e $openlist) {
  167: 	my $FH = Apache::File->new($openlist);
  168: 	@list=<$FH>;
  169: 	close ($FH);
  170: 	my $line;
  171: 	my $FH = Apache::File->new(">$openlist");
  172: 	print $FH "$uri\n" if $list[0] eq "";
  173: 	foreach $line (@list) {
  174: 	    chomp $line;
  175: 	    if ($line eq $uri) {
  176: 		my @pathcom = split(/\//,$uri);
  177: 		pop @pathcom;
  178: 		my $splituri = join ('/',@pathcom);
  179: 		$uri = join ('',$splituri,"/");
  180: 	    } else {
  181: 		print $FH "$line\n";
  182: 	    }
  183: 	}
  184:     } else {
  185: 	my $FH = Apache::File->new(">$openlist");
  186: 	print $FH "$uri\n";
  187:     }
  188:     return $uri;
  189: }
  190: 
  191: sub match_ext {
  192:     my ($r,@packlist)=@_;
  193:     my $line;
  194:     my @trimlist;
  195:     my $nextline;
  196:     my @fileext;
  197:     my $dirptr=16384;
  198: 
  199:     my $tabdir  = $r->dir_config('lonTabDir');
  200:     my $fn = $tabdir."/filetypes.tab";
  201:     if (-e $fn) {
  202: 	my $FH=Apache::File->new($fn);
  203: 	my @content=<$FH>;
  204: 	foreach $line (@content) {
  205: 	    (my $ext,my $foo) = split /\s+/,$line;
  206: 	    push @fileext,$ext;
  207: 	}
  208:     }
  209:     foreach $line (@packlist) {
  210: 	my ($foo,$strip) = split(/\/html/,$line);
  211: 	my @unpacklist = split (/\&/,$strip);
  212: 
  213: 	my @pathfn = split (/\//,$unpacklist[0]);
  214: 	my $fndir = $pathfn[scalar(@pathfn)-1];
  215: 	my @filecom = split (/\./,$fndir);
  216: 	my $curfext = $filecom[scalar(@filecom)-1];
  217: 	my $fnptr = $unpacklist[3]&$dirptr;
  218:  	if ($fnptr == 0 and $unpacklist[3] ne "") {
  219: 	    foreach $nextline (@fileext) {
  220: 		push @trimlist,$strip if $nextline eq $curfext;
  221: 	    }
  222: 	} else {
  223: 	    push @trimlist,$strip;
  224: 	}
  225:     }
  226:     return @trimlist;
  227: }
  228: 
  229: sub display_line{
  230:     my ($r,$diropen,$line,$indent)=@_;
  231:     my (@pathfn, $fndir, $fnptr);
  232:     my $dirptr=16384;
  233:     my $fileclr="#ffffe6";
  234:     my $iconpath="/res/adm/pages/indexericons/";
  235: 
  236:     my @filecom = split (/\&/,$line);
  237:     my @pathcom = split (/\//,$filecom[0]);
  238:     my $listname = $pathcom[scalar(@pathcom)-1];
  239:     my $fnptr = $filecom[3]&$dirptr;
  240: 
  241:     my $tabtag="</td>";
  242:     my $nextline;
  243:     my $i=0;
  244: 
  245:     while ($i<=5) {
  246: 	my $key="form.attr".$i;
  247: 	$tabtag=join('',$tabtag,"<td bgcolor=",$fileclr,">&nbsp;</td>") if $ENV{$key} == 1;
  248: 	$i++;
  249:     }
  250: 
  251:     if ($filecom[1] eq "domain") {
  252: 	$r->print("<tr>");
  253: 	$r->print("<td bgcolor=$fileclr valign=bottom>");
  254: 	&begin_form ($r,$filecom[0]);
  255: 	$r->print ("<input src=\"$iconpath");
  256: 	$r->print ("comp.blue.gif\"");
  257: 	$r->print (" name=\"submit\" height=\"22\" type=\"image\" border=\"0\">\n");
  258: 	$r->print("Domain - $listname $tabtag</tr></form>\n");
  259: 	return OK;
  260:     }
  261: 
  262:     if ($filecom[1] eq "user") {
  263: 	$r->print("<tr>");
  264: 	$r->print("<td bgcolor=$fileclr valign=bottom>\n");
  265: 	&begin_form ($r,$filecom[0]);
  266: 	my $count = 0;
  267: 	while ($count <= $indent) {
  268: 	    $r->print("<img src=",$iconpath,"white_space_20_22.gif border=0>\n");
  269: 	    $count++;
  270: 	}
  271: 	$r->print ("<input src=\"$iconpath");
  272: 	$r->print ("folder_pointer_closed.gif\"") if $diropen == 0;
  273: 	$r->print ("folder_pointer_opened.gif\"") if $diropen == 1;
  274: 	$r->print (" name=\"submit\" height=\"22\" type=\"image\" border=\"0\">\n");
  275: 	$r->print("<img src=",$iconpath,"quill.gif border=0>\n");
  276: 	$r->print("$listname $tabtag</tr></form>\n");
  277: 	return OK;
  278:     }
  279: 
  280: # display file
  281:     if ($fnptr == 0 and $filecom[3] ne "") {
  282: 	my @file_ext = split (/\./,$listname);
  283: 	my $curfext = $file_ext[scalar(@file_ext)-1];
  284: 	my $count = 0;
  285: 	$r->print("<tr><td bgcolor=$fileclr>");
  286: 	while ($count <= $indent) {
  287: 	    $r->print("<img src=",$iconpath,"white_space_20_22.gif border=0>\n");
  288: 	    $count++;
  289: 	}
  290: 	$r->print("<img src=",$iconpath,"white_space_20_22.gif border=0>\n");
  291: 	$r->print("<img src=$iconpath$curfext.gif border=0>\n");
  292: 	$r->print(" <a href=$filecom[0]>",$listname,"</a> </td>\n");
  293: 	$r->print("<td bgcolor=$fileclr align=right valign=bottom> ",$filecom[8]," </td>\n") if $ENV{'form.attr0'} == 1;
  294: 	$r->print("<td bgcolor=$fileclr valign=bottom> ".(localtime($filecom[9]))." </td>\n") if $ENV{'form.attr1'} == 1;
  295: 	$r->print("<td bgcolor=$fileclr valign=bottom> ".(localtime($filecom[10]))." </td>\n") if $ENV{'form.attr2'} == 1;
  296: 	$r->print("</tr>\n");
  297:     }
  298: 
  299: # display directory
  300:     if ($fnptr == $dirptr) {
  301: 	my @file_ext = split (/\./,$listname);
  302: 	my $curfext = $file_ext[scalar(@file_ext)-1];
  303: 	$r->print("<tr><td bgcolor=$fileclr valign=bottom>");
  304: 	&begin_form ($r,$filecom[0]);
  305: 
  306: 	my $count = 0;
  307: 	while ($count <= $indent) {
  308: 	    $r->print("<img src=",$iconpath,"white_space_20_22.gif border=0>\n");
  309: 	    $count++;
  310: 	}
  311: 
  312: 	$r->print ("<input src=\"$iconpath");
  313: 	$r->print ("folder_pointer_closed.gif\"") if $diropen == 0;
  314: 	$r->print ("folder_pointer_opened.gif\"") if $diropen == 1;
  315: 	$r->print (" name=\"submit\" height=\"22\" type=\"image\" border=\"0\">\n");
  316: 	$r->print("<img src=",$iconpath,"folder_closed.gif border=0>\n") if $diropen == 0;
  317: 	$r->print("<img src=",$iconpath,"folder_opened.gif border=0>\n") if $diropen == 1;
  318: 	$r->print("$listname $tabtag</tr></form>\n");
  319:     }
  320: }
  321: 
  322: sub begin_form {
  323:     my ($r,$uri) = @_;
  324:     my $currenturi = $r->uri;
  325:     my $openuri = $ENV{'form.openuri'};
  326:     if ($ENV{'form.openuri'} =~ /$currenturi(.*)\&/) {
  327: 	$openuri =~ s/$currenturi(.*)\&//g;
  328:     } else {
  329: 	$currenturi = join ('',$currenturi,"&");
  330: 	$openuri = join ('&',$ENV{'form.openuri'},$currenturi);
  331: 	$openuri =~ s/\&+/\&/g;
  332:     }
  333:     $r->print ("<form method=\"post\" name=\"dirpath\" action=\"$uri/\" enctype=\"application/x-www-form-urlencoded\">\n");
  334:     $r->print ("<input type=hidden name=openuri value=\"$openuri\">\n");
  335: 
  336:     for (my $i=0; $i<=5; $i++) {
  337: 	$r->print ("<input type=hidden name=attr$i value=\"1\">\n") if $ENV{'form.attr'.$i} == 1;
  338:     }
  339: }
  340: 
  341: sub display_env {
  342:     my $r=shift;
  343:     my %otherenv;
  344:     $otherenv{'hi'}='there';
  345:     $otherenv{'does_this'}='work?';
  346:     &Apache::lonnet::appenv(%otherenv);
  347:     my $envkey;
  348:     foreach $envkey (sort keys %ENV) {
  349: 	$r->print("$envkey: $ENV{$envkey}<br>\n");
  350:     }
  351: #    $r->print("<hr>".&Apache::lonnet::ssi('/res/msu/korte/test.tex')); 
  352: #    $r->print("<hr>".join('<br>',&Apache::lonnet::dirlist('/res/msu/korte/')));
  353: }
  354: 
  355: 1;
  356: __END__

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