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

version 1.64, 2003/05/29 01:08:05 version 1.181.4.5, 2010/03/31 00:41:44
Line 25 Line 25
 #  #
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  #
 # YEAR=1999  
 # 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  
 # YEAR=2000  
 # 07/20-08/04 H.K. Ng  
 # YEAR=2001  
 # 05/9-05/19/2001 H. K. Ng  
 # 05/21/2001 H. K. Ng  
 # 05/23/2001 H. K. Ng  
 # 6/26,7/8 H. K. Ng  
 # 8/14 H. K. Ng  
 # 11/30 Matthew Hall  
 # YEAR=2002  
 # 6/29/2002 H. K. Ng  
 #  
 ###  ###
   
 ###############################################################################  ###############################################################################
Line 59  package Apache::lonindexer; Line 44  package Apache::lonindexer;
   
 # ------------------------------------------------- modules used by this module  # ------------------------------------------------- modules used by this module
 use strict;  use strict;
 use Apache::lonnet();  use Apache::lonnet;
 use Apache::loncommon();  use Apache::loncommon();
   use Apache::lonhtmlcommon();
   use Apache::lonsequence();
 use Apache::Constants qw(:common);  use Apache::Constants qw(:common);
   use Apache::lonmeta;
 use Apache::File;  use Apache::File;
   use Apache::lonlocal;
   use Apache::lonsource();
   use Apache::groupsort();
 use GDBM_File;  use GDBM_File;
   use LONCAPA qw(:match);
   
 # ---------------------------------------- variables used throughout the module  # ---------------------------------------- variables used throughout the module
 my %hash; # tied to a user-specific gdbm file  my %hash; # global user-specific gdbm file
 my %dirs; # keys are directories, values are the open/close status  my %dirs; # keys are directories, values are the open/close status
 my %language; # has the reference information present in language.tab  my %language; # has the reference information present in language.tab
   my %dynhash; # hash of hashes for dynamic metadata
   my %dynread; # hash of directories already read for dynamic metadata
   my %fieldnames; # Metadata fieldnames
 # ----- Values which are set by the handler subroutine and are accessible to  # ----- Values which are set by the handler subroutine and are accessible to
 # -----     other methods.  # -----     other methods.
 my $extrafield; # default extra table cell  my $extrafield; # default extra table cell
Line 81  my @Only = (); Line 75  my @Only = ();
 my @Omit = ();  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');      my $c = $r->connection();
       &Apache::loncommon::content_type($r,'text/html');
     &Apache::loncommon::no_cache($r);      &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;  
   
     # Deal with stupid global variables (is there a way around making      # Deal with stupid global variables (is there a way around making
     # these global to this package?  It is just so wrong....)      # these global to this package?  It is just so wrong....)
     undef (@Only);      undef (@Only);
     undef (@Omit);      undef (@Omit);
       %fieldnames=&Apache::lonmeta::fieldnames();
   
 # ------------------------------------- read in machine configuration variables  # ------------------------------------- read in machine configuration variables
     my $iconpath= $r->dir_config('lonIconsURL') . "/";      my $iconpath= $r->dir_config('lonIconsURL') . "/";
Line 109  sub handler { Line 106  sub handler {
   
     my $fileclr='#ffffe6';      my $fileclr='#ffffe6';
     my $line;      my $line;
     my (@attrchk,@openpath);      my (@attrchk,@openpath,$typeselect);
     my $uri=$r->uri;      my $uri=$r->uri;
   
 # -------------------------------------- see if called from an interactive mode  # -------------------------------------- see if called from an interactive mode
     # Get the parameters from the query string      # Get the parameters from the query string
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
      ['catalogmode','launch','acts','mode','form','element',       ['catalogmode','launch','acts','mode','form','element',
               'only','omit']);                'only','omit','titleelement']);
     #-------------------------------------------------------------------      #-------------------------------------------------------------------
     my $closebutton='';      my $closebutton='';
     my $groupimportbutton='';      my $groupimportbutton='';
     my $colspan='';       my $colspan=''; 
       
     $extrafield='';      $extrafield='';
     my $diropendb =       my $diropendb = 
  "/home/httpd/perl/tmp/$domain\_$ENV{'user.name'}_indexer.db";   "/home/httpd/perl/tmp/$env{'user.domain'}_$env{'user.name'}_sel_res.db";
       %hash = ();
     if (tie(%hash,'GDBM_File',$diropendb,&GDBM_WRCREAT(),0640)) {      {
  if ($ENV{'form.launch'} eq '1') {   my %dbfile;
     &start_fresh_session();   if (tie(%dbfile,'GDBM_File',$diropendb,&GDBM_WRITER(),0640)) {
         }      if ($env{'form.launch'} eq '1') {
    &start_fresh_session(\%dbfile);
       }
       while(my($key,$value)=each(%dbfile)) {
    $hash{$key}=$value;
       }
       untie(%dbfile);
    }
       }
   # - Evaluate actions from previous page (both cumulatively and chronologically)
           if ($env{'form.catalogmode'} eq 'import' || $hash{'form.catalogmode'} eq 'import') {
       &Apache::groupsort::update_actions_hash(\%hash);
    }
       
       {
     #Hijack lonindexer to verify a title and be close down.
      if ($env{'form.launch'} eq '2') {
          &Apache::loncommon::content_type($r,'text/html');
          my $extra='';
          if (defined($env{'form.titleelement'}) && 
      $env{'form.titleelement'} ne '') {
      my $verify_title = &Apache::lonnet::gettitle($env{'form.acts'});
   #   &Apache::lonnet::logthis("Hrrm $env{'form.acts'} -- $verify_title");
      $verify_title=~s/'/\\'/g;
      $extra='window.opener.document.forms["'.$env{'form.form'}.'"].elements["'.$env{'form.titleelement'}.'"].value=\''.$verify_title.'\';';
          }
          my $js = <<ENDSUBM;
          <script type="text/javascript">
    function load() {
    window.opener.document.forms["$env{'form.form'}"]
       .elements["$env{'form.element'}"]
       .value='$env{'form.acts'}';
    $extra
    window.close();
    }
             </script>
   ENDSUBM
          $r->print(&Apache::loncommon::start_page(undef,$js,
    {'only_body'   =>1,
    'add_entries' =>
        {'onload' => "load();"},}
    ).
    &Apache::loncommon::end_page());
          return OK;
      }
       
 # -------------------- refresh environment with user database values (in %hash)  # -------------------- refresh environment with user database values (in %hash)
  &setvalues(\%hash,'form.catalogmode',\%ENV,'form.catalogmode'   );   &setvalues(\%hash,'form.catalogmode',\%env,'form.catalogmode'   );
   
 # --------------------- 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') {
     $extrafield='<td bgcolor="'.$fileclr.'" valign="bottom">'.      $extrafield='<td bgcolor="'.$fileclr.'" valign="bottom">'.
  '<a name="$anchor"><img src="'.$iconpath.'whitespace1.gif"'.   '<img alt="" src="'.$iconpath.'whitespace1.gif"'.
  ' border="0" /></td>';   ' class="LC_icon" /></td>';
     $colspan=" colspan='2' ";      $colspan=" colspan='2' ";
               my $cl=&mt('Close');
             $closebutton=<<END;              $closebutton=<<END;
 <input type="button" name="close" value='CLOSE' onClick="self.close()">  <input type="button" name="close" value='$cl' onclick="self.close()" />
 END  END
         }          }
  elsif ($ENV{'form.catalogmode'} eq 'groupimport') {   elsif ($env{'form.catalogmode'} eq 'import') {
     $extrafield='<td bgcolor="'.$fileclr.'" valign="bottom">'.      $extrafield='<td bgcolor="'.$fileclr.'" valign="bottom">'.
  '<a name="$anchor"><img src="'.$iconpath.'whitespace1.gif"'.   '<img alt="" src="'.$iconpath.'whitespace1.gif"'.
  ' border="0" /></td>';   ' class="LC_icon" /></td>';
     $colspan=" colspan='2' ";      $colspan=" colspan='2' ";
       my $cl=&mt('Close');
               my $gi=&mt('Import');
             $closebutton=<<END;              $closebutton=<<END;
 <input type="button" name="close" value='CLOSE' onClick="self.close()">  <input type="button" name="close" value='$cl' onclick="self.close()" />
 END  END
             $groupimportbutton=<<END;              $groupimportbutton=<<END;
 <input type="button" name="groupimport" value='GROUP IMPORT'  <input type="button" name="groupimport" value='$gi'
 onClick="javascript:select_group()">  onclick="javascript:select_group()" />
 END  END
         }          }
  # Additions made by Matthew to make the browser a little easier to deal   # Additions made by Matthew to make the browser a little easier to deal
