Diff for /loncom/homework/Attic/lonindexer.pm between versions 1.1 and 1.4

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,">&nbsp;</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__

Removed from v.1.1  
changed lines
  Added in v.1.4


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