Annotation of loncom/interface/lonindexer.pm, revision 1.1

1.1     ! www         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>