Line 164  END Line 209  END
  #       selection is made.   #       selection is made.
  # $element is the name of the element in $formname which receives   # $element is the name of the element in $formname which receives
  #       the URL.   #       the URL.
  # &Apache::lonxml::debug('Checking mode, form, element');   #&Apache::lonxml::debug('Checking mode, form, element');
  &setvalues(\%hash,'form.mode'   ,\%ENV,'form.mode'   );   &setvalues(\%hash,'form.mode'        ,\%env,'form.mode'   );
  &setvalues(\%hash,'form.form'   ,\%ENV,'form.form'   );   &setvalues(\%hash,'form.form'        ,\%env,'form.form'   );
  &setvalues(\%hash,'form.element',\%ENV,'form.element');   &setvalues(\%hash,'form.element'     ,\%env,'form.element');
  &setvalues(\%hash,'form.only'   ,\%ENV,'form.only'   );   &setvalues(\%hash,'form.titleelement',\%env,'form.titleelement');
  &setvalues(\%hash,'form.omit'   ,\%ENV,'form.omit'   );   &setvalues(\%hash,'form.only'        ,\%env,'form.only'   );
    &setvalues(\%hash,'form.omit'        ,\%env,'form.omit'   );
   
         # Deal with 'omit' and 'only'           # Deal with 'omit' and 'only' 
         if (exists $ENV{'form.omit'}) {          if (exists $env{'form.omit'}) {
             @Omit = split(',',$ENV{'form.omit'});              @Omit = split(',',$env{'form.omit'});
         }          }
         if (exists $ENV{'form.only'}) {          if (exists $env{'form.only'}) {
             @Only = split(',',$ENV{'form.only'});              @Only = split(',',$env{'form.only'});
         }          }
                   
  my $mode = $ENV{'form.mode'};   my $mode = $env{'form.mode'};
  my ($form,$element);   my ($form,$element,$titleelement);
  if ($mode eq 'edit' || $mode eq 'parmset') {   if ($mode eq 'edit' || $mode eq 'parmset') {
     $form    = $ENV{'form.form'};      $form         = $env{'form.form'};
     $element = $ENV{'form.element'};      $element      = $env{'form.element'};
       $titleelement = $env{'form.titleelement'};
  }   }
  &Apache::lonxml::debug("mode=$mode form=$form element=$element");   #&Apache::lonxml::debug("mode=$mode form=$form element=$element titleelement=$titleelement");
 # ------ 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 'import') {
     # The if statement below sets us up to use the old version      # The if statement below sets us up to use the old version
     # by default (ie. if $mode is undefined).  This is the easy      # by default (ie. if $mode is undefined).  This is the easy
     # way out.  Hopefully in the future I'll find a way to get       # way out.  Hopefully in the future I'll find a way to get 
