Diff for /loncom/interface/lonindexer.pm between versions 1.61 and 1.211

version 1.61, 2003/02/20 19:41:26 version 1.211, 2011/10/17 12:41:30
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 107  sub handler { Line 104  sub handler {
     my $lonhost = $r->dir_config('lonHostID');      my $lonhost = $r->dir_config('lonHostID');
     my $tabdir  = $r->dir_config('lonTabDir');      my $tabdir  = $r->dir_config('lonTabDir');
   
     my $fileclr='#ffffe6';  #SB 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 = LONCAPA::tempdir() .
  "/home/httpd/perl/tmp/$domain\_$ENV{'user.name'}_indexer.db";   "$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">'.  #SB    $extrafield='<td bgcolor="'.$fileclr.'" valign="bottom">'.
  '<a name="$anchor"><img src="'.$iconpath.'whitespace1.gif"'.              $extrafield='<td class="LC_bottom">'.
  ' border="0" /></td>';   '<img alt="" src="'.$iconpath.'whitespace1.gif"'.
    ' 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">'.  #SB    $extrafield='<td bgcolor="'.$fileclr.'" valign="bottom">'.
  '<a name="$anchor"><img src="'.$iconpath.'whitespace1.gif"'.              $extrafield='<td class="LC_bottom">'.
  ' border="0" /></td>';   '<img alt="" src="'.$iconpath.'whitespace1.gif"'.
    ' 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 211  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 249  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 273  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 291  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 266  function select_group() { Line 321  function select_group() {
   
 function changeURL(val) {  function changeURL(val) {
     if (window.opener.document) {      if (window.opener.document) {
         var elementname  = "$element"+"_value";          var elementname  = "$element";
         var checkboxname = "$element"+"_setparmval";  
  window.opener.document.forms["$form"].elements[elementname].value=val;   window.opener.document.forms["$form"].elements[elementname].value=val;
         window.opener.document.forms["$form"].elements[checkboxname].checked=true;  
     } else {      } else {
     alert("The file you selected is: "+val);      alert("The file you selected is: "+val);
     }      }
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  // <![CDATA[
 function openWindow(url, wdwName, w, h, toolbar,scrollbar) {  $catalogmodefunctions;
     var options = "width=" + w + ",height=" + h + ",";  function update_only(field) {
       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 $acts=$ENV{'form.acts'};          if ($env{'form.catalogmode'}) {
     my @Acts=split(/b/,$acts);              # "Popup mode"
     my %ahash;              $r->print(&Apache::loncommon::start_page('Browse published resources',$js,
     my %achash;                                                       {'only_body' => 1,
     my $ac=0;                                                        'domain' => $headerdom,}));
     # some initial hashes for working with data          } else {
     foreach (@Acts) {              # Only display page header and breadcrumbs in non-popup mode
  my ($state,$ref)=split(/a/);              &Apache::lonhtmlcommon::clear_breadcrumbs();
  $ahash{$ref}=$state;              &Apache::lonhtmlcommon::add_breadcrumb({
  $achash{$ref}=$ac;                  'text'  => 'Browse published resources',
  $ac++;                  'href'  => '/res/fhwfdev/?launch=1',
     }              });
     # sorting through the actions and changing the tied database hash              $r->print(&Apache::loncommon::start_page('Browse published resources',$js,
     foreach (sort {$achash{$a}<=>$achash{$b}} (keys %ahash)) {                                                       {'domain' => $headerdom,})
  my $key=$_;                       .&Apache::lonhtmlcommon::breadcrumbs()
  if ($ahash{$key} eq '1') {              );
     $hash{'store_'.$hash{'pre_'.$key.'_link'}}=          }
  $hash{'pre_'.$key.'_title'};  
     $hash{'storectr_'.$hash{'pre_'.$key.'_link'}}=  # ---------------------------------- get state of file types to be showing
  $hash{'storectr'}+0;   if ($env{'form.only'}) {
     $hash{'storectr'}++;      $typeselect = $env{'form.only'};
  }   } else {
  if ($ahash{$key} eq '0') {      $typeselect = '';
     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';
     $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 $onchange = 'this.form.submit();';
           my $type_element=
               &Apache::loncommon::select_form(
                   $typeselect,
                   'only',
                   \%select_file_categories,$onchange);
           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">   my %lt=&Apache::lonlocal::texthash(
 <b><font color="#666666">Display file attributes</font></b><br />     'av' => 'All versions',
 <table border=0><tr>     'ud' => 'Update Display',
 <td><input type="checkbox" name="attr0" value="1" $attrchk[0] /> Title</td>     'pr' => 'Problems',
 <td><input type="checkbox" name="attr1" value="1" $attrchk[1] /> Size</td>     'gr' => 'Graphics',
 <td><input type="checkbox" name="attr2" value="1" $attrchk[2] /> Last access</td>     'at' => 'All types',
 <td><input type="checkbox" name="attr3" value="1" $attrchk[3] /> Last modified</td>     'hd' => 'Display Options'
 <td rowspan="2"><input type="checkbox" name="attr8" value="1" $attrchk[8] /> Show Resource</td></tr><tr>     );
 <td><input type="checkbox" name="attr4" value="1" $attrchk[4] /> Author</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="attr5" value="1" $attrchk[5] /> Keywords</td>          my %disp_options = &Apache::lonlocal::texthash (
 <td><input type="checkbox" name="attr6" value="1" $attrchk[6] /> Language</td>                                0  => 'Title',
 <td><input type="checkbox" name="attr7" value="1" $attrchk[7] /> All versions</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>'.$lt{'hd'}.'</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(
               '<p>'
              .&Apache::lonhtmlcommon::crumbs(
                   $storeuri,
                   '',
                   '',
                   (($env{'form.catalogmode'} eq 'import')?
                                    'document.forms.fileattr':''))
              .'<br />'
              .&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();')
              .'</p>'
           );
   # -------------------------------------------------------- Resource Home Button
    my $reshome=$env{'course.'.$env{'request.course.id'}.'.reshome'};
    if ($reshome) {
       $r->print("<span class=\"LC_fontsize_large\"><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></span>');
    }
    $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('<p><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()" /></p>');
    }
 # ----------------- output starting row to the indexed file/directory hierarchy  # ----------------- output starting row to the indexed file/directory hierarchy
         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(&Apache::loncommon::start_data_table("LC_tableBrowseRes")
         $r->print("<table width='100\%' border=0><tr><td bgcolor=#777777>\n");                   .&Apache::loncommon::start_data_table_header_row());
  $r->print("<table width='100\%' border=0><tr bgcolor=$titleclr>\n");   $r->print("<th $colspan>".&mt('Name')."</th>\n");
  $r->print("<td $colspan><b>Name</b></td>\n");   $r->print("<th></th>\n");
  $r->print("<td><b>Title</b></td>\n")    $r->print("<th>".&mt('Title')."</th>\n") 
     if ($hash{'display_attrs_0'} == 1);      if ($hash{'display_attrs_0'} == 1);
  $r->print("<td align=right><b>Size (bytes) ".   $r->print('<th class="LC_right">'.&mt("Size")." (".&mt("bytes").") ".
   "</b></td>\n") if ($hash{'display_attrs_1'} == 1);    "</th>\n") if ($hash{'display_attrs_1'} == 1);
  $r->print("<td><b>Last accessed</b></td>\n")    $r->print("<th>".&mt("Last accessed")."</th>\n") 
     if ($hash{'display_attrs_2'} == 1);      if ($hash{'display_attrs_2'} == 1);
  $r->print("<td><b>Last modified</b></td>\n")   $r->print("<th>".&mt("Last modified")."</th>\n")
     if ($hash{'display_attrs_3'} == 1);      if ($hash{'display_attrs_3'} == 1);
  $r->print("<td><b>Author(s)</b></td>\n")   $r->print("<th>".&mt("Author(s)")."</th>\n")
     if ($hash{'display_attrs_4'} == 1);      if ($hash{'display_attrs_4'} == 1);
  $r->print("<td><b>Keywords</b></td>\n")   $r->print("<th>".&mt("Keywords")."</th>\n")
     if ($hash{'display_attrs_5'} == 1);      if ($hash{'display_attrs_5'} == 1);
  $r->print("<td><b>Language</b></td>\n")   $r->print("<th>".&mt("Language")."</th>\n")
     if ($hash{'display_attrs_6'} == 1);      if ($hash{'display_attrs_6'} == 1);
  $r->print("<td><b>Resource</b></td>\n")   $r->print("<th>".&mt("Usage Statistics")." <br />(".
     &mt("Courses/Network Hits").") ".&mt('updated periodically')."</th>\n")
     if ($hash{'display_attrs_8'} == 1);      if ($hash{'display_attrs_8'} == 1);
  $r->print('</tr>');   $r->print("<th>".&mt("Source Available")."</th>\n")
       if ($hash{'display_attrs_10'} == 1);
    $r->print("<th>".&mt("Linked/Related Resources")."</th>\n")
       if ($hash{'display_attrs_11'} == 1);
    $r->print("<th>".&mt("Resource")."</th>\n")
       if ($hash{'display_attrs_7'} == 1);
    $r->print("<th>".&mt("Subject")."</th>\n")
       if ($hash{'display_attrs_12'} == 1);
    $r->print("<th>".&mt("Notes")."</th>\n")
       if ($hash{'display_attrs_13'} == 1);
    $r->print("<th>".&mt("Abstract")."</th>\n")
       if ($hash{'display_attrs_14'} == 1);
    $r->print("<th>".&mt("Grade Level")."</th>\n")
       if ($hash{'display_attrs_15'} == 1);
    $r->print("<th>".&mt("Standards")."</th>\n")
       if ($hash{'display_attrs_16'} == 1);
       
       $r->print(&Apache::loncommon::end_data_table_header_row());
       
      
   
 # ----------------- 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 440  END Line 636  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 456  END Line 652  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 481  END Line 675  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(&Apache::loncommon::end_data_table());
  $r->print('</td></tr></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 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_7'} != 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 /$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>      # 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 550  sub scanDir { Line 754  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 $listerror;
       
     (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 {
  @list = &Apache::lonnet::dirlist($uri);  # is really a directory
  $hash{'dirlist_files_'.$luri} = join('\n',@list);   (my $listref,$listerror) = &Apache::lonnet::dirlist($uri);
           if (ref($listref) eq 'ARRAY') {
               @list = @{$listref};
           }
    $hash{'dirlist_files_'.$luri} = join("\n",@list);
    $hash{'dirlist_timestamp_files_'.$luri} = time;
       }
   #Checking for error messages associated with empty directories or inaccessible servers (See Bug 4984)
       if (($listerror eq 'no_such_dir') || ($listerror eq 'no_such_host')) { 
           $r->print("<p class='LC_info'>" . &mt("Directory does not exist."). "</p>");
       } elsif ($listerror eq 'con_lost') {
           $r->print("<p class='LC_info'>" . &mt("Directory temporarily not accessible."). "</p>");
     }      }
     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 581  function output(text) { Line 835  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 607  sub match_ext { Line 861  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 616  sub match_ext { Line 870  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 624  sub match_ext { Line 878  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";  #SB 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 = &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 $nowOpen = ($diropen eq 'opened' ? 1 : 0);
   
     my $tabtag='</td>';      my $tabtag='</td>';
     my $i=0;      my $i=0;
       while ($i<=16) {
     while ($i<=6) {  
  $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');
   
 # 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=bottom>\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;
   
   #SB $r->print("<tr valign='$valign' bgcolor=\"$fileclr\">$extrafield");
           $r->print(&Apache::loncommon::start_data_table_row()); # valign="$valign" ?!?
           $r->print($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 src="'.$iconpath.'arrow_up.gif"');          $r->print ('<input type="hidden" name="acts" value="" />'."\n");
  $r->print (' name="'.$msg.'" height="22" type="image" border="0">'.   $r->print ('<a href="#" onclick="document.dirpathUP.submit()"><img src="'.$iconpath.'arrow.up.gif"');
    $r->print (' alt="'.$msg.'" class="LC_fileicon" />'.
    "\n");     "\n");
  $r->print("Up $tabtag</tr></form>\n");   $r->print(&mt("Up")."</a></form></td><td>$tabtag");
           $r->print(&Apache::loncommon::end_data_table_row());
  return OK;   return OK;
     }      }
   # Do we have permission to look at this?
       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
   #SB    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");  #SB $r->print("<tr valign='$valign' bgcolor=\"$fileclr\">$extrafield");
  $r->print("<td valign=bottom>");   $r->print(&Apache::loncommon::start_data_table_row()); # valign="$valign" ?!?"
  &begin_form ($r,$filecom[0].'/');          $r->print($extrafield);
  my $anchor = $filecom[0].'/';   $r->print("<td>");
  $anchor =~ s/\///g;   &begin_form ($r,$filecom[0]);
  $r->print ('<a name="'.$anchor.'">');   my $anchor = $filecom[0];
  $r->print ('<input type="hidden" name="acts" value="">');   $anchor =~ s/\W//g;
  $r->print ('<input src="'.$iconpath.'folder_pointer_'.   $r->print ('<a name="'.$anchor.'"></a>');
    $diropen.'.gif"');   $r->print ('<input type="hidden" name="acts" value="" />');
  $r->print (' name="'.$msg.'" height="22" type="image" border="0">'.   $r->print ('<a href="#" onclick="document.dirpath'.($dnum-1).'.submit()"><img src="'.$iconpath.'arrow.'.($nowOpen ? "open" : "closed" ).'.gif"'); 
    $r->print (' alt="'.$msg.'" class="LC_fileicon" /></a>'.
    "\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_fileicon" />'."\n");
  if ($Apache::lonnet::domaindescription{$listname}) {   $r->print (&mt("Domain")." - $listname </a>");
     $r->print("(".$Apache::lonnet::domaindescription{$listname}.   if (&Apache::lonnet::domain($listname,'description')) {
       $r->print("<br />(".&Apache::lonnet::domain($listname,'description').
       ")");        ")");
  }   }
  $r->print (" $tabtag</tr></form>\n");   $r->print("</form></td><td>$tabtag");
            $r->print(&Apache::loncommon::end_data_table_row());
  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=bottom 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;
   #SB $r->print("<tr bgcolor=\"$fileclr\">$extrafield<td valign=$valign>");
           $r->print(&Apache::loncommon::start_data_table_row()
                    .$extrafield.'<td class="LC_'.$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");     'whitespace_21.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 ('<a href="#" onclick="document.dirpath'.($dnum-1).'.submit()">');
    '.gif"');           $r->print ('<img src="'.$iconpath.'arrow.'.($nowOpen ? "open" : "closed" ).
  $r->print (' name="'.$msg.'" height="22" type="image" border="0">'.     '.gif" class="LC_fileicon"'); 
    $r->print (' alt="'.$msg.'"/></a>'.
    "\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_fileicon" />');
  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.'</a>');
  if (defined($plainname) && $plainname) { $r->print(" ($plainname) "); }  
  $r->print ($tabtag.'</tr></form>'."\n");          if (defined($plainname) && $plainname) { $r->print(" ($plainname) "); }
  return OK;  # Wishlistlink
           $r->print('</form></td><td><a href="javascript:;" '.
                     'title="'.&mt('Set a link for this folder to wishlist').'" '.
                     'onclick="set_wishlistlink('."'$plainname','$startdir$listname'".')">'.
                     '<img class="LC_icon" src="/res/adm/pages/wishlist.png" '.
                     'alt="'.&mt('set wishlistlink').'" style="width:22px;"/></a>'.$tabtag);
           $r->print(&Apache::loncommon::end_data_table_row());
           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;
  return OK if (!&Apache::lonnet::allowed('bre',$filelink));              my $filelink = $pathprefix.$filecom[0];
  my @file_ext = split (/\./,$listname);              if ($hash{'display_attrs_0'} == 1) {
  my $curfext = $file_ext[-1];                  $title = &Apache::lonnet::gettitle($filelink);
         if (@Omit) {              }
             foreach (@Omit) { return OK if ($curfext eq $_); }              my @file_ext = split (/\./,$listname);
         }              my $curfext = $file_ext[-1];
         if (@Only) {              if (@Omit) {
             my $skip = 1;                  foreach (@Omit) { return OK if (lc($curfext) eq $_); }
             foreach (@Only) { $skip = 0 if ($curfext eq $_); }              }
             return OK if ($skip > 0);              if (@Only) {
         }                  my $skip = 1;
  # Set the icon for the file                  foreach (@Only) { $skip = 0 if (lc($curfext) eq $_); }
  my $iconname = "unknown.gif";                  return OK if ($skip > 0);
  my $embstyle = &Apache::loncommon::fileembstyle($curfext);              }
  # The unless conditional that follows is a bit of overkill              # Set the icon for the file
  $iconname = $curfext.".gif" unless              my $iconname = &Apache::loncommon::icon($listname);
     (!defined($embstyle) || $embstyle eq 'unk' || $embstyle eq 'hdn');  #SB $r->print("<tr valign='$valign' bgcolor=\"$fileclr\">);
  #          $r->print(&Apache::loncommon::start_data_table_row()); #SB valign="$valign" ?!?
  $r->print("<tr bgcolor=$fileclr><td nowrap valign='bottom'>");          $r->print('<td class="LC_middle LC_nobreak">');
  my $metafile = grep /^$filecom[0]\.meta\&/, @list;  
  my $title;          if ($env{'form.catalogmode'} eq 'interactive') {
         if ($ENV{'form.catalogmode'} eq 'interactive') {      my $quotable_filelink = &Apache::loncommon::escape_single($filelink);
     $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='bottom' nowrap>");      $r->print('</td><td class="LC_middle">');
  }   } 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></td><td class="LC_middle">');
       "value='$titleesc'>\n");  
     $r->print("</form>\n");  
     $r->print("</td><td valign='bottom' 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);
  } elsif ($indent >0) {      $indent--;
     my $ten = int($indent/10.);   }
     my $rem = $indent%10.0;  # General indentation
     my $count = 0;      my $count = 0;
     while ($count < $ten) {      while ($count < $indent) {
  $r->print("<img src=",$iconpath,              $r->print('<img alt="" src="'.$iconpath.'whitespace_21.gif" 
   "whitespace10.gif border='0' />\n");                  class="LC_icon" />');
     $count++;          $count++;
     }      }
     $r->print("<img src=",$iconpath,"whitespace",$rem,  # Sequence open/close icon
       ".gif border='0' />\n") if $rem > 0;   if ($filelink=~/\.(page|sequence)$/) {
  }      my $curdir = $startdir.$filecom[0].'/';
       my $anchor = $curdir;
  $r->print("<img src=$iconpath$iconname border='0' />\n");      $anchor =~ s/\W//g;
  $r->print (" <a href=\"javascript:openWindow('".$filelink.      $r->print ('<input type="hidden" name="acts" value="" />');
    "', 'metadatafile', '450', '500', 'no', 'yes')\";".      $r->print ('<a name="'.$anchor.'"></a>');
    " TARGET=_self>$listname</a> ");              $r->print ('<a href="#" onclick="document.dirpath'.($dnum-1).'.submit()">');
               $r->print ('<img src="'.$iconpath.'arrow.'.($nowOpen ? "open" : "closed" ).
  $r->print (" (<a href=\"javascript:openWindow('".$filelink.                         '.gif" class="LC_fileicon"');
    ".meta', 'metadatafile', '400', '450', 'no', 'yes')\"; ".      $r->print (' alt="'.$msg.'" /></a>'.
    "TARGET=_self>metadata</a>) ") if ($metafile == 1);         "\n");
    }
   # Filetype icons
    $r->print("<img alt=\"\" src='$iconname' class='LC_fileicon' />\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("</td>\n");   $r->print("</td>\n");
   # Wishlistlink
           $r->print('<td><a href="javascript:;" title="'.&mt('Set a link for this resource to wishlist').'" '.
                     'onclick="set_wishlistlink('."'".&Apache::lonnet::gettitle($filelink).
                     "','$startdir$listname'".')">'.
                     '<img class="LC_icon" src="/res/adm/pages/wishlist.png" '.
                     'alt="'.&mt('set wishlistlink').'" style="width:22px;"/></a></td>');
  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=bottom> '.($title eq '' ? '&nbsp;' : $title).  
       ' </td>'."\n");        ' </td>'."\n");
  }   }
  $r->print('<td align=right valign=bottom> ',   $r->print('<td class="LC_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=bottom> '.   $r->print('<td class="LC_nobreak"> '.
   (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=bottom> '.   $r->print('<td class="LC_nobreak"> '.
   (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 class="LC_nobreak"> '.($author eq '' ? '&nbsp;' : $author).
     $r->print('<td valign=bottom> '.($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=bottom> '.($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=bottom> '.($lang eq '' ? '&nbsp;' : $lang).      $r->print('<td> '.($lang eq '' ? '&nbsp;' : $lang).
       " </td>\n");        " </td>\n");
  }   }
         if ($hash{'display_attrs_8'} == 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);  
                $output='<font size="-2">'.$output.'</font>';          for (qw(count course stdno avetries difficulty disc clear technical
    } elsif ($embstyle eq 'img') {              correct helpful depth)) {
                $output='<img src="'.$filelink.'" />';  
            } elsif ($filelink=~/^\/res\/(\w+)\/(\w+)\//) {              dynmetaprint($r,$filelink,$_);
                $output='<img src="http://'.          }
  $Apache::lonnet::hostname{&Apache::lonnet::homeserver($2,$1)}.  
                  '/cgi-bin/thumbnail.gif?url='.$filelink.'" />';      $r->print("&nbsp;</td>\n");
            }  
    $r->print('<td valign=bottom> '.($output eq '' ? '&nbsp;':$output).   }
       " </td>\n");   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>');
         }          }
  $r->print("</tr>\n");          
      
   
    if ($hash{'display_attrs_7'} == 1) {
   # Show resource
      my $output=&showpreview($filelink);
              $r->print('<td class="LC_fontsize_medium">'.($output eq '' ? '&nbsp;':$output).
         " </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(&Apache::loncommon::end_data_table_row());
   }
       
       
   
 # -- 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=bottom>");  #SB $r->print("<tr bgcolor=\"$fileclr\">$extrafield<td valign=$valign>");
           $r->print(&Apache::loncommon::start_data_table_row()); # SB: bgcolor suggestion: darkgrey ("LC_info_row"?!?)
   # $r->print('<tr class="LC_info_row">');
           $r->print($extrafield.'<td class="LC_middle LC_nobreak">');
  &begin_form ($r,$curdir);   &begin_form ($r,$curdir);
  my $indentm1 = $indent-1;   my $indentm1 = $indent-1;
  if ($indentm1 < 11 and $indentm1 > 0) {   my $count = 0;
     $r->print("<img src=",$iconpath,"whitespace",$indentm1,   while ($count < $indentm1) {
       ".gif border='0' />\n");      $r->print ('<img alt="" src="',$iconpath
  } else {                 ,'whitespace_21.gif" class="LC_icon" />');
     my $ten = int($indentm1/10.);              $count++;
     my $rem = $indentm1%10.0;   }
     my $count = 0;   $r->print ('<input type="hidden" name="acts" value="" />');
     while ($count < $ten) {   $r->print ('<a name="'.$anchor.'"></a>');
  $r->print ("<img src=",$iconpath          $r->print ('<a href="#" onclick="document.dirpath'.($dnum-1).'.submit()"><img src="'.$iconpath.
    ,"whitespace10.gif border='0' />\n");     'arrow.'.($nowOpen ? "open" : "closed" ).'.gif"');
  $count++;   $r->print (' alt="'.$msg.'" class="LC_fileicon" /></a>'.
     }  
     $r->print ("<img src=",$iconpath,"whitespace",$rem,  
        ".gif border='0' />\n") if $rem > 0;  
  }  
  $r->print ('<input type="hidden" name="acts" value="">');  
  $r->print ('<a name="'.$anchor.'"><input src="'.$iconpath.  
    'folder_pointer_'.$diropen.'.gif"');  
  $r->print (' name="'.$msg.'" height="22" type="image" border="0">'.  
    "\n");  
  $r->print ('<a href="javascript:gothere(\''.$curdir.'\')"><img src="'.  
    $iconpath.'folder_'.$diropen.'.gif" border="0" /></a>'.  
    "\n");     "\n");
  $r->print ("$listname$tabtag</tr></form>\n");   my $quotable_curdir = &Apache::loncommon::escape_single($curdir);
           
           my $location = &Apache::loncommon::lonhttpdurl("/adm/lonIcons");
    my $icon = "navmap.folder.".($nowOpen ? "open":"closed").'.gif';
           $r->print ('<a href="javascript:gothere('
                     ."'$quotable_curdir'".');">'
                     .'<img class="LC_fileicon" alt="'.&mt('Open Folder').'" src="'
                     .$location.'/'.$icon.'" />'
                     ."\n");
    $r->print ("$listname</a></form>");
   # Wishlistlink
           $r->print('</td><td><a href="javascript:;" '.
                     'title="'.&mt('Set a link for this folder to wishlist').'" '.
                     'onclick="set_wishlistlink('."'$listname','$startdir$listname'".')">'.
                     '<img class="LC_icon" src="/res/adm/pages/wishlist.png" '.
                     'alt="'.&mt('set wishlistlink').'" style="width:22px;"/></a></td>');
   # 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 class="LC_right"> ',
     $filecom[8]," </td>\n") 
       if $hash{'display_attrs_1'} == 1;
    $r->print('<td class="LC_break"> '.
                     (&Apache::lonlocal::locallocaltime($filecom[9]))." </td>\n")
       if $hash{'display_attrs_2'} == 1;
    $r->print('<td class="LC_break"> '.
                     (&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_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(&Apache::loncommon::end_data_table_row());
       }
   
   }
   
   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);
             }
          }
       } 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 943  sub setvalues { Line 1461  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.61  
changed lines
  Added in v.1.211


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.