Diff for /loncom/interface/lonindexer.pm between versions 1.30 and 1.64

version 1.30, 2001/12/13 13:59:22 version 1.64, 2003/05/29 01:08:05
Line 34 Line 34
 # 05/9-05/19/2001 H. K. Ng  # 05/9-05/19/2001 H. K. Ng
 # 05/21/2001 H. K. Ng  # 05/21/2001 H. K. Ng
 # 05/23/2001 H. K. Ng  # 05/23/2001 H. K. Ng
 # 5/31,6/1,6/2,6/15 Scott Harrison  
 # 6/26,7/8 H. K. Ng  # 6/26,7/8 H. K. Ng
 # 8/6,8/7,8/10 Scott Harrison  
 # 8/14 H. K. Ng  # 8/14 H. K. Ng
 # 8/28,10/15,11/28,11/29 Scott Harrison  
 # 11/30 Matthew Hall  # 11/30 Matthew Hall
 # 12/11,12/13 Scott Harrison  # YEAR=2002
   # 6/29/2002 H. K. Ng
 #  #
 ###  ###
   
Line 78  my $extrafield; # default extra table ce Line 76  my $extrafield; # default extra table ce
 my $fnum; # file counter  my $fnum; # file counter
 my $dnum; # directory counter  my $dnum; # directory counter
   
 # ---------------------------------------------------------------------- BEGIN  # ----- Used to include or exclude files with certain extensions.
 sub BEGIN {  my @Only = ();
 }  my @Omit = ();
   
   
 # ----------------------------- Handling routine called via Apache and mod_perl  # ----------------------------- Handling routine called via Apache and mod_perl
 sub handler {  sub handler {
     my $r = shift;      my $r = shift;
     $r->content_type('text/html');      $r->content_type('text/html');
       &Apache::loncommon::no_cache($r);
     $r->send_http_header;      $r->send_http_header;
     return OK if $r->header_only;      return OK if $r->header_only;
     $fnum=0;      $fnum=0;
     $dnum=0;      $dnum=0;
     untie %hash;      untie %hash;
   
       # Deal with stupid global variables (is there a way around making
       # these global to this package?  It is just so wrong....)
       undef (@Only);
       undef (@Omit);
   
 # ------------------------------------- read in machine configuration variables  # ------------------------------------- read in machine configuration variables
     my $iconpath= $r->dir_config('lonIconsURL') . "/";      my $iconpath= $r->dir_config('lonIconsURL') . "/";
     my $domain  = $r->dir_config('lonDefDomain');      my $domain  = $r->dir_config('lonDefDomain');
Line 108  sub handler { Line 113  sub handler {
     my $uri=$r->uri;      my $uri=$r->uri;
   
 # -------------------------------------- see if called from an interactive mode  # -------------------------------------- see if called from an interactive mode
     &get_unprocessed_cgi();      # Get the parameters from the query string
       &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
        ['catalogmode','launch','acts','mode','form','element',
                 'only','omit']);
       #-------------------------------------------------------------------
     my $closebutton='';      my $closebutton='';
     my $groupimportbutton='';      my $groupimportbutton='';
     my $colspan='';       my $colspan=''; 
Line 118  sub handler { Line 126  sub handler {
     my $diropendb =       my $diropendb = 
  "/home/httpd/perl/tmp/$domain\_$ENV{'user.name'}_indexer.db";   "/home/httpd/perl/tmp/$domain\_$ENV{'user.name'}_indexer.db";
   
     if (tie(%hash,'GDBM_File',$diropendb,&GDBM_WRCREAT,0640)) {      if (tie(%hash,'GDBM_File',$diropendb,&GDBM_WRCREAT(),0640)) {
  if ($ENV{'form.launch'} eq '1') {   if ($ENV{'form.launch'} eq '1') {
     &start_fresh_session();      &start_fresh_session();
  }          }
   
 # -------------------- refresh environment with user database values (in %hash)  # -------------------- refresh environment with user database values (in %hash)
  if ($hash{'mode_catalog'} eq 'interactive') {   &setvalues(\%hash,'form.catalogmode',\%ENV,'form.catalogmode'   );
     $ENV{'form.catalogmode'}='interactive';  
  }  
  if ($hash{'mode_catalog'} eq 'groupimport') {  
     $ENV{'form.catalogmode'}='groupimport';  
  }  
   
 # --------------------- define extra fields and buttons in case of special mode  # --------------------- define extra fields and buttons in case of special mode
  if ($ENV{'form.catalogmode'} eq 'interactive') {   if ($ENV{'form.catalogmode'} eq 'interactive') {
     $hash{'mode_catalog'}='interactive';  
     $extrafield='<td bgcolor="'.$fileclr.'" valign="bottom">'.      $extrafield='<td bgcolor="'.$fileclr.'" valign="bottom">'.
  '<a name="$anchor"><img src="'.$iconpath.'whitespace1.gif"'.   '<a name="$anchor"><img src="'.$iconpath.'whitespace1.gif"'.
  ' border="0" /></td>';   ' border="0" /></td>';
Line 143  sub handler { Line 144  sub handler {
 END  END
         }          }
  elsif ($ENV{'form.catalogmode'} eq 'groupimport') {   elsif ($ENV{'form.catalogmode'} eq 'groupimport') {
     $hash{'mode_catalog'}='groupimport';  
     $extrafield='<td bgcolor="'.$fileclr.'" valign="bottom">'.      $extrafield='<td bgcolor="'.$fileclr.'" valign="bottom">'.
  '<a name="$anchor"><img src="'.$iconpath.'whitespace1.gif"'.   '<a name="$anchor"><img src="'.$iconpath.'whitespace1.gif"'.
  ' border="0" /></td>';   ' border="0" /></td>';
Line 156  END Line 156  END
 onClick="javascript:select_group()">  onClick="javascript:select_group()">
 END  END
         }          }
    # Additions made by Matthew to make the browser a little easier to deal
    # with in the future.
    #
    # $mode (at this time) indicates if we are in edit mode.
    # $form is the name of the form that the URL is placed when the
    #       selection is made.
    # $element is the name of the element in $formname which receives
    #       the URL.
    # &Apache::lonxml::debug('Checking mode, form, element');
    &setvalues(\%hash,'form.mode'   ,\%ENV,'form.mode'   );
    &setvalues(\%hash,'form.form'   ,\%ENV,'form.form'   );
    &setvalues(\%hash,'form.element',\%ENV,'form.element');
    &setvalues(\%hash,'form.only'   ,\%ENV,'form.only'   );
    &setvalues(\%hash,'form.omit'   ,\%ENV,'form.omit'   );
   
           # Deal with 'omit' and 'only' 
           if (exists $ENV{'form.omit'}) {
               @Omit = split(',',$ENV{'form.omit'});
           }
           if (exists $ENV{'form.only'}) {
               @Only = split(',',$ENV{'form.only'});
           }
           
    my $mode = $ENV{'form.mode'};
    my ($form,$element);
    if ($mode eq 'edit' || $mode eq 'parmset') {
       $form    = $ENV{'form.form'};
       $element = $ENV{'form.element'};
    }
    &Apache::lonxml::debug("mode=$mode form=$form element=$element");
 # ------ set catalogmodefunctions to have extra needed javascript functionality  # ------ set catalogmodefunctions to have extra needed javascript functionality
  my $catalogmodefunctions='';   my $catalogmodefunctions='';
  if ($ENV{'form.catalogmode'} eq 'interactive' or   if ($ENV{'form.catalogmode'} eq 'interactive' or
     $ENV{'form.catalogmode'} eq 'groupimport') {      $ENV{'form.catalogmode'} eq 'groupimport') {
     $catalogmodefunctions=<<END;      # The if statement below sets us up to use the old version
       # by default (ie. if $mode is undefined).  This is the easy
       # way out.  Hopefully in the future I'll find a way to get 
       # the calls dealt with in a more comprehensive manner.
   
   #
   # There is now also mode "simple", which is for the simple version of the rat
   #
   #
       if (!defined($mode) || ($mode ne 'edit' && $mode ne 'parmset')) {
                   my $location = "/adm/groupsort?catalogmode=groupimport&";
                   $location .= "mode=".$mode."&";
                   $location .= "acts=";
    $catalogmodefunctions=<<"END";
 function select_data(title,url) {  function select_data(title,url) {
     changeTitle(title);      changeTitle(title);
     changeURL(url);      changeURL(url);
     self.close();      self.close();
 }  }
 function select_group() {  function select_group() {
     window.location="/adm/groupsort?catalogmode=groupimport&acts="+document.forms.fileattr.acts.value;      window.location="$location"+document.forms.fileattr.acts.value;
 }  }
 function changeTitle(val) {  function changeTitle(val) {
     if (opener.inf.document.forms.resinfo.elements.t) {      if (opener.inf) {
         opener.inf.document.forms.resinfo.elements.t.value=val;          if (opener.inf.document.forms.resinfo.elements.t) {
               opener.inf.document.forms.resinfo.elements.t.value=val;
           }
     }      }
 }  }
 function changeURL(val) {  function changeURL(val) {
     if (opener.inf.document.forms.resinfo.elements.u) {      if (opener.inf) {
  opener.inf.document.forms.resinfo.elements.u.value=val;          if (opener.inf.document.forms.resinfo.elements.u) {
       opener.inf.document.forms.resinfo.elements.u.value=val;
           }
     }      }
 }  }
 END  END
               } elsif ($mode eq 'edit') { # we are in 'edit' mode
                   my $location = "/adm/groupsort?catalogmode=interactive&";
                   $location .= "form=$form&element=$element&mode=edit&acts=";
    $catalogmodefunctions=<<END;
   // mode = $mode
   function select_data(title,url) {
       changeURL(url);
       self.close();
   }
   
   function select_group() {
       window.location="$location"+document.forms.fileattr.acts.value;
   }
   
   function changeURL(val) {
       if (window.opener.document) {
    window.opener.document.forms["$form"].elements["$element"].value=val;
       } else {
       alert("The file you selected is: "+val);
       }
   }
   
   END
               } elsif ($mode eq 'parmset') {
                   my $location = "/adm/groupsort?catalogmode=interactive&";
                   $location .= "form=$form&element=$element&mode=parmset&acts=";
    $catalogmodefunctions=<<END;
   // mode = $mode
   function select_data(title,url) {
       changeURL(url);
       self.close();
   }
   
   function select_group() {
       window.location="$location"+document.forms.fileattr.acts.value;
   }
   
   function changeURL(val) {
       if (window.opener.document) {
           var elementname  = "$element"+"_value";
           var checkboxname = "$element"+"_setparmval";
    window.opener.document.forms["$form"].elements[elementname].value=val;
           window.opener.document.forms["$form"].elements[checkboxname].checked=true;
       } else {
       alert("The file you selected is: "+val);
       }
   }
   
   END
               }
         }          }
  if ($ENV{'form.catalogmode'} eq 'groupimport') {          $catalogmodefunctions.=<<END;
     $catalogmodefunctions.=<<END;  
 var acts='';  var acts='';
   function rep_dirpath(suffix,val) {
       eval("document.forms.dirpath"+suffix+".acts.value=val");
   }
   END
    if ($ENV{'form.catalogmode'} eq 'groupimport') {
               $catalogmodefunctions.=<<END;
 function queue(val) {  function queue(val) {
     if (eval("document.forms."+val+".filelink.checked")) {      if (eval("document.forms."+val+".filelink.checked")) {
  var l=val.length;   var l=val.length;
Line 197  function queue(val) { Line 298  function queue(val) {
  document.forms.fileattr.acts.value+='0a'+v+'b';   document.forms.fileattr.acts.value+='0a'+v+'b';
     }      }
 }  }
 function rep_dirpath(suffix,val) {  
     eval("document.forms.dirpath"+suffix+".acts.value=val");  
 }  
 END  END
  }   }
   
Line 224  function gothere(val) { Line 322  function gothere(val) {
 </script>  </script>
   
 </head>  </head>
 <body bgcolor="#FFFFFF">  
 ENDHEADER  ENDHEADER
   $r->print(&Apache::loncommon::bodytag('Browse Resources'));
 # - Evaluate actions from previous page (both cumulatively and chronologically)  # - Evaluate actions from previous page (both cumulatively and chronologically)
         if ($ENV{'form.catalogmode'} eq 'groupimport') {          if ($ENV{'form.catalogmode'} eq 'groupimport') {
     my $acts=$ENV{'form.acts'};      my $acts=$ENV{'form.acts'};
Line 269  ENDHEADER Line 366  ENDHEADER
     }      }
  }   }
   
 # ---------------------------------------------------------------- output title  
  $r->print('<h2><font color="#888888">The LearningOnline With CAPA '.  
   'Network Directory Browser</font></h2>'."\n");  
 # ---------------------------------- get state of file attributes to be showing  # ---------------------------------- get state of file attributes to be showing
  if ($ENV{'form.attrs'} ne "") {   if ($ENV{'form.attrs'} ne '') {
     for (my $i=0; $i<=6; $i++) {      for (my $i=0; $i<=8; $i++) {
  delete $hash{'display_attrs_'.$i};   delete $hash{'display_attrs_'.$i};
  if ($ENV{'form.attr'.$i} == 1) {   if ($ENV{'form.attr'.$i} == 1) {
     $attrchk[$i] = "checked";      $attrchk[$i] = 'checked';
     $hash{'display_attrs_'.$i} = 1;      $hash{'display_attrs_'.$i} = 1;
  }   }
     }      }
  } else {   } else {
     for (my $i=0; $i<=6; $i++) {      for (my $i=0; $i<=8; $i++) {
  $attrchk[$i] = "checked" if $hash{'display_attrs_'.$i} == 1;   $attrchk[$i] = 'checked' if $hash{'display_attrs_'.$i} == 1;
     }      }
  }   }
 # ------------------------------- output state of file attributes to be showing  # ------------------------------- output state of file attributes to be showing
  $r->print(<<END);   $r->print(<<END);
 <b><font color="#666666">Display file attributes</font></b><br />  
 <form method="post" name="fileattr" action="$uri"  <form method="post" name="fileattr" action="$uri"
  enctype="application/x-www-form-urlencoded">   enctype="application/x-www-form-urlencoded">
   <b><font color="#666666">Display file attributes</font></b><br />
 <table border=0><tr>  <table border=0><tr>
 <td><input type="checkbox" name="attr0" value="1" $attrchk[0] /> Size</td>  <td><input type="checkbox" name="attr0" value="1" $attrchk[0] /> Title</td>
 <td><input type="checkbox" name="attr1" value="1" $attrchk[1] /> Last access</td>  <td><input type="checkbox" name="attr1" value="1" $attrchk[1] /> Size</td>
 <td><input type="checkbox" name="attr2" value="1" $attrchk[2] /> Last modified</td>  <td><input type="checkbox" name="attr2" value="1" $attrchk[2] /> Last access</td>
 <td><input type="checkbox" name="attr6" value="1" $attrchk[6] /> All versions</td>  <td><input type="checkbox" name="attr3" value="1" $attrchk[3] /> Last modified</td>
 </tr><tr>  <td><input type="checkbox" name="attr8" value="1" $attrchk[8] /> All versions</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] /> Author</td>
 <td><input type="checkbox" name="attr4" value="1" $attrchk[4] /> Keywords</td>  <td><input type="checkbox" name="attr5" value="1" $attrchk[5] /> Keywords</td>
 <td><input type="checkbox" name="attr5" value="1" $attrchk[5] /> Language</td>  <td><input type="checkbox" name="attr6" value="1" $attrchk[6] /> Language</td>
   <td><input type="checkbox" name="attr7" value="1" $attrchk[7] /> Show Resource</td>
 <td>&nbsp;</td>  <td>&nbsp;</td>
 </tr></table>  </tr></table>
 <input type="hidden" name="dirPointer" value="on" />  <input type="hidden" name="dirPointer" value="on" />
Line 313  END Line 408  END
   
 # ----------------- output starting row to the indexed file/directory hierarchy  # ----------------- output starting row to the indexed file/directory hierarchy
         my $titleclr="#ddffff";          my $titleclr="#ddffff";
         $r->print("<table border=0><tr><td bgcolor=#eeeeee>\n");  #        $r->print(&initdebug());
  $r->print("<table border=0><tr>\n");  #        $r->print(&writedebug("Omit:@Omit")) if (@Omit);
  $r->print("<td $colspan bgcolor=$titleclr><b>Name</b></td>\n");  #        $r->print(&writedebug("Only:@Only")) if (@Only);
  $r->print("<td bgcolor=$titleclr align=right><b>Size (bytes) ".          $r->print("<table width='100\%' border=0><tr><td bgcolor=#777777>\n");
   "</b></td>\n") if ($hash{'display_attrs_0'} == 1);   $r->print("<table width='100\%' border=0><tr bgcolor=$titleclr>\n");
  $r->print("<td bgcolor=$titleclr><b>Last accessed</b></td>\n")    $r->print("<td $colspan><b>Name</b></td>\n");
     if ($hash{'display_attrs_1'} == 1);   $r->print("<td><b>Title</b></td>\n") 
  $r->print("<td bgcolor=$titleclr><b>Last modified</b></td>\n")      if ($hash{'display_attrs_0'} == 1);
    $r->print("<td align=right><b>Size (bytes) ".
     "</b></td>\n") if ($hash{'display_attrs_1'} == 1);
    $r->print("<td><b>Last accessed</b></td>\n") 
     if ($hash{'display_attrs_2'} == 1);      if ($hash{'display_attrs_2'} == 1);
  $r->print("<td bgcolor=$titleclr><b>Author(s)</b></td>\n")   $r->print("<td><b>Last modified</b></td>\n")
     if ($hash{'display_attrs_3'} == 1);      if ($hash{'display_attrs_3'} == 1);
  $r->print("<td bgcolor=$titleclr><b>Keywords</b></td>\n")   $r->print("<td><b>Author(s)</b></td>\n")
     if ($hash{'display_attrs_4'} == 1);      if ($hash{'display_attrs_4'} == 1);
  $r->print("<td bgcolor=$titleclr><b>Language</b></td>\n")   $r->print("<td><b>Keywords</b></td>\n")
     if ($hash{'display_attrs_5'} == 1);      if ($hash{'display_attrs_5'} == 1);
  $r->print("</tr>");   $r->print("<td><b>Language</b></td>\n")
       if ($hash{'display_attrs_6'} == 1);
    $r->print("<td><b>Resource</b></td>\n")
       if ($hash{'display_attrs_7'} == 1);
    $r->print('</tr>');
   
 # ----------------- read in what directories have previously been set to "open"  # ----------------- read in what directories have previously been set to "open"
  foreach (keys %hash) {   foreach (keys %hash) {
Line 360  END Line 462  END
  my $indent = 0;   my $indent = 0;
  $uri = $uri.'/' if $uri !~ /.*\/$/;   $uri = $uri.'/' if $uri !~ /.*\/$/;
   
  if ($bredir ne "on") {   if ($bredir ne 'on') {
     $hash{'top.level'} = $uri;      $hash{'top.level'} = $uri;
     $toplevel = $uri;      $toplevel = $uri;
   
Line 369  END Line 471  END
  }   }
   
 # -------------------------------- if not at top level, provide an uplink arrow  # -------------------------------- if not at top level, provide an uplink arrow
  if ($toplevel ne "/res/"){   if ($toplevel ne '/res/'){
     my (@uri_com) = split(/\//,$uri);      my (@uri_com) = split(/\//,$uri);
     pop @uri_com;      pop @uri_com;
     my $upone = join('/',@uri_com);      my $upone = join('/',@uri_com);
Line 386  END Line 488  END
  $r->print("<input type='hidden' name='fnum' value='$fnum'></form>");   $r->print("<input type='hidden' name='fnum' value='$fnum'></form>");
   
 # -------------------------------------------------------------- end the tables  # -------------------------------------------------------------- end the tables
  $r->print("</table>");   $r->print('</table>');
  $r->print("</td></tr></table>");   $r->print('</td></tr></table>');
   
 # --------------------------------------------------- end the output and return  # --------------------------------------------------- end the output and return
  $r->print("</body></html>\n");   $r->print('</body></html>'."\n");
  untie(%hash);   untie(%hash);
     } else {      } else {
  $r->print('<html><head></head><body>Unable to tie hash to db '.   $r->print('<html><head></head><body>Unable to tie hash to db '.
Line 410  sub scanDir { Line 512  sub scanDir {
     my %dupdirs = %dirs;      my %dupdirs = %dirs;
     my @list=&get_list($r,$startdir);      my @list=&get_list($r,$startdir);
     foreach my $line (@list) {      foreach my $line (@list) {
  my ($strip,$dom,$foo,$testdir,$foo)=split(/\&/,$line,5);    my ($strip,$dom,undef,$testdir,undef)=split(/\&/,$line,5); 
  next if $strip =~ /.*\.meta$/;   next if $strip =~ /.*\.meta$/;
  my (@fileparts) = split(/\./,$strip);   my (@fileparts) = split(/\./,$strip);
  if ($hash{'display_attrs_6'} != 1) {   if ($hash{'display_attrs_8'} != 1) {
     if (scalar(@fileparts) >= 3) {      if (scalar(@fileparts) >= 3) {
  my $fext = pop @fileparts;   my $fext = pop @fileparts;
  my $ov = pop @fileparts;   my $ov = pop @fileparts;
  my $fname = join ('.',@fileparts,$fext);   my $fname = join ('.',@fileparts,$fext);
  next if (grep /$fname/,@list and $ov =~ /\d+/);   next if (grep /\Q$fname\E/,@list and $ov =~ /\d+/);
     }      }
  }   }
   
  if ($dom eq "domain") {   if ($dom eq 'domain') {
     $compuri = join('',$strip,"/");  # dom list has /res/<domain name>      $compuri = join('',$strip,'/');  # dom list has /res/<domain name>
     $curdir = $compuri;      $curdir = $compuri;
  } else {   } else {
     # user, dir & file have name only, i.e., w/o path      # user, dir & file have name only, i.e., w/o path
     $compuri = join('',$startdir,$strip,"/");      $compuri = join('',$startdir,$strip,'/');
     $curdir = $startdir;      $curdir = $startdir;
  }   }
  my $diropen = "closed";   my $diropen = 'closed';
  if (($dirptr&$testdir) or ($dom =~ /^(domain|user)$/)) {   if (($dirptr&$testdir) or ($dom =~ /^(domain|user)$/)) {
     while (my ($key,$val)= each %dupdirs) {      while (my ($key,$val)= each %dupdirs) {
  if ($key eq $compuri and $val eq "open") {   if ($key eq $compuri and $val eq "open") {
     $diropen = "opened";      $diropen = "opened";
     delete $dupdirs{key},$dirs{$key};      delete($dupdirs{$key});
       delete($dirs{$key});
  }   }
     }      }
  }   }
  &display_line($r,$diropen,$line,$indent,$curdir,$hashref,@list);   &display_line($r,$diropen,$line,$indent,$curdir,$hashref,@list);
  &scanDir ($r,$compuri,$indent) if $diropen eq "opened";   &scanDir ($r,$compuri,$indent) if $diropen eq 'opened';
     }      }
     $indent--;      $indent--;
 }  }
Line 449  sub scanDir { Line 552  sub scanDir {
 sub get_list {  sub get_list {
     my ($r,$uri)=@_;      my ($r,$uri)=@_;
     my @list;      my @list;
     my $luri = $uri;      (my $luri = $uri) =~ s/\//_/g;
     $luri =~ s/\//_/g;  
   
     if ($ENV{'form.attrs'} eq "Refresh") {      if ($ENV{'form.attrs'} eq 'Refresh') {
  foreach (keys %hash) {   foreach (keys %hash) {
     delete $hash{$_} if ($_ =~ /^dirlist_files_/);      delete $hash{$_} if ($_ =~ /^dirlist_files_/);
     }      }
Line 467  sub get_list { Line 569  sub get_list {
     return @list=&match_ext($r,@list);      return @list=&match_ext($r,@list);
 }  }
   
   sub initdebug {
       return <<ENDJS;
   <script>
   var debugging = true;
   if (debugging) {
       var debuggingWindow = window.open('','Debug','width=400,height=300',true);
   } 
   
   function output(text) {
       if (debugging) {
           debuggingWindow.document.writeln(text);
       }
   }
   output("<html><head><title>Debugging Window</title></head><body><pre>");   
   </script>
   ENDJS
   }
   
   sub writedebug {
       my $text = shift;
       return "<script>output('$text');</script>";
   }
   
 # -------------------- filters out files based on extensions (returns an array)  # -------------------- filters out files based on extensions (returns an array)
 sub match_ext {  sub match_ext {
     my ($r,@packlist)=@_;      my ($r,@packlist)=@_;
Line 479  sub match_ext { Line 604  sub match_ext {
  chomp $line;   chomp $line;
  $line =~ s/^\/home\/httpd\/html//;   $line =~ s/^\/home\/httpd\/html//;
  my @unpackline = split (/\&/,$line);   my @unpackline = split (/\&/,$line);
  next if ($unpackline[0] eq ".");   next if ($unpackline[0] eq '.');
  next if ($unpackline[0] eq "..");   next if ($unpackline[0] eq '..');
  my @filecom = split (/\./,$unpackline[0]);   my @filecom = split (/\./,$unpackline[0]);
  my $fext = pop(@filecom);   my $fext = pop(@filecom);
  my $fnptr = $unpackline[3]&$dirptr;   my $fnptr = $unpackline[3]&$dirptr;
   if ($fnptr == 0 and $unpackline[3] ne "") {    if ($fnptr == 0 and $unpackline[3] ne "") {
     my $embstyle = &Apache::loncommon::fileembstyle($fext);      my $embstyle = &Apache::loncommon::fileembstyle($fext);
             push @trimlist,$line if (defined($embstyle) &&               push @trimlist,$line if (defined($embstyle) && 
      $embstyle ne 'hdn' );       ($embstyle ne 'hdn' or $fext eq 'meta'));
  } else {   } else {
     push @trimlist,$line;      push @trimlist,$line;
  }   }
Line 499  sub match_ext { Line 624  sub match_ext {
 # ------------------------------- displays one line in appropriate table format  # ------------------------------- displays one line in appropriate table format
 sub display_line {  sub display_line {
     my ($r,$diropen,$line,$indent,$startdir,$hashref,@list)=@_;      my ($r,$diropen,$line,$indent,$startdir,$hashref,@list)=@_;
     my (@pathfn, $fndir, $fnptr);      my (@pathfn, $fndir);
     my $dirptr=16384;      my $dirptr=16384;
     my $fileclr="#ffffe6";      my $fileclr="#ffffe6";
     my $iconpath= $r->dir_config('lonIconsURL') . "/";      my $iconpath= $r->dir_config('lonIconsURL') . '/';
   
     my @filecom = split (/\&/,$line);      my @filecom = split (/\&/,$line);
     my @pathcom = split (/\//,$filecom[0]);      my @pathcom = split (/\//,$filecom[0]);
     my $listname = $pathcom[scalar(@pathcom)-1];      my $listname = $pathcom[scalar(@pathcom)-1];
     my $fnptr = $filecom[3]&$dirptr;      my $fnptr = $filecom[3]&$dirptr;
     my $msg = 'View '.$filecom[0].' resources';      my $msg = 'View '.$filecom[0].' resources';
     $msg = 'Close '.$filecom[0].' directory' if $diropen eq "opened";      $msg = 'Close '.$filecom[0].' directory' if $diropen eq 'opened';
   
     my $tabtag="</td>";      my $tabtag='</td>';
     my $i=0;      my $i=0;
   
     while ($i<=5) {      while ($i<=7) {
  $tabtag=join('',$tabtag,"<td bgcolor=",$fileclr,">&nbsp;</td>")   $tabtag=join('',$tabtag,"<td>&nbsp;</td>")
     if $hash{'display_attrs_'.$i} == 1;      if $hash{'display_attrs_'.$i} == 1;
  $i++;   $i++;
     }      }
   
       my $valign = ($hash{'display_attrs_7'} == 1 ? 'top' : 'bottom');
   
 # display uplink arrow  # display uplink arrow
     if ($filecom[1] eq "viewOneUp") {      if ($filecom[1] eq 'viewOneUp') {
  $r->print("<tr>$extrafield");   $r->print("<tr bgcolor=$fileclr>$extrafield");
  $r->print("<td bgcolor=$fileclr valign=bottom>\n");   $r->print("<td valign=$valign>\n");
  $r->print ('<form method="post" name="dirpathUP" action="'.$startdir.   $r->print ('<form method="post" name="dirpathUP" action="'.$startdir.
    '/" '.     '/" '.
    'onSubmit="return rep_dirpath(\'UP\','.     'onSubmit="return rep_dirpath(\'UP\','.
Line 539  sub display_line { Line 666  sub display_line {
  $r->print("Up $tabtag</tr></form>\n");   $r->print("Up $tabtag</tr></form>\n");
  return OK;   return OK;
     }      }
   # Do we have permission to look at this?
   
       return OK if (!&Apache::lonnet::allowed('bre',$startdir.$filecom[0]));
   
 # display domain  # display domain
     if ($filecom[1] eq "domain") {      if ($filecom[1] eq 'domain') {
  $r->print ('<input type="hidden" name="dirPointer" value="on">'."\n")   $r->print ('<input type="hidden" name="dirPointer" value="on">'."\n")
     if ($ENV{'form.dirPointer'} eq "on");      if ($ENV{'form.dirPointer'} eq "on");
  $r->print("<tr>$extrafield");   $r->print("<tr bgcolor=$fileclr>$extrafield");
  $r->print("<td bgcolor=$fileclr valign=bottom>");   $r->print("<td valign=$valign>");
  &begin_form ($r,$filecom[0].'/');   &begin_form ($r,$filecom[0].'/');
  my $anchor = $filecom[0].'/';   my $anchor = $filecom[0].'/';
  $anchor =~ s/\///g;   $anchor =~ s/\///g;
Line 558  sub display_line { Line 688  sub display_line {
  $r->print ('<a href="javascript:gothere(\''.$filecom[0].   $r->print ('<a href="javascript:gothere(\''.$filecom[0].
    '/\')"><img src="'.$iconpath.'server.gif"');     '/\')"><img src="'.$iconpath.'server.gif"');
  $r->print (' border="0" /></a>'."\n");   $r->print (' border="0" /></a>'."\n");
  $r->print("Domain - $listname $tabtag</tr></form>\n");   $r->print ("Domain - $listname ");
    if ($Apache::lonnet::domaindescription{$listname}) {
       $r->print("(".$Apache::lonnet::domaindescription{$listname}.
         ")");
    }
    $r->print (" $tabtag</tr></form>\n");
  return OK;   return OK;
   
 # display user directory  # display user directory
     }      }
     if ($filecom[1] eq "user") {      if ($filecom[1] eq 'user') {
  $r->print("<tr>$extrafield");   $r->print("<tr bgcolor=$fileclr>$extrafield");
  $r->print("<td bgcolor=$fileclr valign=bottom nowrap>\n");   $r->print("<td valign=$valign nowrap>\n");
  my $curdir = $startdir.$filecom[0].'/';   my $curdir = $startdir.$filecom[0].'/';
  my $anchor = $curdir;   my $anchor = $curdir;
  $anchor =~ s/\///g;   $anchor =~ s/\///g;
Line 580  sub display_line { Line 715  sub display_line {
  $r->print ('<a href="javascript:gothere(\''.$curdir.'\')"><img src='.   $r->print ('<a href="javascript:gothere(\''.$curdir.'\')"><img src='.
    $iconpath.'quill.gif border="0" name="'.$msg.     $iconpath.'quill.gif border="0" name="'.$msg.
    '" height="22" /></a>');     '" height="22" /></a>');
  $r->print ($listname.$tabtag.'</tr></form>'."\n");   my $domain=(split(m|/|,$startdir))[2];
    my $plainname=&Apache::loncommon::plainname($listname,$domain);
    $r->print ($listname);
    if (defined($plainname) && $plainname) { $r->print(" ($plainname) "); }
    $r->print ($tabtag.'</tr></form>'."\n");
  return OK;   return OK;
     }      }
   
 # display file  # display file
     if ($fnptr == 0 and $filecom[3] ne "") {      if ($fnptr == 0 and $filecom[3] ne '') {
    my $filelink = $startdir.$filecom[0];
  my @file_ext = split (/\./,$listname);   my @file_ext = split (/\./,$listname);
  my $curfext = $file_ext[-1];   my $curfext = $file_ext[-1];
           if (@Omit) {
               foreach (@Omit) { return OK if ($curfext eq $_); }
           }
           if (@Only) {
               my $skip = 1;
               foreach (@Only) { $skip = 0 if ($curfext eq $_); }
               return OK if ($skip > 0);
           }
  # Set the icon for the file   # Set the icon for the file
  my $iconname = "unknown.gif";   my $iconname = "unknown.gif";
  my $embstyle = &Apache::loncommon::fileembstyle($curfext);   my $embstyle = &Apache::loncommon::fileembstyle($curfext);
Line 595  sub display_line { Line 743  sub display_line {
  $iconname = $curfext.".gif" unless   $iconname = $curfext.".gif" unless
     (!defined($embstyle) || $embstyle eq 'unk' || $embstyle eq 'hdn');      (!defined($embstyle) || $embstyle eq 'unk' || $embstyle eq 'hdn');
  #   #
  my $filelink = $startdir.$filecom[0];   $r->print("<tr bgcolor=$fileclr><td nowrap valign='$valign'>");
  $r->print("<tr><td nowrap valign='bottom' bgcolor=$fileclr>");   my $metafile = grep /^\Q$filecom[0]\E\.meta\&/, @list;
  my $metafile = grep /^$filecom[0]\.meta\&/, @list;  
  my $title;   my $title;
         if ($ENV{'form.catalogmode'} eq 'interactive') {          if ($ENV{'form.catalogmode'} eq 'interactive') {
     $title=$listname;      $title=$listname;
     $title = &Apache::lonnet::metadata($filelink,'title')      $title = &Apache::lonnet::metadata($filelink,'title')
  if ($metafile == 1);   if ($metafile == 1);
     $title=$listname unless $title;      $title=$listname unless $title;
     $r->print("<a href='javascript:select_data(\"",      my $titleesc=HTML::Entities::encode($title);
               $title,'","',$filelink,"\")'>");      $titleesc=~s/\'/\\'/; #' (clean up this spare quote)
               $r->print("<a href=\"javascript:select_data(\'",
                         $titleesc,"','",$filelink,"')\">");
     $r->print("<img src='",$iconpath,"select.gif' border='0' /></a>".      $r->print("<img src='",$iconpath,"select.gif' border='0' /></a>".
       "\n");        "\n");
     $r->print("</td><td valign='bottom' nowrap bgcolor=$fileclr>");      $r->print("</td><td valign='$valign' nowrap>");
  }   }
         elsif ($ENV{'form.catalogmode'} eq 'groupimport') {          elsif ($ENV{'form.catalogmode'} eq 'groupimport') {
     $title=$listname;      $title=$listname;
     $title = &Apache::lonnet::metadata($filelink,'title')      $title = &Apache::lonnet::metadata($filelink,'title')
  if ($metafile == 1);   if ($metafile == 1);
     $title=$listname unless $title;      $title=$listname unless $title;
       my $titleesc=&HTML::Entities::encode($title);
     $r->print("<form name='form$fnum'>\n");      $r->print("<form name='form$fnum'>\n");
     $r->print("<input type='checkbox' name='filelink"."' ".      $r->print("<input type='checkbox' name='filelink"."' ".
       "value='$filelink' onClick='".        "value='$filelink' onClick='".
Line 624  sub display_line { Line 774  sub display_line {
     }      }
     $r->print(">\n");      $r->print(">\n");
     $r->print("<input type='hidden' name='title"."' ".      $r->print("<input type='hidden' name='title"."' ".
       "value='$title'>\n");        "value='$titleesc'>\n");
     $r->print("</form>\n");      $r->print("</form>\n");
     $r->print("</td><td valign='bottom' nowrap bgcolor=$fileclr>");      $r->print("</td><td valign='$valign' nowrap>");
     $hash{"pre_${fnum}_link"}=$filelink;      $hash{"pre_${fnum}_link"}=$filelink;
     $hash{"pre_${fnum}_title"}=$title;      $hash{"pre_${fnum}_title"}=$titleesc;
      $fnum++;       $fnum++;
  }   }
   
Line 658  sub display_line { Line 808  sub display_line {
    "TARGET=_self>metadata</a>) ") if ($metafile == 1);     "TARGET=_self>metadata</a>) ") if ($metafile == 1);
   
  $r->print("</td>\n");   $r->print("</td>\n");
  $r->print("<td bgcolor=$fileclr align=right valign=bottom> ",   if ($hash{'display_attrs_0'} == 1) {
       my $title = &Apache::lonnet::metadata($filelink,'title')
    if ($metafile == 1);
       $r->print('<td valign=$valign> '.($title eq '' ? '&nbsp;' : $title).
         ' </td>'."\n");
    }
    $r->print('<td align=right valign=$valign> ',
   $filecom[8]," </td>\n")     $filecom[8]," </td>\n") 
     if $hash{'display_attrs_0'} == 1;  
  $r->print("<td bgcolor=$fileclr valign=bottom> ".  
   (localtime($filecom[9]))." </td>\n")   
     if $hash{'display_attrs_1'} == 1;      if $hash{'display_attrs_1'} == 1;
  $r->print("<td bgcolor=$fileclr valign=bottom> ".   $r->print('<td valign=$valign> '.
   (localtime($filecom[10]))." </td>\n")     (localtime($filecom[9]))." </td>\n") 
     if $hash{'display_attrs_2'} == 1;      if $hash{'display_attrs_2'} == 1;
    $r->print('<td valign=$valign> '.
     (localtime($filecom[10]))." </td>\n") 
       if $hash{'display_attrs_3'} == 1;
   
  if ($hash{'display_attrs_3'} == 1) {   if ($hash{'display_attrs_4'} == 1) {
     my $author = &Apache::lonnet::metadata($filelink,'author')      my $author = &Apache::lonnet::metadata($filelink,'author')
  if ($metafile == 1);   if ($metafile == 1);
     $author = '&nbsp;' if (!$author);      $r->print('<td valign=$valign> '.($author eq '' ? '&nbsp;' : $author).
     $r->print("<td bgcolor=$fileclr valign=bottom> ".$author.  
       " </td>\n");        " </td>\n");
  }   }
  if ($hash{'display_attrs_4'} == 1) {   if ($hash{'display_attrs_5'} == 1) {
     my $keywords = &Apache::lonnet::metadata($filelink,'keywords')      my $keywords = &Apache::lonnet::metadata($filelink,'keywords')
  if ($metafile == 1);   if ($metafile == 1);
     $keywords = '&nbsp;' if (!$keywords);      # $keywords = '&nbsp;' if (!$keywords);
     $r->print("<td bgcolor=$fileclr valign=bottom> ".$keywords.      $r->print('<td valign=$valign> '.($keywords eq '' ? '&nbsp;' : $keywords).
       " </td>\n");        " </td>\n");
  }   }
  if ($hash{'display_attrs_5'} == 1) {   if ($hash{'display_attrs_6'} == 1) {
     my $lang = &Apache::lonnet::metadata($filelink,'language')      my $lang = &Apache::lonnet::metadata($filelink,'language')
  if ($metafile == 1);   if ($metafile == 1);
     $lang = &Apache::loncommon::languagedescription($lang);      $lang = &Apache::loncommon::languagedescription($lang);
     $lang = '&nbsp;' if (!$lang);      $r->print('<td valign=$valign> '.($lang eq '' ? '&nbsp;' : $lang).
     $r->print("<td bgcolor=$fileclr valign=bottom> ".$lang.  
       " </td>\n");        " </td>\n");
  }   }
           if ($hash{'display_attrs_7'} == 1) {
               my $output='';
               my $embstyle=&Apache::loncommon::fileembstyle($curfext);
       if ($embstyle eq 'ssi') {
          $output=&Apache::lonnet::ssi_body($filelink);
                  $output='<font size="-2">'.$output.'</font>';
      } elsif ($embstyle eq 'img') {
                  $output='<img src="'.$filelink.'" />';
              } elsif ($filelink=~/^\/res\/(\w+)\/(\w+)\//) {
                  $output='<img src="http://'.
    $Apache::lonnet::hostname{&Apache::lonnet::homeserver($2,$1)}.
                    '/cgi-bin/thumbnail.gif?url='.$filelink.'" />';
              }
      $r->print('<td valign=$valign> '.($output eq '' ? '&nbsp;':$output).
         " </td>\n");
           }
  $r->print("</tr>\n");   $r->print("</tr>\n");
     }      }
   
Line 700  sub display_line { Line 870  sub display_line {
  my $curdir = $startdir.$filecom[0].'/';   my $curdir = $startdir.$filecom[0].'/';
  my $anchor = $curdir;   my $anchor = $curdir;
  $anchor =~ s/\///g;   $anchor =~ s/\///g;
  $r->print("<tr>$extrafield<td bgcolor=$fileclr valign=bottom>");   $r->print("<tr bgcolor=$fileclr>$extrafield<td valign=$valign>");
  &begin_form ($r,$curdir);   &begin_form ($r,$curdir);
  my $indentm1 = $indent-1;   my $indentm1 = $indent-1;
  if ($indentm1 < 11 and $indentm1 > 0) {   if ($indentm1 < 11 and $indentm1 > 0) {
Line 747  sub begin_form { Line 917  sub begin_form {
     $dnum++;      $dnum++;
 }  }
   
 # ----------- grab unprocessed CGI variables that may have been appended to URL  
 sub get_unprocessed_cgi {  
     foreach (split(/&/,$ENV{'QUERY_STRING'})) {  
        my ($name, $value) = split(/=/,$_);  
        $value =~ tr/+/ /;  
        $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;  
        if ($name eq 'catalogmode' or $name eq 'launch' or $name eq 'acts') {  
            $ENV{'form.'.$name}=$value;  
        }  
     }  
 }  
   
 # --------- settings whenever the user causes the indexer window to be launched  # --------- settings whenever the user causes the indexer window to be launched
 sub start_fresh_session {  sub start_fresh_session {
     delete $hash{'mode_catalog'};      delete $hash{'form.catalogmode'};
       delete $hash{'form.mode'};
       delete $hash{'form.form'};
       delete $hash{'form.element'};
       delete $hash{'form.omit'};
       delete $hash{'form.only'};
     foreach (keys %hash) {      foreach (keys %hash) {
  if ($_ =~ /^pre_/) {          delete $hash{$_} if (/^(pre_|store)/);
     delete $hash{$_};  
  }  
  if ($_ =~ /^store/) {  
     delete $hash{$_};  
  }  
     }      }
 }  }
   
   # ------------------------------------------------------------------- setvalues
   sub setvalues {
       # setvalues is used in registerurl to synchronize the database
       # hash and environment hashes
       my ($H1,$h1key,$H2,$h2key) =@_;
       #
       if (exists $H2->{$h2key}) {
    $H1->{$h1key} = $H2->{$h2key};
       } elsif (exists $H1->{$h1key}) {
    $H2->{$h2key} = $H1->{$h1key};
       } 
   }
   
 1;  1;
   
   sub cleanup {
       if (tied(%hash)){
    &Apache::lonnet::logthis('Cleanup indexer: hash');
           unless (untie(%hash)) {
       &Apache::lonnet::logthis('Failed cleanup indexer: hash');
           }
       }
   }
   
 =head1 NAME  =head1 NAME
   
 Apache::lonindexer - mod_perl module for cross server filesystem browsing  Apache::lonindexer - mod_perl module for cross server filesystem browsing
Line 908  begin_form - prints the beginning of a f Line 1088  begin_form - prints the beginning of a f
   
 =item *  =item *
   
 get_unprocessed_cgi - grab unprocessed CGI variables that may have been  
 appended to URL  
   
 =item *  
   
 start_fresh_session - settings whenever the user causes the indexer window  start_fresh_session - settings whenever the user causes the indexer window
 to be launched  to be launched
   

Removed from v.1.30  
changed lines
  Added in v.1.64


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.