Line 200  END Line 247  END
 #  #
 #  #
     if (!defined($mode) || ($mode ne 'edit' && $mode ne 'parmset')) {      if (!defined($mode) || ($mode ne 'edit' && $mode ne 'parmset')) {
                 my $location = "/adm/groupsort?catalogmode=groupimport&";                  my $location = "/adm/groupsort?&inhibitmenu=yes&catalogmode=import&";
                 $location .= "mode=".$mode."&";                  $location .= "mode=".$mode."&";
                 $location .= "acts=";                  $location .= "acts=";
  $catalogmodefunctions=<<"END";   $catalogmodefunctions=<<"END";
 function select_data(title,url) {  function select_data(url) {
     changeTitle(title);  
     changeURL(url);      changeURL(url);
     self.close();      self.close();
 }  }
 function select_group() {  function select_group() {
     window.location="$location"+document.forms.fileattr.acts.value;      window.location="$location"+document.forms.fileattr.acts.value;
 }  }
 function changeTitle(val) {  
     if (opener.inf) {  
         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) {      if (opener.inf) {
         if (opener.inf.document.forms.resinfo.elements.u) {          if (opener.inf.document.forms.resinfo.elements.u) {
Line 232  END Line 271  END
                 $location .= "form=$form&element=$element&mode=edit&acts=";                  $location .= "form=$form&element=$element&mode=edit&acts=";
  $catalogmodefunctions=<<END;   $catalogmodefunctions=<<END;
 // mode = $mode  // mode = $mode
 function select_data(title,url) {  function select_data(url) {
     changeURL(url);     var location = "/res/?launch=2&form=$form&element=$element&titleelement=$titleelement&acts=" + url;
     self.close();     window.location=location;
      if (window.opener.document.forms["$form"].elements["$element"].value != url) {
          window.opener.unClean();
      }
 }  }
   
 function select_group() {  function select_group() {
     window.location="$location"+document.forms.fileattr.acts.value;      window.location="$location"+document.forms.fileattr.acts.value;
 }  }
Line 248  function changeURL(val) { Line 289  function changeURL(val) {
     alert("The file you selected is: "+val);      alert("The file you selected is: "+val);
     }      }
 }  }
   
 END  END
                   if (!$titleelement) {
       $catalogmodefunctions.='function changeTitle(val) {}';
    } else {
       $catalogmodefunctions.=<<END;
   function changeTitle(val) {
       if (window.opener.document) {
       window.opener.document.forms["$form"].elements["$titleelement"].value=val;
       } else {
       alert("The title of the file you selected is: "+val);
       }
   }
   END
                   }
             } elsif ($mode eq 'parmset') {              } elsif ($mode eq 'parmset') {
                 my $location = "/adm/groupsort?catalogmode=interactive&";                  my $location = "/adm/groupsort?catalogmode=interactive&";
                 $location .= "form=$form&element=$element&mode=parmset&acts=";                  $location .= "form=$form&element=$element&mode=parmset&acts=";
  $catalogmodefunctions=<<END;   $catalogmodefunctions=<<END;
 // mode = $mode  // mode = $mode
 function select_data(title,url) {  function select_data(url) {
     changeURL(url);      changeURL(url);
     self.close();      self.close();
 }  }
Line 284  function rep_dirpath(suffix,val) { Line 337  function rep_dirpath(suffix,val) {
     eval("document.forms.dirpath"+suffix+".acts.value=val");      eval("document.forms.dirpath"+suffix+".acts.value=val");
 }  }
 END  END
  if ($ENV{'form.catalogmode'} eq 'groupimport') {   if ($env{'form.catalogmode'} eq 'import') {
             $catalogmodefunctions.=<<END;              $catalogmodefunctions.=<<END;
 function queue(val) {  function queue(val) {
     if (eval("document.forms."+val+".filelink.checked")) {      if (eval("document.forms."+val+".filelink.checked")) {
Line 301  function queue(val) { Line 354  function queue(val) {
 END  END
  }   }
   
           my $inhibit_menu = "+'&".&Apache::loncommon::inhibit_menu_check()."'";
 # ---------------------------------------------------------------- Print Header  # ---------------------------------------------------------------- Print Header
  $r->print(<<ENDHEADER);          
 <html>   my $js = <<"ENDHEADER";
 <head>  
 <title>The LearningOnline Network With CAPA Directory Browser</title>  
   
 <script type="text/javascript">  <script type="text/javascript">
 $catalogmodefunctions  $catalogmodefunctions;
 function openWindow(url, wdwName, w, h, toolbar,scrollbar) {  function update_only(field) {
     var options = "width=" + w + ",height=" + h + ",";      alert(field.name);
   }
   function checkAll() {
       var numForms = document.forms.length;
       for (i=0;i<numForms;i++) {
           var numElements = document.forms[i].elements.length;
           for (j=0;j<numElements;j++){
               var fieldName = document.forms[i].elements[j].name;
               if (fieldName == 'filelink') {
                   document.forms[i].elements[j].checked = true;
                   queue(document.forms[i].name);
               }
           }
       }
   }
   function uncheckAll() {
       var numForms = document.forms.length;
       for (i=0;i<numForms;i++) {
           var numElements = document.forms[i].elements.length;
           for (j=0;j<numElements;j++){
               var fieldName = document.forms[i].elements[j].name;
               if (fieldName == 'filelink') {
                   document.forms[i].elements[j].checked = false;
                   queue(document.forms[i].name);
               }
           }
       }
   }
   function openWindow(url, wdwName, w, h, toolbar,scrollbar,locationbar) {
       var xpos = (screen.width-w)/2;
       xpos = (xpos < 0) ? '0' : xpos;
       var ypos = (screen.height-h)/2-30;
       ypos = (ypos < 0) ? '0' : ypos;
       var options = "width=" + w + ",height=" + h + ",screenx="+xpos+",screeny="+ypos+",";
     options += "resizable=yes,scrollbars="+scrollbar+",status=no,";      options += "resizable=yes,scrollbars="+scrollbar+",status=no,";
     options += "menubar=no,toolbar="+toolbar+",location=no,directories=no";      options += "menubar=no,toolbar="+toolbar+",location="+locationbar+",directories=no";
     var newWin = window.open(url, wdwName, options);      var newWin = window.open(url, wdwName, options);
     newWin.focus();      newWin.focus();
 }  }
 function gothere(val) {  function gothere(val) {
     window.location=val+'?acts='+document.forms.fileattr.acts.value;      window.location=val+'?acts='+document.forms.fileattr.acts.value$inhibit_menu;
 }  }
 </script>  </script>
   
 </head>  
 ENDHEADER  ENDHEADER
 $r->print(&Apache::loncommon::bodytag('Browse Resources'));  
 # - Evaluate actions from previous page (both cumulatively and chronologically)          my ($headerdom)=($uri=~m{^/res/($match_domain)/});
         if ($ENV{'form.catalogmode'} eq 'groupimport') {          my %args = (
     my $acts=$ENV{'form.acts'};                        'domain' => $headerdom,
     my @Acts=split(/b/,$acts);                     );
     my %ahash;          if ($env{'form.catalogmode'}) {
     my %achash;              # "Popup mode"
     my $ac=0;              $args{'only_body'} = 1;
     # some initial hashes for working with data          }
     foreach (@Acts) {   $r->print(&Apache::loncommon::start_page('Browse Resources',$js,\%args));
  my ($state,$ref)=split(/a/);  # ---------------------------------- get state of file types to be showing
  $ahash{$ref}=$state;   if ($env{'form.only'}) {
  $achash{$ref}=$ac;      $typeselect = $env{'form.only'};
  $ac++;   } else {
     }      $typeselect = '';
     # sorting through the actions and changing the tied database hash  
     foreach (sort {$achash{$a}<=>$achash{$b}} (keys %ahash)) {  
  my $key=$_;  
  if ($ahash{$key} eq '1') {  
     $hash{'store_'.$hash{'pre_'.$key.'_link'}}=  
  $hash{'pre_'.$key.'_title'};  
     $hash{'storectr_'.$hash{'pre_'.$key.'_link'}}=  
  $hash{'storectr'}+0;  
     $hash{'storectr'}++;  
  }  
  if ($ahash{$key} eq '0') {  
     if ($hash{'store_'.$hash{'pre_'.$key.'_link'}}) {  
  delete $hash{'store_'.$hash{'pre_'.$key.'_link'}};  
     }  
  }  
     }  
     # deleting the previously cached listing  
     foreach (keys %hash) {  
  if ($_ =~ /^pre_/ && $_ =~/link$/) {  
     my $key = $_;  
     $key =~ s/^pre_//;  
     $key =~ s/_[^_]*$//;  
     delete $hash{'pre_'.$key.'_title'};  
     delete $hash{'pre_'.$key.'_link'};  
  }  
     }  
  }   }
   
 # ---------------------------------- 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'}) {
     for (my $i=0; $i<=8; $i++) {      for (my $i=0; $i<=16; $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="checked"';
     $hash{'display_attrs_'.$i} = 1;      $hash{'display_attrs_'.$i} = 1;
  }   }
     }      }
  } else {   } else {
     for (my $i=0; $i<=8; $i++) {      for (my $i=0; $i<=16; $i++) {
  $attrchk[$i] = 'checked' if $hash{'display_attrs_'.$i} == 1;   $attrchk[$i] = 'checked="checked"' if $hash{'display_attrs_'.$i} == 1;
     }      }
  }   }
   
           my @file_categories = &Apache::loncommon::filecategories();
           my %select_file_categories;
           my @select_form_order = ('');
           $select_file_categories{''} = &mt('All file types');
           foreach my $cat (@file_categories) {
               my $types = join(",",&Apache::loncommon::filecategorytypes($cat));
               $select_file_categories{$types} = &mt($cat);
               push(@select_form_order,$types);
           }
           $select_file_categories{'select_form_order'} = \@select_form_order;
           my $type_element=
               &Apache::loncommon::select_form(
                   $typeselect,
                   'only',
                   %select_file_categories);
           my $type_selector = '<label>'.&mt('File Type Displayed: [_1]',
                                             $type_element).'</label>';
   
 # ------------------------------- output state of file attributes to be showing  # ------------------------------- output state of file attributes to be showing
  $r->print(<<END);  #                                 All versions has to the last item
 <form method="post" name="fileattr" action="$uri"  #                                 since it does not take an extra col
  enctype="application/x-www-form-urlencoded">  
 <b><font color="#666666">Display file attributes</font></b><br />          my %lt=&Apache::lonlocal::texthash(
 <table border=0><tr>                                             'av' => 'All versions',
 <td><input type="checkbox" name="attr0" value="1" $attrchk[0] /> Title</td>                                             'ud' => 'Update Display',
 <td><input type="checkbox" name="attr1" value="1" $attrchk[1] /> Size</td>                                             'pr' => 'Problems',
 <td><input type="checkbox" name="attr2" value="1" $attrchk[2] /> Last access</td>                                             'gr' => 'Graphics',
 <td><input type="checkbox" name="attr3" value="1" $attrchk[3] /> Last modified</td>                                             'at' => 'All types',
 <td><input type="checkbox" name="attr8" value="1" $attrchk[8] /> All versions</td></tr><tr>                                             'hd' => 'Display Options'
 <td><input type="checkbox" name="attr4" value="1" $attrchk[4] /> Author</td>                                             );
 <td><input type="checkbox" name="attr5" value="1" $attrchk[5] /> Keywords</td>          my @disp_order = ('0','4','5','6','13','1','2','3','10','14','8','11','7','12','15','16');
 <td><input type="checkbox" name="attr6" value="1" $attrchk[6] /> Language</td>          my %disp_options = &Apache::lonlocal::texthash (
 <td><input type="checkbox" name="attr7" value="1" $attrchk[7] /> Show Resource</td>                                0  => 'Title',
 <td>&nbsp;</td>                                4  => 'Author',
 </tr></table>                                5  => 'Keywords',
 <input type="hidden" name="dirPointer" value="on" />                                6  => 'Language',
                                 13 => 'Notes',
                                 1  => 'Size',
                                 2  => 'Last access',
                                 3  => 'Last modified',
                                 10 => 'Source Available',
                                 14 => 'Abstract',
                                 8  => 'Statistics',
                                 11 => 'Linked/Related Resources',
                                 7  => 'Show resource',
                                 12 => 'Subject',
                                 15 => 'Grade Level',
                                 16 => 'Standards',
                              );
           my $cell = 0;
           my $numinrow = 4;
           $r->print('
   <form method="post" name="fileattr" action="'.$uri.'" enctype="application/x-www-form-urlencoded">
   <fieldset>
   <legend><b>'.$lt{'hd'}.'</b></legend>
   <table style=" border-collapse: collapse; border-style: none;">'."\n");
           foreach my $item (@disp_order) {
               my $style = 'padding-left: 12px; padding-right: 8px;';
               if ($cell%$numinrow == 0) {
                   $r->print('<tr>');
               }
               $cell ++;
               if ($cell > 3 * $numinrow) {
                   $style .= ' padding-bottom: 6px;';
               }
               if (defined($disp_options{$item})) {
                   $r->print('<td style="'.$style.'"><span class="LC_nobreak">'.
                             '<label><input type="checkbox" name="attr'.$item.'" value="1" '.
                             $attrchk[$item].' onclick="this.form.submit();" /> '.$disp_options{$item}.
                             '</label></span></td>'."\n");
               }
               if ($cell > 1 && $cell%$numinrow == 0) {
                   $r->print('</tr>');
               }
           }
           $r->print(<<END);
   <tr>
   <td style="font-style: italic; border-top: 1px solid black; padding-top: 6px">
   <label><input type="checkbox" name="attr9" value="1" $attrchk[9] onclick="this.form.submit();" /> $lt{'av'}</label>
   </td>
   <td colspan="3" style="padding-left:8px; padding-top: 4px; font-style: italic; border-top: 1px solid black; padding-top: 8px">$type_selector</td>
   </tr>
   </table>
   <input type="hidden" name="attrs" value="1" />
   </fieldset>
   <input type="submit" name="updatedisplay" value="$lt{'ud'}" />
 <input type="hidden" name="acts" value="" />  <input type="hidden" name="acts" value="" />
 <input type="submit" name="attrs" value="Review" />&nbsp;  $closebutton $groupimportbutton
 <input type="submit" name="attrs" value="Refresh" />  
 $closebutton  
 $groupimportbutton  
 </form>  
 END  END
           $r->print(&Apache::loncommon::inhibit_menu_check('input'));
      
   # -------------- Filter out sequence containment in crumbs and "recent folders"
    my $storeuri=$uri;
    $storeuri='/'.(split(/\.(page|sequence)\/\//,$uri))[-1];
    $storeuri=~s/\/+/\//g;
   # ---------------------------------------------------------------- Bread crumbs
           $r->print(&Apache::lonhtmlcommon::crumbs($storeuri,'','',
    (($env{'form.catalogmode'} eq 'import')?
    'document.forms.fileattr':'')).
     &Apache::lonhtmlcommon::select_recent('residx','resrecent',
   'window.status=this.form.resrecent.options[this.form.resrecent.selectedIndex].value;this.form.action=this.form.resrecent.options[this.form.resrecent.selectedIndex].value;this.form.submit();'));
   # -------------------------------------------------------- Resource Home Button
    my $reshome=$env{'course.'.$env{'request.course.id'}.'.reshome'};
    if ($reshome) {
       $r->print("<font size='+2'><a href='");
       if ($env{'form.catalogmode'} eq 'import') {
    $r->print('javascript:document.forms.fileattr.action="'.&Apache::loncommon::inhibit_menu_check($reshome).'";document.forms.fileattr.submit();');
       } else {
    $r->print($reshome);
       }
       $r->print("'>".&mt('Home').'</a></font>');
    }
    $r->print('</form>');
   # ------------------------------------------------------ Remember where we were
    &Apache::loncommon::storeresurl($storeuri);
    &Apache::lonhtmlcommon::store_recent('residx',$storeuri,$storeuri);
   # -------------------------------------------------- Check All and Uncheck all
    if ($env{'form.catalogmode'} eq 'import') {
       $r->print('<br /><input type="button" value="'.&mt("Check All").'" id="checkallbutton" onclick="javascript:checkAll()" />');
       $r->print('<input type="button" value="'.&mt("Uncheck All").'" id="uncheckallbutton" onclick="javascript:uncheckAll()" />');
    }
 # ----------------- 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(&initdebug());          #$r->print(&initdebug());
 #        $r->print(&writedebug("Omit:@Omit")) if (@Omit);          #$r->print(&writedebug("Omit:@Omit")) if (@Omit);
 #        $r->print(&writedebug("Only:@Only")) if (@Only);          #$r->print(&writedebug("Only:@Only")) if (@Only);
         $r->print("<table width='100\%' border=0><tr><td bgcolor=#777777>\n");          $r->print('<table width="100%" border="0"><tr><td bgcolor="#777777">'."\n");
  $r->print("<table width='100\%' border=0><tr bgcolor=$titleclr>\n");   $r->print('<table width="100%" border="0"><tr bgcolor="'.$titleclr.'">'."\n");
  $r->print("<td $colspan><b>Name</b></td>\n");   $r->print("<td $colspan><b>".&mt('Name')."</b></td>\n");
  $r->print("<td><b>Title</b></td>\n")    $r->print("<td><b>".&mt('Title')."</b></td>\n") 
     if ($hash{'display_attrs_0'} == 1);      if ($hash{'display_attrs_0'} == 1);
  $r->print("<td align=right><b>Size (bytes) ".   $r->print("<td align=right><b>".&mt("Size")." (".&mt("bytes").") ".
   "</b></td>\n") if ($hash{'display_attrs_1'} == 1);    "</b></td>\n") if ($hash{'display_attrs_1'} == 1);
  $r->print("<td><b>Last accessed</b></td>\n")    $r->print("<td><b>".&mt("Last accessed")."</b></td>\n") 
     if ($hash{'display_attrs_2'} == 1);      if ($hash{'display_attrs_2'} == 1);
  $r->print("<td><b>Last modified</b></td>\n")   $r->print("<td><b>".&mt("Last modified")."</b></td>\n")
     if ($hash{'display_attrs_3'} == 1);      if ($hash{'display_attrs_3'} == 1);
  $r->print("<td><b>Author(s)</b></td>\n")   $r->print("<td><b>".&mt("Author(s)")."</b></td>\n")
     if ($hash{'display_attrs_4'} == 1);      if ($hash{'display_attrs_4'} == 1);
  $r->print("<td><b>Keywords</b></td>\n")   $r->print("<td><b>".&mt("Keywords")."</b></td>\n")
     if ($hash{'display_attrs_5'} == 1);      if ($hash{'display_attrs_5'} == 1);
  $r->print("<td><b>Language</b></td>\n")   $r->print("<td><b>".&mt("Language")."</b></td>\n")
     if ($hash{'display_attrs_6'} == 1);      if ($hash{'display_attrs_6'} == 1);
  $r->print("<td><b>Resource</b></td>\n")   $r->print("<td><b>".&mt("Usage Statistics")." <br />(".
     &mt("Courses/Network Hits").")</b> ".&mt('updated periodically')."</td>\n")
       if ($hash{'display_attrs_8'} == 1);
    $r->print("<td><b>".&mt("Source Available")."</b></td>\n")
       if ($hash{'display_attrs_10'} == 1);
    $r->print("<td><b>".&mt("Linked/Related Resources")."</b></td>\n")
       if ($hash{'display_attrs_11'} == 1);
    $r->print("<td><b>".&mt("Resource")."</b></td>\n")
     if ($hash{'display_attrs_7'} == 1);      if ($hash{'display_attrs_7'} == 1);
           $r->print("<td><b>".&mt("Subject")."</b></td>\n")
               if ($hash{'display_attrs_12'} == 1);
           $r->print("<td><b>".&mt("Notes")."</b></td>\n")
               if ($hash{'display_attrs_13'} == 1);
           $r->print("<td><b>".&mt("Abstract")."</b></td>\n")
               if ($hash{'display_attrs_14'} == 1);
           $r->print("<td><b>".&mt("Grade Level")."</b></td>\n")
               if ($hash{'display_attrs_15'} == 1);
           $r->print("<td><b>".&mt("Standards")."</b></td>\n")
               if ($hash{'display_attrs_16'} == 1);
  $r->print('</tr>');   $r->print('</tr>');
   
 # ----------------- read in what directories have previously been set to "open"  # ----------------- read in what directories have previously been set to "open"
Line 441  END Line 610  END
     }      }
  }   }
   
  if ($ENV{'form.openuri'}) {  # take care of review and refresh options   if ($env{'form.openuri'}) {  # take care of review and refresh options
     my $uri=$ENV{'form.openuri'};      my $uri=$env{'form.openuri'};
     if (exists($hash{'diropen_status_'.$uri})) {      if (exists($hash{'diropen_status_'.$uri})) {
  my $cursta = $hash{'diropen_status_'.$uri};   my $cursta = $hash{'diropen_status_'.$uri};
  $dirs{$uri} = 'open';   $dirs{$uri} = 'open';
Line 457  END Line 626  END
     }      }
  }   }
   
  my $bredir = $ENV{'form.dirPointer'};  
  my $toplevel;   my $toplevel;
  my $indent = 0;   my $indent = 0;
  $uri = $uri.'/' if $uri !~ /.*\/$/;   $uri = $uri.'/' if $uri !~ /.*\/$/;
   
  if ($bredir ne 'on') {    if ($env{'form.dirPointer'} ne 'on') {
     $hash{'top.level'} = $uri;       $hash{'top.level'} = $uri;
     $toplevel = $uri;       $toplevel = $uri;
     } else {
  } else {       $toplevel = $hash{'top.level'};
     $toplevel = $hash{'top.level'};    }
  }  
   
 # -------------------------------- 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/'){
Line 483  END Line 650  END
 # -------- recursively go through all the directories and output as appropriate  # -------- recursively go through all the directories and output as appropriate
  &scanDir ($r,$toplevel,$indent,\%hash);   &scanDir ($r,$toplevel,$indent,\%hash);
   
 # ---------------------------- embed hidden information useful for group import  
  $r->print("<form name='fnum'>");  
  $r->print("<input type='hidden' name='fnum' value='$fnum'></form>");  
   
 # -------------------------------------------------------------- end the tables  # -------------------------------------------------------------- end the tables
  $r->print('</table>');   $r->print('</table>');
   # ---------------------------- embed hidden information useful for group import
    $r->print("<form name='fnum' action=''>");
    $r->print("<input type='hidden' name='fnum' value='$fnum' /></form>");
   # -------------------------------------------------------------- end the tables
  $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(&Apache::loncommon::end_page()."\n");
  untie(%hash);  
     } else {  
  $r->print('<html><head></head><body>Unable to tie hash to db '.  
   'file</body></html>');  
  return OK;  
     }      }
       if(! $c->aborted()) {
   # write back into the temporary file
    my %dbfile;
           if (tie(%dbfile,'GDBM_File',$diropendb,&GDBM_NEWDB(),0640)) {
               while (my($key,$value) = each(%hash)) {
                   $dbfile{$key}=$value;
               }
               untie(%dbfile);
           }
       }
   
     return OK;      return OK;
 }  }
   
 # ----------------------------------------------- recursive scan of a directory  # ----------------------------------------------- recursive scan of a directory
 sub scanDir {  sub scanDir {
     my ($r,$startdir,$indent,$hashref)=@_;      my ($r,$startdir,$indent,$hashref)=@_;
       my $c = $r->connection();
     my ($compuri,$curdir);      my ($compuri,$curdir);
     my $dirptr=16384;      my $dirptr=16384;
       my $obs;
     $indent++;      $indent++;
   
     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,undef,$testdir,undef)=split(/\&/,$line,5);           return if ($c->aborted());
  next if $strip =~ /.*\.meta$/;   #This is a kludge, sorry aboot this
    my ($strip,$dom,undef,$testdir,undef,undef,undef,undef,undef,undef,undef,undef,undef,undef,$obs,undef)=split(/\&/,$line,16); 
    next if($strip =~ /.*\.meta$/ | $obs eq '1');
  my (@fileparts) = split(/\./,$strip);   my (@fileparts) = split(/\./,$strip);
  if ($hash{'display_attrs_8'} != 1) {   if ($hash{'display_attrs_9'} != 1) {
               # if not all versions to be shown
     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 /\Q$fname\E/,@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>      # dom list has full path /res/<domain name>/ already
     $curdir = $compuri;      $curdir='';
       $compuri = (split(/\&/,$line))[0];
  } 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)$/) or ($compuri=~/\.(sequence|page)\/$/)) {
     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";
Line 551  sub scanDir { Line 730  sub scanDir {
 # --------------- get complete matched list based on the uri (returns an array)  # --------------- get complete matched list based on the uri (returns an array)
 sub get_list {  sub get_list {
     my ($r,$uri)=@_;      my ($r,$uri)=@_;
     my @list;      my @list=();
     (my $luri = $uri) =~ s/\//_/g;      (my $luri = $uri) =~ s/\//_/g;
       if ($env{'form.updatedisplay'}) {
     if ($ENV{'form.attrs'} eq 'Refresh') {  
  foreach (keys %hash) {   foreach (keys %hash) {
     delete $hash{$_} if ($_ =~ /^dirlist_files_/);      delete $hash{$_} if ($_ =~ /^dirlist_files_/);
     }      delete $hash{$_} if ($_ =~ /^dirlist_timestamp_files_/);
    }
     }      }
   
     if ($hash{'dirlist_files'.$luri}) {      if (defined($hash{'dirlist_files_'.$luri}) &&
    $hash{'dirlist_timestamp_files_'.$luri}+600 > (time)) {
  @list = split(/\n/,$hash{'dirlist_files_'.$luri});   @list = split(/\n/,$hash{'dirlist_files_'.$luri});
       } elsif ($uri=~/\.(page|sequence)\/$/) {
   # is a page or a sequence
    $uri=~s/\/$//;
    $uri='/'.(split(/\.(page|sequence)\/\//,$uri))[-1];
    $uri=~s/\/+/\//g;
    foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$uri))) {
       my @ratpart=split(/\:/,$_);
       push(@list,&LONCAPA::map::qtescape($ratpart[1]));
    } 
    $hash{'dirlist_files_'.$luri} = join("\n",@list);
     } else {      } else {
   # is really a directory
  @list = &Apache::lonnet::dirlist($uri);   @list = &Apache::lonnet::dirlist($uri);
  $hash{'dirlist_files_'.$luri} = join('\n',@list);   $hash{'dirlist_files_'.$luri} = join("\n",@list);
    $hash{'dirlist_timestamp_files_'.$luri} = time;
     }      }
     return @list=&match_ext($r,@list);      return @list=&match_ext($r,@list);    
   }
   
   sub dynmetaread {
       my $uri=shift;
       if (($hash{'display_attrs_8'}==1) || ($hash{'display_attrs_11'}==1)) {
   # We don't want the filename
    $uri=~s/\/[^\/]+$//;
   # Did we already see this?
    my $builddir=$uri;
    while ($builddir) {
       if ($dynread{$builddir}) {
    return 0;
       }
       $builddir=~s/\/[^\/]+$//;
    }
   # Actually get the data
    %dynhash=
       (%dynhash,&Apache::lonmeta::get_dynamic_metadata_from_sql($uri.'/'));
   # Remember that we got it
    $dynread{$uri}=1;
       } 
 }  }
   
 sub initdebug {  sub initdebug {
       my $start_page=
    &Apache::loncommon::start_page('Debug',undef,
          {'only_body' => 1,});
       $start_page =~ s/\n/ /g;
     return <<ENDJS;      return <<ENDJS;
 <script>  <script type="text/javascript">
 var debugging = true;  var debugging = true;
 if (debugging) {  if (debugging) {
     var debuggingWindow = window.open('','Debug','width=400,height=300',true);      var debuggingWindow = window.open('','Debug','width=400,height=300',true);
Line 582  function output(text) { Line 799  function output(text) {
         debuggingWindow.document.writeln(text);          debuggingWindow.document.writeln(text);
     }      }
 }  }
 output("<html><head><title>Debugging Window</title></head><body><pre>");     output('$start_page<pre>');   
 </script>  </script>
 ENDJS  ENDJS
 }  }
   
 sub writedebug {  sub writedebug {
     my $text = shift;      my ($text) = @_;
     return "<script>output('$text');</script>";      return "<script type=\"text/javascript\">output('$text');</script>";
 }  }
   
 # -------------------- filters out files based on extensions (returns an array)  # -------------------- filters out files based on extensions (returns an array)
Line 608  sub match_ext { Line 825  sub match_ext {
  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) || ($fext=~/\.(page|sequence)$/);
   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) && 
Line 617  sub match_ext { Line 834  sub match_ext {
     push @trimlist,$line;      push @trimlist,$line;
  }   }
     }      }
     @trimlist = sort (@trimlist);      @trimlist = sort {uc($a) cmp uc($b)} (@trimlist);
     return @trimlist;      return @trimlist;
 }  }
   
Line 625  sub match_ext { Line 842  sub match_ext {
 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);      my (@pathfn, $fndir);
   # there could be relative paths (files actually belonging into this directory)
   # or absolute paths (for example, from sequences)
       my $absolute;
       my $pathprefix;
       if ($line=~m|^/res/| && $startdir ne '') {
    $absolute=1;
    $pathprefix='';
       } else {
    $absolute=0;
    $pathprefix=$startdir;
       }
     my $dirptr=16384;      my $dirptr=16384;
     my $fileclr="#ffffe6";      my $fileclr="#ffffe6";
     my $iconpath= $r->dir_config('lonIconsURL') . '/';      my $iconpath= $r->dir_config('lonIconsURL') . '/';
Line 633  sub display_line { Line 861  sub display_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 = &mt('View').' '.$filecom[0].' '.&mt('resources');
     $msg = 'Close '.$filecom[0].' directory' if $diropen eq 'opened';      $msg = &mt('Close').' '.$filecom[0].' '.&mt('directory') if $diropen eq 'opened';
   
     my $tabtag='</td>';      my $tabtag='</td>';
     my $i=0;      my $i=0;
       while ($i<=16) {
     while ($i<=7) {  
  $tabtag=join('',$tabtag,"<td>&nbsp;</td>")   $tabtag=join('',$tabtag,"<td>&nbsp;</td>")
     if $hash{'display_attrs_'.$i} == 1;      if ($i != 9 &&
    $hash{'display_attrs_'.$i} == 1);
  $i++;   $i++;
     }      }
   
     my $valign = ($hash{'display_attrs_7'} == 1 ? 'top' : 'bottom');      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 bgcolor=$fileclr>$extrafield");   my $updir=$startdir;
  $r->print("<td valign=$valign>\n");  # -------------- Filter out sequence containment in crumbs and "recent folders"
  $r->print ('<form method="post" name="dirpathUP" action="'.$startdir.   $updir='/'.(split(/\.(page|sequence)\/\//,$startdir))[-1];
    $updir=~s/\/+/\//g;
   
    $r->print("<tr valign='$valign' bgcolor=\"$fileclr\">$extrafield");
    $r->print("<td>\n");
    $r->print ('<form method="post" name="dirpathUP" action="'.$updir.
    '/" '.     '/" '.
    'onSubmit="return rep_dirpath(\'UP\','.     'onsubmit="return rep_dirpath(\'UP\','.
    'document.forms.fileattr.acts.value)" '.     'document.forms.fileattr.acts.value)" '.
    'enctype="application/x-www-form-urlencoded"'.     'enctype="application/x-www-form-urlencoded"'.
                    '>'."\n");                     '>'."\n");
  $r->print ('<input type=hidden name=openuri value="'.   $r->print(&Apache::loncommon::inhibit_menu_check('input'));
    $startdir.'">'."\n");   $r->print ('<input type="hidden" name="openuri" value="'.
  $r->print ('<input type="hidden" name="acts" value="">'."\n");     $startdir.'" />'."\n");
    $r->print ('<input type="hidden" name="acts" value="" />'."\n");
  $r->print ('<input src="'.$iconpath.'arrow_up.gif"');   $r->print ('<input src="'.$iconpath.'arrow_up.gif"');
  $r->print (' name="'.$msg.'" height="22" type="image" border="0">'.   $r->print (' name="'.$msg.'" alt="'.$msg.'" type="image" class="LC_indexer_icon" />'.
    "\n");     "\n");
  $r->print("Up $tabtag</tr></form>\n");   $r->print(&mt("Up")."</form>$tabtag</tr>\n");
  return OK;   return OK;
     }      }
 # Do we have permission to look at this?  # Do we have permission to look at this?
   
     return OK if (!&Apache::lonnet::allowed('bre',$startdir.$filecom[0]));      if($filecom[15] ne '1') { return OK if ((!&Apache::lonnet::allowed('bre',$pathprefix.$filecom[0])) && (!&Apache::lonnet::allowed('bro',$pathprefix.$filecom[0]))); }
   
   # make absolute links appear on different background
       if ($absolute) { $fileclr='#ccdd99'; }
   
 # 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 bgcolor=$fileclr>$extrafield");   $r->print("<tr valign='$valign' bgcolor=\"$fileclr\">$extrafield");
  $r->print("<td valign=$valign>");   $r->print("<td>");
  &begin_form ($r,$filecom[0].'/');   &begin_form ($r,$filecom[0]);
  my $anchor = $filecom[0].'/';   my $anchor = $filecom[0];
  $anchor =~ s/\///g;   $anchor =~ s/\W//g;
  $r->print ('<a name="'.$anchor.'">');   $r->print ('<a name="'.$anchor.'"></a>');
  $r->print ('<input type="hidden" name="acts" value="">');   $r->print ('<input type="hidden" name="acts" value="" />');
  $r->print ('<input src="'.$iconpath.'folder_pointer_'.   $r->print ('<input src="'.$iconpath.'folder_pointer_'.
    $diropen.'.gif"');      $diropen.'.gif"'); 
  $r->print (' name="'.$msg.'" height="22" type="image" border="0">'.   $r->print (' name="'.$msg.'" alt="'.$msg.'" type="image" class="LC_indexer_icon" />'.
    "\n");     "\n");
  $r->print ('<a href="javascript:gothere(\''.$filecom[0].   my $quotable_filecom = &Apache::loncommon::escape_single($filecom[0]);
    '/\')"><img src="'.$iconpath.'server.gif"');   $r->print ('<a href="javascript:gothere(\''.$quotable_filecom.
  $r->print (' border="0" /></a>'."\n");     '\')"><img alt="" src="'.$iconpath.'server.gif"');
  $r->print ("Domain - $listname ");   $r->print (' class="LC_icon" /></a>'."\n");
  if ($Apache::lonnet::domaindescription{$listname}) {   $r->print (&mt("Domain")." - $listname ");
     $r->print("(".$Apache::lonnet::domaindescription{$listname}.   if (&Apache::lonnet::domain($listname,'description')) {
       $r->print("(".&Apache::lonnet::domain($listname,'description').
       ")");        ")");
  }   }
  $r->print (" $tabtag</tr></form>\n");   $r->print ("</form>$tabtag</tr>\n");
  return OK;   return OK;
   
 # display user directory  # display user directory
     }      }
     if ($filecom[1] eq 'user') {      if ($filecom[1] eq 'user') {
  $r->print("<tr bgcolor=$fileclr>$extrafield");   # $r->print("<tr valign=$valign bgcolor=\"$fileclr\">$extrafield");
  $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/\W//g;
    $r->print("<tr bgcolor=\"$fileclr\">$extrafield<td valign=$valign>");
  &begin_form ($r,$curdir);   &begin_form ($r,$curdir);
  $r->print ('<a name="'.$anchor.'"><img src="'.$iconpath.   $r->print ('<a name="'.$anchor.'"></a><img alt="" src="'.$iconpath.
    'whitespace1.gif" border="0" />'."\n");     'whitespace1.gif" class="LC_icon" />'."\n");
  $r->print ('<input type="hidden" name="acts" value="">');   $r->print ('<input type="hidden" name="acts" value="" />');
  $r->print ('<input src="'.$iconpath.'folder_pointer_'.$diropen.   $r->print ('<input src="'.$iconpath.'folder_pointer_'.$diropen.
    '.gif"');      '.gif"'); 
  $r->print (' name="'.$msg.'" height="22" type="image" border="0">'.   $r->print (' name="'.$msg.'" alt="'.$msg.'" type="image" class="LC_indexer_icon" />'.
    "\n");     "\n");
  $r->print ('<a href="javascript:gothere(\''.$curdir.'\')"><img src='.   my $quotable_curdir = &Apache::loncommon::escape_single($curdir);
    $iconpath.'quill.gif border="0" name="'.$msg.   $r->print ('<a href="javascript:gothere(\''.$quotable_curdir
    '" height="22" /></a>');     .'\')"><img alt="'.$msg.'" src="'.
      $iconpath.'quill.gif" class="LC_indexer_icon" /></a>');
  my $domain=(split(m|/|,$startdir))[2];   my $domain=(split(m|/|,$startdir))[2];
  my $plainname=&Apache::loncommon::plainname($listname,$domain);   my $plainname=&Apache::loncommon::plainname($listname,$domain);
  $r->print ($listname);   $r->print ($listname);
  if (defined($plainname) && $plainname) { $r->print(" ($plainname) "); }   if (defined($plainname) && $plainname) { $r->print(" ($plainname) "); }
  $r->print ($tabtag.'</tr></form>'."\n");   $r->print ('</form>'.$tabtag.'</tr>'."\n");
  return OK;   return OK;
     }      }
   
 # display file  # display file
     if ($fnptr == 0 and $filecom[3] ne '') {      if (($fnptr == 0 and $filecom[3] ne '') or $absolute) {
  my $filelink = $startdir.$filecom[0];          my $title;
    my $filelink = $pathprefix.$filecom[0];
    if ($hash{'display_attrs_0'} == 1) {
       $title = &Apache::lonnet::gettitle($filelink);
    }
  my @file_ext = split (/\./,$listname);   my @file_ext = split (/\./,$listname);
  my $curfext = $file_ext[-1];   my $curfext = $file_ext[-1];
         if (@Omit) {          if (@Omit) {
             foreach (@Omit) { return OK if ($curfext eq $_); }              foreach (@Omit) { return OK if (lc($curfext) eq $_); }
         }          }
         if (@Only) {          if (@Only) {
             my $skip = 1;              my $skip = 1;
             foreach (@Only) { $skip = 0 if ($curfext eq $_); }              foreach (@Only) { $skip = 0 if (lc($curfext) eq $_); }
             return OK if ($skip > 0);              return OK if ($skip > 0);
         }          }
  # Set the icon for the file   # Set the icon for the file
  my $iconname = "unknown.gif";   my $iconname = &Apache::loncommon::icon($listname);
  my $embstyle = &Apache::loncommon::fileembstyle($curfext);   $r->print('<tr valign="'.$valign.'" bgcolor="'.$fileclr.'">'.
  # The unless conditional that follows is a bit of overkill                    '<td valign="top"><span class="LC_nobreak">');
  $iconname = $curfext.".gif" unless  
     (!defined($embstyle) || $embstyle eq 'unk' || $embstyle eq 'hdn');          if ($env{'form.catalogmode'} eq 'interactive') {
  #      my $quotable_filelink = &Apache::loncommon::escape_single($filelink);
  $r->print("<tr bgcolor=$fileclr><td nowrap valign='$valign'>");  
  my $metafile = grep /^\Q$filecom[0]\E\.meta\&/, @list;  
  my $title;  
         if ($ENV{'form.catalogmode'} eq 'interactive') {  
     $title=$listname;  
     $title = &Apache::lonnet::metadata($filelink,'title')  
  if ($metafile == 1);  
     $title=$listname unless $title;  
     my $titleesc=HTML::Entities::encode($title);  
     $titleesc=~s/\'/\\'/; #' (clean up this spare quote)  
             $r->print("<a href=\"javascript:select_data(\'",              $r->print("<a href=\"javascript:select_data(\'",
                       $titleesc,"','",$filelink,"')\">");                        $quotable_filelink,"')\">");
     $r->print("<img src='",$iconpath,"select.gif' border='0' /></a>".      $r->print("<img alt=\"\" src='",$iconpath,"select.gif' class='LC_icon' /></a>".
       "\n");        "\n");
     $r->print("</td><td valign='$valign' nowrap>");      $r->print('</span></td><td valign="top"><span class="LC_nobreak">');
  }   } elsif ($env{'form.catalogmode'} eq 'import') {
         elsif ($ENV{'form.catalogmode'} eq 'groupimport') {      $r->print("<form name='form$fnum' action=''>\n");
     $title=$listname;  
     $title = &Apache::lonnet::metadata($filelink,'title')  
  if ($metafile == 1);  
     $title=$listname unless $title;  
     my $titleesc=&HTML::Entities::encode($title);  
     $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='".
       "javascript:queue(\"form$fnum\")' ");        "javascript:queue(\"form$fnum\")' ");
     if ($hash{'store_'.$filelink}) {      if ($hash{'store_'.$filelink}) {
  $r->print("checked");   $r->print("checked");
     }      }
     $r->print(">\n");      $r->print(" />\n");
     $r->print("<input type='hidden' name='title"."' ".      $r->print('</form></span></td><td valign="top"><span class="LC_nobreak">');
       "value='$titleesc'>\n");  
     $r->print("</form>\n");  
     $r->print("</td><td valign='$valign' nowrap>");  
     $hash{"pre_${fnum}_link"}=$filelink;      $hash{"pre_${fnum}_link"}=$filelink;
     $hash{"pre_${fnum}_title"}=$titleesc;      $hash{"pre_${fnum}_title"}=$title;
       if (!$hash{"pre_${fnum}_title"}) {
           $hash{"pre_${fnum}_title"} = 'Not_retrieved';
       }
      $fnum++;       $fnum++;
  }   }
   # Form to open or close sequences
  if ($indent > 0 and $indent < 11) {   if ($filelink=~/\.(page|sequence)$/) {
     $r->print("<img src=",$iconpath,"whitespace",$indent,      my $curdir = $startdir.$filecom[0].'/';
       ".gif border='0' />\n");      &begin_form($r,$curdir);
       $indent--;
    }
   # General indentation
    if ($indent > 0 and $indent < 16) {
       $r->print("<img alt=\"\" src='",$iconpath,"whitespace",$indent,
         ".gif' class='LC_icon' />\n");
  } elsif ($indent >0) {   } elsif ($indent >0) {
     my $ten = int($indent/10.);      my $ten = int($indent/10.);
     my $rem = $indent%10.0;      my $rem = $indent%10.0;
     my $count = 0;      my $count = 0;
     while ($count < $ten) {      while ($count < $ten) {
  $r->print("<img src=",$iconpath,   $r->print("<img alt=\"\" src=".$iconpath.
   "whitespace10.gif border='0' />\n");    "whitespace10.gif class='LC_icon' />\n");
     $count++;      $count++;
     }      }
     $r->print("<img src=",$iconpath,"whitespace",$rem,      $r->print("<img alt=\"\" src=",$iconpath,"whitespace",$rem,
       ".gif border='0' />\n") if $rem > 0;        ".gif class='LC_icon' />\n") if $rem > 0;
  }   }
   # Sequence open/close icon
  $r->print("<img src=$iconpath$iconname border='0' />\n");   if ($filelink=~/\.(page|sequence)$/) {
  $r->print (" <a href=\"javascript:openWindow('".$filelink.      my $curdir = $startdir.$filecom[0].'/';
    "', 'metadatafile', '450', '500', 'no', 'yes')\";".      my $anchor = $curdir;
    " TARGET=_self>$listname</a> ");      $anchor =~ s/\W//g;
       $r->print ('<input type="hidden" name="acts" value="" />');
  $r->print (" (<a href=\"javascript:openWindow('".$filelink.      $r->print ('<a name="'.$anchor.'"></a><input src="'.$iconpath.
    ".meta', 'metadatafile', '400', '450', 'no', 'yes')\"; ".         'folder_pointer_'.$diropen.'.gif"');
    "TARGET=_self>metadata</a>) ") if ($metafile == 1);      $r->print (' name="'.$msg.'" alt="'.$msg.'" type="image" class="LC_indexer_icon" />'.
          "\n");
  $r->print("</td>\n");   }
   # Filetype icons
    $r->print("<img alt=\"\" src='$iconname' class='LC_icon' />\n");
    my $quotable_filelink = &Apache::loncommon::escape_single($filelink);
   
    $r->print (" <a href=\"javascript:openWindow('".$quotable_filelink.
      "?inhibitmenu=yes','previewfile','450','500','no','yes','yes');\"".
      " target=\"_self\">$listname</a> ");
    $quotable_filelink = &Apache::loncommon::escape_single($filelink.'.meta');
    &Apache::loncommon::inhibit_menu_check(\$quotable_filelink);
    $r->print (" (<a href=\"javascript:openWindow('".$quotable_filelink.
      "?inhibitmenu=yes','metadatafile','500','550','no','yes','no');\" ".
      " target=\"_self\">".&mt('metadata')."</a>) ");
   # Close form to open/close sequence
    if ($filelink=~/\.(page|sequence)$/) {
       $r->print('</form>');
    }
    $r->print("</span></td>\n");
  if ($hash{'display_attrs_0'} == 1) {   if ($hash{'display_attrs_0'} == 1) {
     my $title = &Apache::lonnet::metadata($filelink,'title')      $r->print('<td> '.($title eq '' ? '&nbsp;' : $title).
  if ($metafile == 1);  
     $r->print('<td valign=$valign> '.($title eq '' ? '&nbsp;' : $title).  
       ' </td>'."\n");        ' </td>'."\n");
  }   }
  $r->print('<td align=right valign=$valign> ',   $r->print('<td align="right"> ',
   $filecom[8]," </td>\n")     $filecom[8]," </td>\n") 
     if $hash{'display_attrs_1'} == 1;      if $hash{'display_attrs_1'} == 1;
  $r->print('<td valign=$valign> '.   $r->print('<td> '.
   (localtime($filecom[9]))." </td>\n")                     (&Apache::lonlocal::locallocaltime($filecom[9]))." </td>\n")
     if $hash{'display_attrs_2'} == 1;      if $hash{'display_attrs_2'} == 1;
  $r->print('<td valign=$valign> '.   $r->print('<td> '.
   (localtime($filecom[10]))." </td>\n")                     (&Apache::lonlocal::locallocaltime($filecom[10]))." </td>\n")
     if $hash{'display_attrs_3'} == 1;      if $hash{'display_attrs_3'} == 1;
   
  if ($hash{'display_attrs_4'} == 1) {   if ($hash{'display_attrs_4'} == 1) {
     my $author = &Apache::lonnet::metadata($filelink,'author')      my $author = &Apache::lonnet::metadata($filelink,'author');
  if ($metafile == 1);      $r->print('<td> '.($author eq '' ? '&nbsp;' : $author).
     $r->print('<td valign=$valign> '.($author eq '' ? '&nbsp;' : $author).  
       " </td>\n");        " </td>\n");
  }   }
  if ($hash{'display_attrs_5'} == 1) {   if ($hash{'display_attrs_5'} == 1) {
     my $keywords = &Apache::lonnet::metadata($filelink,'keywords')      my $keywords = &Apache::lonnet::metadata($filelink,'keywords');
  if ($metafile == 1);  
     # $keywords = '&nbsp;' if (!$keywords);      # $keywords = '&nbsp;' if (!$keywords);
     $r->print('<td valign=$valign> '.($keywords eq '' ? '&nbsp;' : $keywords).      $r->print('<td> '.($keywords eq '' ? '&nbsp;' : $keywords).
       " </td>\n");        " </td>\n");
  }   }
   #'
   
  if ($hash{'display_attrs_6'} == 1) {   if ($hash{'display_attrs_6'} == 1) {
     my $lang = &Apache::lonnet::metadata($filelink,'language')      my $lang = &Apache::lonnet::metadata($filelink,'language');
  if ($metafile == 1);  
     $lang = &Apache::loncommon::languagedescription($lang);      $lang = &Apache::loncommon::languagedescription($lang);
     $r->print('<td valign=$valign> '.($lang eq '' ? '&nbsp;' : $lang).      $r->print('<td> '.($lang eq '' ? '&nbsp;' : $lang).
       " </td>\n");        " </td>\n");
  }   }
         if ($hash{'display_attrs_7'} == 1) {   if ($hash{'display_attrs_8'} == 1) {
             my $output='';  # statistics
             my $embstyle=&Apache::loncommon::fileembstyle($curfext);      &dynmetaread($filelink);
     if ($embstyle eq 'ssi') {      $r->print("<td>");
        $output=&Apache::lonnet::ssi_body($filelink);              for (qw(count course stdno avetries difficulty disc clear technical
                $output='<font size="-2">'.$output.'</font>';                  correct helpful depth)) {
    } elsif ($embstyle eq 'img') {  
                $output='<img src="'.$filelink.'" />';                  &dynmetaprint($r,$filelink,$_);
            } elsif ($filelink=~/^\/res\/(\w+)\/(\w+)\//) {              }
                $output='<img src="http://'.      $r->print("&nbsp;</td>\n");
  $Apache::lonnet::hostname{&Apache::lonnet::homeserver($2,$1)}.  
                  '/cgi-bin/thumbnail.gif?url='.$filelink.'" />';   }
    if ($hash{'display_attrs_10'} == 1) {
       my $source = &Apache::lonnet::metadata($filelink,'sourceavail');
       if($source eq 'open') {
    my $sourcelink = &Apache::lonsource::make_link($filelink,$listname);
    my $quotable_sourcelink = &Apache::loncommon::escape_single($sourcelink);
    &Apache::loncommon::inhibit_menu_check(\$quotable_sourcelink);
    $r->print('<td>'."<a href=\"javascript:openWindow('"
     .$quotable_sourcelink.
     "', 'previewsource', '700', '700', 'no', 'yes','yes');\"".
     " target=\"_self\">".&mt('Source Code')."</a> "."</td>\n");
       } else { #A cuddled else. :P
    $r->print("<td>&nbsp;</td>\n");
       }
    }
    if ($hash{'display_attrs_11'} == 1) {
   # links
      &dynmetaread($filelink);
      $r->print('<td>');
      &coursecontext($r,$filelink);
              for (qw(goto_list comefrom_list sequsage_list dependencies course_list)) {
                  &dynmetaprint($r,$filelink,$_);
            }             }
    $r->print('<td valign=$valign> '.($output eq '' ? '&nbsp;':$output).             $r->print('</td>');
           }
           if ($hash{'display_attrs_7'} == 1) {
   # Show resource
      my $output=&showpreview($filelink);
              $r->print('<td> '.($output eq '' ? '&nbsp;':$output).
       " </td>\n");        " </td>\n");
         }          }
           if ($hash{'display_attrs_12'} == 1) {
               my $subject = &Apache::lonnet::metadata($filelink,'subject');
               $r->print('<td> '.($subject eq '' ? '&nbsp;' : $subject).
                         " </td>\n");
           }
   
           if ($hash{'display_attrs_13'} == 1) {
               my $notes = &Apache::lonnet::metadata($filelink,'notes');
               $r->print('<td> '.($notes eq '' ? '&nbsp;' : $notes).
                         " </td>\n");
           }
   
           if ($hash{'display_attrs_14'} == 1) {
               my $abstract = &Apache::lonnet::metadata($filelink,'abstract');
               $r->print('<td> '.($abstract eq '' ? '&nbsp;' : $abstract).
                         " </td>\n");
           }
   
           if ($hash{'display_attrs_15'} == 1) {
               my $gradelevel = &Apache::lonnet::metadata($filelink,'gradelevel');
               $r->print('<td> '.($gradelevel eq '' ? '&nbsp;' : $gradelevel).
                         " </td>\n");
           }
   
           if ($hash{'display_attrs_16'} == 1) {
               my $standards = &Apache::lonnet::metadata($filelink,'standards');
               $r->print('<td> '.($standards eq '' ? '&nbsp;' : $standards).
                         " </td>\n");
           }
   
  $r->print("</tr>\n");   $r->print("</tr>\n");
     }      }
   
 # -- display directory  # -- display directory
     if ($fnptr == $dirptr) {      if ($fnptr == $dirptr) {
  my @file_ext = split (/\./,$listname);  
  my $curfext = $file_ext[scalar(@file_ext)-1];  
  my $curdir = $startdir.$filecom[0].'/';   my $curdir = $startdir.$filecom[0].'/';
  my $anchor = $curdir;   my $anchor = $curdir;
  $anchor =~ s/\///g;   $anchor =~ s/\W//g;
  $r->print("<tr bgcolor=$fileclr>$extrafield<td valign=$valign>");   $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 < 16 and $indentm1 > 0) {
     $r->print("<img src=",$iconpath,"whitespace",$indentm1,      $r->print("<img alt=\"\" src=",$iconpath,"whitespace",$indentm1,
       ".gif border='0' />\n");        ".gif class='LC_icon' />\n");
  } else {   } else {
     my $ten = int($indentm1/10.);      my $ten = int($indentm1/10.);
     my $rem = $indentm1%10.0;      my $rem = $indentm1%10.0;
     my $count = 0;      my $count = 0;
     while ($count < $ten) {      while ($count < $ten) {
  $r->print ("<img src=",$iconpath   $r->print ("<img alt=\"\" src=",$iconpath
    ,"whitespace10.gif border='0' />\n");     ,"whitespace10.gif class='LC_icon' />\n");
  $count++;   $count++;
     }      }
     $r->print ("<img src=",$iconpath,"whitespace",$rem,      $r->print ("<img alt=\"\" src=",$iconpath,"whitespace",$rem,
        ".gif border='0' />\n") if $rem > 0;         ".gif class='LC_icon' />\n") if $rem > 0;
  }   }
  $r->print ('<input type="hidden" name="acts" value="">');   $r->print ('<input type="hidden" name="acts" value="" />');
  $r->print ('<a name="'.$anchor.'"><input src="'.$iconpath.   $r->print ('<a name="'.$anchor.'"></a><input src="'.$iconpath.
    'folder_pointer_'.$diropen.'.gif"');     'folder_pointer_'.$diropen.'.gif"');
  $r->print (' name="'.$msg.'" height="22" type="image" border="0">'.   $r->print (' name="'.$msg.'" alt="'.$msg.'" type="image" class="LC_indexer_icon" />'.
    "\n");     "\n");
  $r->print ('<a href="javascript:gothere(\''.$curdir.'\')"><img src="'.   my $quotable_curdir = &Apache::loncommon::escape_single($curdir);
    $iconpath.'folder_'.$diropen.'.gif" border="0" /></a>'.   $r->print ('<a href="javascript:gothere(\''
      .$quotable_curdir.'\')">'
      .'<img alt="'.&mt('Open Folder').'"src="'.
      $iconpath.'folder_'.$diropen.'.gif" class="LC_icon" /></a>'.
    "\n");     "\n");
  $r->print ("$listname$tabtag</tr></form>\n");   $r->print ("$listname</form></td>\n");
   # Attributes
    my $filelink = $startdir.$filecom[0].'/default';
   
    if ($hash{'display_attrs_0'} == 1) {
       my $title = &Apache::lonnet::gettitle($filelink);
       $r->print('<td> '.($title eq '' ? '&nbsp;' : $title).
         ' </td>'."\n");
    }
    $r->print('<td align=right> ',
     $filecom[8]," </td>\n") 
       if $hash{'display_attrs_1'} == 1;
    $r->print('<td> '.
                     (&Apache::lonlocal::locallocaltime($filecom[9]))." </td>\n")
       if $hash{'display_attrs_2'} == 1;
    $r->print('<td> '.
                     (&Apache::lonlocal::locallocaltime($filecom[10]))." </td>\n")
       if $hash{'display_attrs_3'} == 1;
   
    if ($hash{'display_attrs_4'} == 1) {
       my $author = &Apache::lonnet::metadata($filelink,'author');
       $r->print('<td> '.($author eq '' ? '&nbsp;' : $author).
         " </td>\n");
    }
    if ($hash{'display_attrs_5'} == 1) {
       my $keywords = &Apache::lonnet::metadata($filelink,'keywords');
       # $keywords = '&nbsp;' if (!$keywords);
       $r->print('<td> '.($keywords eq '' ? '&nbsp;' : $keywords).
         " </td>\n");
    }
    if ($hash{'display_attrs_6'} == 1) {
       my $lang = &Apache::lonnet::metadata($filelink,'language');
       $lang = &Apache::loncommon::languagedescription($lang);
       $r->print('<td> '.($lang eq '' ? '&nbsp;' : $lang).
         " </td>\n");
    }
    if ($hash{'display_attrs_8'} == 1) {
      $r->print('<td>&nbsp;</td>');
    }
     if ($hash{'display_attrs_10'} == 1) {
      $r->print('<td>&nbsp;</td>');
    }
    if ($hash{'display_attrs_7'} == 1) {
      $r->print('<td>&nbsp;</td>');
           }
           if ($hash{'display_attrs_12'} == 1) {
               my $subject = &Apache::lonnet::metadata($filelink,'subject');
               $r->print('<td> '.($subject eq '' ? '&nbsp;' : $subject).
                         " </td>\n");
           }
           if ($hash{'display_attrs_11'} == 1) {
               $r->print('<td>&nbsp;</td>');
           }
           if ($hash{'display_attrs_12'} == 1) {
               my $subject = &Apache::lonnet::metadata($filelink,'subject');
               $r->print('<td> '.($subject eq '' ? '&nbsp;' : $subject).
                         " </td>\n");
           }
           if ($hash{'display_attrs_13'} == 1) {
               my $notes = &Apache::lonnet::metadata($filelink,'notes');
               $r->print('<td> '.($notes eq '' ? '&nbsp;' : $notes).
                         " </td>\n");
           }
           if ($hash{'display_attrs_14'} == 1) {
               my $abstract = &Apache::lonnet::metadata($filelink,'abstract');
               $r->print('<td> '.($abstract eq '' ? '&nbsp;' : $abstract).
                         " </td>\n");
           }
           if ($hash{'display_attrs_15'} == 1) {
               my $gradelevel = &Apache::lonnet::metadata($filelink,'gradelevel');
               $r->print('<td> '.($gradelevel eq '' ? '&nbsp;' : $gradelevel).
                         " </td>\n");
           }
           if ($hash{'display_attrs_16'} == 1) {
               my $standards = &Apache::lonnet::metadata($filelink,'standards');
               $r->print('<td> '.($standards eq '' ? '&nbsp;' : $standards).
                         " </td>\n");
           }
    $r->print('</tr>');
     }      }
   
 }  }
   
   sub coursecontext {
       my ($r,$filelink)=@_;
       my $filesymb=&Apache::lonnet::symbread($filelink);
       if ($filesymb) {
    my ($map,$index,$resource)=&Apache::lonnet::decode_symb($filesymb);
    $r->print(&mt('Already in this course:<br />[_1] in folder/map [_2].<br />',
         &Apache::lonnet::gettitle($resource),
         &Apache::lonnet::gettitle($map)));
       }
   }
   
   sub showpreview {
       my ($filelink)=@_;
       if ($filelink=~m-^(/ext/|http://)-) {
    return &mt('External Resource, preview not enabled');
       }
       my ($curfext)=($filelink=~/\.(\w+)$/);
       my $output='';
       my $embstyle=&Apache::loncommon::fileembstyle($curfext);
       if ($embstyle eq 'ssi') {
          my $cache=$Apache::lonnet::perlvar{'lonDocRoot'}.$filelink.
                       '.tmp';
          if ((!$env{'form.updatedisplay'}) &&
                       (-e $cache)) {
             open(FH,$cache);
             $output=join("\n",<FH>);
             close(FH);
          } else {
   # In update display mode, remove old cache. This is done to retroactively
   # clean up course context renderings.
     if (-e $cache) {
          unlink($cache);
     }
             $output=&Apache::lonnet::ssi_body($filelink);
   # Is access denied? Don't render, don't store
             if ($output=~/LONCAPAACCESSCONTROLERRORSCREEN/s) {
                $output='';
   # Was this rendered in course content? Don't store
             } elsif (!&Apache::lonnet::symbread($filelink)) {
                open(FH,">$cache");
                print FH $output;
                close(FH);
             }
          }
          $output='<font size="-2">'.$output.'</font>';
       } elsif ($embstyle eq 'img') {
          $output='<img alt="'.&mt('Preview').'" src="'.$filelink.'" />';
       } elsif ($filelink=~m{^/res/($match_domain)/($match_username)/}) {
          $output='<img  alt="'.&mt('Preview').'" src="http://'.
                    &Apache::lonnet::hostname(&Apache::lonnet::homeserver($2,$1)).
                    '/cgi-bin/thumbnail.gif?url='.$filelink.'" />';
       }
       return $output;
   }
   
   sub dynmetaprint {
       my ($r,$filelink,$item)=@_;
       if ($dynhash{$filelink}->{$item}) {
    $r->print("\n<br />".$fieldnames{$item}.': '.
     &Apache::lonmeta::prettyprint($item,
    $dynhash{$filelink}->{$item},
     (($env{'form.catalogmode'} ne 'import')?'preview':''),
     '',
     (($env{'form.catalogmode'} eq 'import')?'document.forms.fileattr':''),1));
       }
   }
   
 # ------------------- prints the beginning of a form for directory or file link  # ------------------- prints the beginning of a form for directory or file link
 sub begin_form {  sub begin_form {
     my ($r,$uri) = @_;      my ($r,$uri) = @_;
     my $anchor = $uri;      my $anchor = $uri;
     $anchor =~ s/\///g;      $anchor =~ s/\W//g;
       $uri=&Apache::loncommon::escape_single($uri);
     $r->print ('<form method="post" name="dirpath'.$dnum.'" action="'.$uri.      $r->print ('<form method="post" name="dirpath'.$dnum.'" action="'.$uri.
        '#'.$anchor.         '#'.$anchor.
        '" onSubmit="return rep_dirpath(\''.$dnum.'\''.         '" onsubmit="return rep_dirpath(\''.$dnum.'\''.
        ',document.forms.fileattr.acts.value)" '.         ',document.forms.fileattr.acts.value)" '.
        'enctype="application/x-www-form-urlencoded">'."\n");         'enctype="application/x-www-form-urlencoded">'."\n");
     $r->print ('<input type="hidden" name="openuri" value="'.$uri.'">'.      $r->print ('<input type="hidden" name="openuri" value="'.$uri.'" />'.
        "\n");         "\n");
     $r->print ('<input type="hidden" name="dirPointer" value="on">'."\n");      $r->print ('<input type="hidden" name="dirPointer" value="on" />'."\n");
       $r->print(&Apache::loncommon::inhibit_menu_check('input'));
     $dnum++;      $dnum++;
 }  }
   
 # --------- 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{'form.catalogmode'};      my ($hash) = @_;
     delete $hash{'form.mode'};      delete $hash->{'form.catalogmode'};
     delete $hash{'form.form'};      delete $hash->{'form.mode'};
     delete $hash{'form.element'};      delete $hash->{'form.form'};
     delete $hash{'form.omit'};      delete $hash->{'form.element'};
     delete $hash{'form.only'};      delete $hash->{'form.omit'};
     foreach (keys %hash) {      delete $hash->{'form.only'};
         delete $hash{$_} if (/^(pre_|store)/);      foreach (keys %{$hash}) {
           delete $hash->{$_} if (/^(pre_|store)/);
     }      }
 }  }
   
Line 948  sub setvalues { Line 1399  sub setvalues {
 sub cleanup {  sub cleanup {
     if (tied(%hash)){      if (tied(%hash)){
  &Apache::lonnet::logthis('Cleanup indexer: hash');   &Apache::lonnet::logthis('Cleanup indexer: hash');
         unless (untie(%hash)) {  
     &Apache::lonnet::logthis('Failed cleanup indexer: hash');  
         }  
     }      }
       return OK;
 }  }
   
   
   
   
   
 =head1 NAME  =head1 NAME
   
 Apache::lonindexer - mod_perl module for cross server filesystem browsing  Apache::lonindexer - mod_perl module for cross server filesystem browsing

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


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.