Diff for /loncom/interface/lonindexer.pm between versions 1.136 and 1.217

version 1.136, 2005/07/08 10:39:49 version 1.217, 2012/08/25 19:22:59
Line 34 Line 34
 ## 1. Description of functions                                               ##  ## 1. Description of functions                                               ##
 ## 2. Modules used by this module                                            ##  ## 2. Modules used by this module                                            ##
 ## 3. Choices for different output views (detailed, summary, xml, etc)       ##  ## 3. Choices for different output views (detailed, summary, xml, etc)       ##
 ## 4. BEGIN block (to be run once after compilation)                         ##  ## 4. Handling routine called via Apache and mod_perl                        ##
 ## 5. Handling routine called via Apache and mod_perl                        ##  ## 5. Other subroutines                                                      ##
 ## 6. Other subroutines                                                      ##  
 ##                                                                           ##  ##                                                                           ##
 ###############################################################################  ###############################################################################
   
Line 53  use Apache::lonmeta; Line 52  use Apache::lonmeta;
 use Apache::File;  use Apache::File;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonsource();  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; # global 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 %dynhash; # hash of hashes for dynamic metadata  my %dynhash; # hash of hashes for dynamic metadata
 my %dynread; # hash of directories already read for dynamic metadata  my %dynread; # hash of directories already read for dynamic metadata
 my %fieldnames; # Metadata fieldnames  my %fieldnames; # Metadata fieldnames
Line 102  sub handler { Line 102  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
Line 116  sub handler { Line 116  sub handler {
     my $closebutton='';      my $closebutton='';
     my $groupimportbutton='';      my $groupimportbutton='';
     my $colspan='';       my $colspan=''; 
       
     $extrafield='';      $extrafield='';
     my $diropendb =       my $diropendb = LONCAPA::tempdir() .
  "/home/httpd/perl/tmp/$env{'user.domain'}_$env{'user.name'}_indexer.db";   "$env{'user.domain'}_$env{'user.name'}_sel_res.db";
     %hash = ();      %hash = ();
     {      {
  my %dbfile;   my %dbfile;
  if (tie(%dbfile,'GDBM_File',$diropendb,&GDBM_READER(),0640)) {   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)) {      while(my($key,$value)=each(%dbfile)) {
  $hash{$key}=$value;   $hash{$key}=$value;
     }      }
     untie(%dbfile);      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);
    }
       
     {      {
  if ($env{'form.launch'} eq '1') {  
     &start_fresh_session();  
    }  
   #Hijack lonindexer to verify a title and be close down.    #Hijack lonindexer to verify a title and be close down.
    if ($env{'form.launch'} eq '2') {     if ($env{'form.launch'} eq '2') {
        &Apache::loncommon::content_type($r,'text/html');         &Apache::loncommon::content_type($r,'text/html');
Line 145  sub handler { Line 150  sub handler {
    $verify_title=~s/'/\\'/g;     $verify_title=~s/'/\\'/g;
    $extra='window.opener.document.forms["'.$env{'form.form'}.'"].elements["'.$env{'form.titleelement'}.'"].value=\''.$verify_title.'\';';     $extra='window.opener.document.forms["'.$env{'form.form'}.'"].elements["'.$env{'form.titleelement'}.'"].value=\''.$verify_title.'\';';
        }         }
        my $html=&Apache::lonxml::xmlbegin();         my $js = <<ENDSUBM;
        $r->print(<<ENDSUBM);  
    $html  
      <!-- Generated by lonindexer.pm -->  
      <head>  
        <script type="text/javascript">         <script type="text/javascript">
  function load() {   function load() {
  window.opener.document.forms["$env{'form.form'}"]   window.opener.document.forms["$env{'form.form'}"]
Line 159  sub handler { Line 160  sub handler {
  window.close();   window.close();
  }   }
           </script>            </script>
      </head>  
     <body onLoad="load();">  
       </body>  
     </html>  
 ENDSUBM  ENDSUBM
          $r->print(&Apache::loncommon::start_page(undef,$js,
    {'only_body'   =>1,
                                                    'add_modal' => 1,
                                                    'add_wishlist' => 1,
    'add_entries' =>
        {'onload' => "load();"},}
    ).
    &Apache::loncommon::end_page());
        return OK;         return OK;
    }     }
           
Line 172  ENDSUBM Line 177  ENDSUBM
   
 # --------------------- 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');              my $cl=&mt('Close');
             $closebutton=<<END;              $closebutton=<<END;
 <input type="button" name="close" value='$cl' 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 $cl=&mt('Close');
             my $gi=&mt('Import');              my $gi=&mt('Import');
             $closebutton=<<END;              $closebutton=<<END;
 <input type="button" name="close" value='$cl' 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='$gi'  <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 231  END Line 238  END
 # ------ 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 242  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";
Line 269  END Line 276  END
 function select_data(url) {  function select_data(url) {
    var location = "/res/?launch=2&form=$form&element=$element&titleelement=$titleelement&acts=" + url;     var location = "/res/?launch=2&form=$form&element=$element&titleelement=$titleelement&acts=" + url;
    window.location=location;     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 311  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 329  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 346  function queue(val) { Line 354  function queue(val) {
 END  END
  }   }
   
           my $inhibit_menu = "+'&".&Apache::loncommon::inhibit_menu_check()."'";
 # ---------------------------------------------------------------- Print Header  # ---------------------------------------------------------------- Print Header
  my $html='<html>';#&Apache::lonxml::xmlbegin();          
  $r->print(<<ENDHEADER);   my $js = <<"ENDHEADER";
 $html  
 <head>  
 <title>The LearningOnline Network With CAPA Directory Browser</title>  
   
 <!-- Generated by lonindexer.pm -->  
   
 <script type="text/javascript">  <script type="text/javascript">
 $catalogmodefunctions  // <![CDATA[
   $catalogmodefunctions;
   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) {  function openWindow(url, wdwName, w, h, toolbar,scrollbar,locationbar) {
     var xpos = (screen.width-w)/2;      var xpos = (screen.width-w)/2;
     xpos = (xpos < 0) ? '0' : xpos;      xpos = (xpos < 0) ? '0' : xpos;
Line 368  function openWindow(url, wdwName, w, h, Line 402  function openWindow(url, wdwName, w, h,
     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
 my ($headerdom)=($uri=~/^\/res\/(\w+)\//);  
 $r->print(&Apache::loncommon::bodytag('Browse Resources',undef,undef,undef,          my ($headerdom)=($uri=~m{^/res/($match_domain)/});
       $headerdom));  
 # - Evaluate actions from previous page (both cumulatively and chronologically)          if ($env{'form.catalogmode'}) {
         if ($env{'form.catalogmode'} eq 'groupimport') {              # "Popup mode"
     my $acts=$env{'form.acts'};              $r->print(&Apache::loncommon::start_page('Browse published resources',$js,
     my @Acts=split(/b/,$acts);                                                       {'only_body' => 1, 'add_wishlist'=>1, 'add_modal' =>1, 
     my %ahash;                                                        'domain' => $headerdom,}));
     my %achash;          } else {
     my $ac=0;              # Only display page header and breadcrumbs in non-popup mode
     # some initial hashes for working with data              &Apache::lonhtmlcommon::clear_breadcrumbs();
     foreach (@Acts) {              &Apache::lonhtmlcommon::add_breadcrumb({
  my ($state,$ref)=split(/a/);                  'text'  => 'Browse published resources',
  $ahash{$ref}=$state;                  'href'  => '/res/'.$headerdom.'/?launch=1',
  $achash{$ref}=$ac;              });
  $ac++;              $r->print(&Apache::loncommon::start_page('Browse published resources',$js,
     }                                                       {'domain' => $headerdom,})
     # sorting through the actions and changing the global database hash                       .&Apache::lonhtmlcommon::breadcrumbs()
     foreach (sort {$achash{$a}<=>$achash{$b}} (keys %ahash)) {              );
  my $key=$_;          }
  if ($ahash{$key} eq '1') {  
     $hash{'store_'.$hash{'pre_'.$key.'_link'}}=  # ---------------------------------- get state of file types to be showing
  $hash{'pre_'.$key.'_title'};   if ($env{'form.only'}) {
     $hash{'storectr_'.$hash{'pre_'.$key.'_link'}}=      $typeselect = $env{'form.only'};
  $hash{'storectr'}+0;   } else {
     $hash{'storectr'}++;      $typeselect = '';
  }  
  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'}) {   if ($env{'form.attrs'}) {
     for (my $i=0; $i<=11; $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';
Line 430  $r->print(&Apache::loncommon::bodytag('B Line 447  $r->print(&Apache::loncommon::bodytag('B
  }   }
     }      }
  } else {   } else {
     for (my $i=0; $i<=11; $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
 #                                 All versions has to the last item  #                                 All versions has to the last item
 #                                 since it does not take an extra col  #                                 since it does not take an extra col
  my %lt=&Apache::lonlocal::texthash(   my %lt=&Apache::lonlocal::texthash(
    'ti' => 'Title',  
    'si' => 'Size',  
    'la' => 'Last access',  
    'lm' => 'Last modified',  
    'st' => 'Statistics',  
    'au' => 'Author',  
    'kw' => 'Keywords',  
    'ln' => 'Language',  
    'sa' => 'Source Available',  
    'sr' => 'Show resource',  
    'li' => 'Linked/Related Resources',  
    'av' => 'All versions',     'av' => 'All versions',
    'ud' => 'Update Display'     'ud' => 'Update Display',
      'pr' => 'Problems',
      'gr' => 'Graphics',
      'at' => 'All types',
      'hd' => 'Display Options'
    );     );
  $r->print(<<END);          my @disp_order = ('0','4','5','6','13','1','2','3','10','14','8','11','7','12','15','16');
 <form method="post" name="fileattr" action="$uri"          my %disp_options = &Apache::lonlocal::texthash (
  enctype="application/x-www-form-urlencoded">                                0  => 'Title',
 <label><input type="checkbox" name="attr9" value="1" $attrchk[9] onClick="this.form.submit();" /> $lt{'av'}</label>                                4  => 'Author',
 <table border="0">                                5  => 'Keywords',
 <tr>                                6  => 'Language',
 <td><label><input type="checkbox" name="attr0" value="1" $attrchk[0] onClick="this.form.submit();" /> $lt{'ti'}</label></td>                                13 => 'Notes',
 <td><label><input type="checkbox" name="attr4" value="1" $attrchk[4] onClick="this.form.submit();" /> $lt{'au'}</label></td>                                1  => 'Size',
 <td><label><input type="checkbox" name="attr5" value="1" $attrchk[5] onClick="this.form.submit();" /> $lt{'kw'}</label></td>                                2  => 'Last access',
 <td><label><input type="checkbox" name="attr6" value="1" $attrchk[6] onClick="this.form.submit();" /> $lt{'ln'}</label></td>                                3  => 'Last modified',
 </tr>                                10 => 'Source Available',
 <tr>                                14 => 'Abstract',
 <td><label><input type="checkbox" name="attr1" value="1" $attrchk[1] onClick="this.form.submit();" /> $lt{'si'}</label></td>                                8  => 'Statistics',
 <td><label><input type="checkbox" name="attr2" value="1" $attrchk[2] onClick="this.form.submit();" /> $lt{'la'}</label></td>                                11 => 'Linked/Related Resources',
 <td><label><input type="checkbox" name="attr3" value="1" $attrchk[3] onClick="this.form.submit();" /> $lt{'lm'}</label></td>                                7  => 'Show resource',
 <td><label><input type="checkbox" name="attr10" value="1" $attrchk[10] onClick="this.form.submit();" /> $lt{'sa'}</label></td>                                12 => 'Subject',
 </tr>                                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>  <tr>
 <td><label><input type="checkbox" name="attr8" value="1" $attrchk[8] onClick="this.form.submit();" /> $lt{'st'}</label></td>  <td style="font-style: italic; border-top: 1px solid black; padding-top: 6px"> 
 <td><label><input type="checkbox" name="attr11" value="1" $attrchk[11] onClick="this.form.submit();" /> $lt{'li'}</label></td>  <label><input type="checkbox" name="attr9" value="1" $attrchk[9] onclick="this.form.submit();" /> $lt{'av'}</label>
 <td><label><input type="checkbox" name="attr7" value="1" $attrchk[7] onClick="this.form.submit();" /> $lt{'sr'}</label></td>  </td>
 <td>&nbsp;</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>  </tr>
 </table>  </table>
 <input type="hidden" name="attrs" value="1" />  <input type="hidden" name="attrs" value="1" />
   </fieldset>
 <input type="submit" name="updatedisplay" value="$lt{'ud'}" />  <input type="submit" name="updatedisplay" value="$lt{'ud'}" />
 <input type="hidden" name="acts" value="" />  <input type="hidden" name="acts" value="" />
 $closebutton $groupimportbutton  $closebutton $groupimportbutton
 END  END
           $r->print(&Apache::loncommon::inhibit_menu_check('input'));
      
 # -------------- Filter out sequence containment in crumbs and "recent folders"  # -------------- Filter out sequence containment in crumbs and "recent folders"
  my $storeuri=$uri;   my $storeuri=$uri;
  $storeuri='/'.(split(/\.(page|sequence)\/\//,$uri))[-1];   $storeuri='/'.(split(/\.(page|sequence)\/\//,$uri))[-1];
  $storeuri=~s/\/+/\//g;   $storeuri=~s/\/+/\//g;
 # ---------------------------------------------------------------- Bread crumbs  # ---------------------------------------------------------------- Bread crumbs
         $r->print(&Apache::lonhtmlcommon::crumbs($storeuri,'','',          $r->print(
  (($env{'form.catalogmode'} eq 'groupimport')?              '<p>'
  'document.forms.fileattr':'')).             .&Apache::lonhtmlcommon::crumbs(
   &Apache::lonhtmlcommon::select_recent('residx','resrecent',                  $storeuri,
 '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();'));                  '',
                   '',
                   (($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  # -------------------------------------------------------- Resource Home Button
  my $reshome=$env{'course.'.$env{'request.course.id'}.'.reshome'};   my $reshome=$env{'course.'.$env{'request.course.id'}.'.reshome'};
  if ($reshome) {   if ($reshome) {
     $r->print("<font size='+2'><a href='");      $r->print("<span class=\"LC_fontsize_large\"><a href='");
     if ($env{'form.catalogmode'} eq 'groupimport') {      if ($env{'form.catalogmode'} eq 'import') {
  $r->print('javascript:document.forms.fileattr.action="'.$reshome.'";document.forms.fileattr.submit();');   $r->print('javascript:document.forms.fileattr.action="'.&Apache::loncommon::inhibit_menu_check($reshome).'";document.forms.fileattr.submit();');
     } else {      } else {
  $r->print($reshome);   $r->print($reshome);
     }      }
     $r->print("'>".&mt('Home').'</a></font>');      $r->print("'>".&mt('Home').'</a></span>');
  }   }
  $r->print('</form>');   $r->print('</form>');
 # ------------------------------------------------------ Remember where we were  # ------------------------------------------------------ Remember where we were
  &Apache::loncommon::storeresurl($storeuri);   &Apache::loncommon::storeresurl($storeuri);
  &Apache::lonhtmlcommon::store_recent('residx',$storeuri,$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('<table width="100%" border="0"><tr><td bgcolor="#777777">'."\n");          $r->print(&Apache::loncommon::start_data_table("LC_tableBrowseRes")
  $r->print('<table width="100%" border="0"><tr bgcolor="'.$titleclr.'">'."\n");                   .&Apache::loncommon::start_data_table_header_row());
  $r->print("<td $colspan><b>".&mt('Name')."</b></td>\n");   $r->print("<th $colspan>".&mt('Name')."</th>\n");
  $r->print("<td><b>".&mt('Title')."</b></td>\n")    $r->print("<th></th>\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>".&mt("Size")." (".&mt("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>".&mt("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>".&mt("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>".&mt("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>".&mt("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>".&mt("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>".&mt("Usage Statistics")." <br />(".   $r->print("<th>".&mt("Usage Statistics")." <br />(".
   &mt("Courses/Network Hits").")</b> ".&mt('updated periodically')."</td>\n")    &mt("Courses/Network Hits").") ".&mt('updated periodically')."</th>\n")
     if ($hash{'display_attrs_8'} == 1);      if ($hash{'display_attrs_8'} == 1);
  $r->print("<td><b>".&mt("Source Available")."</b></td>\n")   $r->print("<th>".&mt("Source Available")."</th>\n")
     if ($hash{'display_attrs_10'} == 1);      if ($hash{'display_attrs_10'} == 1);
  $r->print("<td><b>".&mt("Linked/Related Resources")."</b></td>\n")   $r->print("<th>".&mt("Linked/Related Resources")."</th>\n")
     if ($hash{'display_attrs_11'} == 1);      if ($hash{'display_attrs_11'} == 1);
  $r->print("<td><b>".&mt("Resource")."</b></td>\n")   $r->print("<th>".&mt("Resource")."</th>\n")
     if ($hash{'display_attrs_7'} == 1);      if ($hash{'display_attrs_7'} == 1);
  $r->print('</tr>');   $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 588  END Line 677  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");
     }      }
     if(! $c->aborted()) {      if(! $c->aborted()) {
 # write back into the temporary file  # write back into the temporary file
Line 631  sub scanDir { Line 719  sub scanDir {
  next if($strip =~ /.*\.meta$/ | $obs eq '1');   next if($strip =~ /.*\.meta$/ | $obs eq '1');
  my (@fileparts) = split(/\./,$strip);   my (@fileparts) = split(/\./,$strip);
  if ($hash{'display_attrs_9'} != 1) {   if ($hash{'display_attrs_9'} != 1) {
 # if not all versions to be shown              # 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;
Line 669  sub scanDir { Line 757  sub scanDir {
 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.updatedisplay'}) {
  foreach (keys %hash) {   foreach (keys %hash) {
Line 687  sub get_list { Line 777  sub get_list {
  $uri=~s/\/+/\//g;   $uri=~s/\/+/\//g;
  foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$uri))) {   foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$uri))) {
     my @ratpart=split(/\:/,$_);      my @ratpart=split(/\:/,$_);
     push @list,$ratpart[1];      push(@list,&LONCAPA::map::qtescape($ratpart[1]));
  }    } 
  $hash{'dirlist_files_'.$luri} = join("\n",@list);   $hash{'dirlist_files_'.$luri} = join("\n",@list);
     } else {      } else {
 # is really a directory  # is really a directory
  @list = &Apache::lonnet::dirlist($uri);   (my $listref,$listerror) = &Apache::lonnet::dirlist($uri);
           if (ref($listref) eq 'ARRAY') {
               @list = @{$listref};
           }
  $hash{'dirlist_files_'.$luri} = join("\n",@list);   $hash{'dirlist_files_'.$luri} = join("\n",@list);
  $hash{'dirlist_timestamp_files_'.$luri} = time;   $hash{'dirlist_timestamp_files_'.$luri} = time;
     }      }
     return @list=&match_ext($r,@list);  #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') || ($listerror eq 'no_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);    
 }  }
   
 sub dynmetaread {  sub dynmetaread {
Line 714  sub dynmetaread { Line 814  sub dynmetaread {
  }   }
 # Actually get the data  # Actually get the data
  %dynhash=   %dynhash=
     (%dynhash,&Apache::lonmeta::get_dynamic_metadata_from_sql($uri));      (%dynhash,&Apache::lonmeta::get_dynamic_metadata_from_sql($uri.'/'));
 # Remember that we got it  # Remember that we got it
  $dynread{$uri}=1;   $dynread{$uri}=1;
     }       } 
 }  }
   
 sub initdebug {  sub initdebug {
     my $html=&Apache::lonxml::xmlbegin();      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 734  function output(text) { Line 837  function output(text) {
         debuggingWindow.document.writeln(text);          debuggingWindow.document.writeln(text);
     }      }
 }  }
 output('$html<head><title>Debugging Window</title><!-- for lonindexer.pm --></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 789  sub display_line { Line 892  sub display_line {
  $pathprefix=$startdir;   $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);
Line 798  sub display_line { Line 901  sub display_line {
     my $fnptr = $filecom[3]&$dirptr;      my $fnptr = $filecom[3]&$dirptr;
     my $msg = &mt('View').' '.$filecom[0].' '.&mt('resources');      my $msg = &mt('View').' '.$filecom[0].' '.&mt('resources');
     $msg = &mt('Close').' '.$filecom[0].' '.&mt('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<=11) {      while ($i<=16) {
  $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');
Line 815  sub display_line { Line 920  sub display_line {
  $updir='/'.(split(/\.(page|sequence)\/\//,$startdir))[-1];   $updir='/'.(split(/\.(page|sequence)\/\//,$startdir))[-1];
  $updir=~s/\/+/\//g;   $updir=~s/\/+/\//g;
   
  $r->print("<tr valign='$valign' bgcolor=$fileclr>$extrafield");  #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("<td>\n");
  $r->print ('<form method="post" name="dirpathUP" action="'.$updir.   $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'));
    $r->print ('<input type="hidden" name="openuri" value="'.
    $startdir.'" />'."\n");     $startdir.'" />'."\n");
  $r->print ('<input type="hidden" name="acts" value="" />'."\n");          $r->print ('<input type="hidden" name="acts" value="" />'."\n");
  $r->print ('<input src="'.$iconpath.'arrow_up.gif"');   $r->print ('<a href="#" onclick="document.dirpathUP.submit()"><img src="'.$iconpath.'arrow.up.gif"');
  $r->print (' name="'.$msg.'" height="22" type="image" border="0" />'.   $r->print (' alt="'.$msg.'" class="LC_fileicon" />'.
    "\n");     "\n");
  $r->print(&mt("Up")."</form>$tabtag</tr>\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?  # 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]))); }
     if($filecom[15] ne '1') { return OK if (!&Apache::lonnet::allowed('bre',$pathprefix.$filecom[0])); }  
   
 # make absolute links appear on different background  # make absolute links appear on different background
     if ($absolute) { $fileclr='#ccdd99'; }  #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 valign='$valign' bgcolor=$fileclr>$extrafield");  #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>");   $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 ('<a href="#" onclick="document.dirpath'.($dnum-1).'.submit()"><img src="'.$iconpath.'arrow.'.($nowOpen ? "open" : "closed" ).'.gif"'); 
    $diropen.'.gif"');    $r->print (' alt="'.$msg.'" class="LC_fileicon" /></a>'.
  $r->print (' name="'.$msg.'" height="22" type="image" border="0" />'.  
    "\n");     "\n");
  my $quotable_filecom = &Apache::loncommon::escape_single($filecom[0]);   my $quotable_filecom = &Apache::loncommon::escape_single($filecom[0]);
  $r->print ('<a href="javascript:gothere(\''.$quotable_filecom.   $r->print ('<a href="javascript:gothere(\''.$quotable_filecom.
    '\')"><img src="'.$iconpath.'server.gif"');     '\')"><img alt="" src="'.$iconpath.'server.gif"');
  $r->print (' border="0" /></a>'."\n");   $r->print (' class="LC_fileicon" />'."\n");
  $r->print (&mt("Domain")." - $listname ");   $r->print (&mt("Domain")." - $listname </a>");
  if ($Apache::lonnet::domaindescription{$listname}) {   if (&Apache::lonnet::domain($listname,'description')) {
     $r->print("(".$Apache::lonnet::domaindescription{$listname}.      $r->print("<br />(".&Apache::lonnet::domain($listname,'description').
       ")");        ")");
  }   }
  $r->print ("</form>$tabtag</tr>\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 valign=$valign bgcolor=$fileclr>$extrafield");   # $r->print("<tr valign=$valign bgcolor=\"$fileclr\">$extrafield");
  $r->print("<td 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");
  my $quotable_curdir = &Apache::loncommon::escape_single($curdir);   my $quotable_curdir = &Apache::loncommon::escape_single($curdir);
  $r->print ('<a href="javascript:gothere(\''.$quotable_curdir   $r->print ('<a href="javascript:gothere(\''.$quotable_curdir
    .'\')"><img src='.     .'\')"><img alt="'.$msg.'" src="'.
    $iconpath.'quill.gif border="0" name="'.$msg.     $iconpath.'quill.gif" class="LC_fileicon" />');
    '" height="22" /></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.'</a>');
  if (defined($plainname) && $plainname) { $r->print(" ($plainname) "); }  
  $r->print ('</form>'.$tabtag.'</tr>'."\n");          if (defined($plainname) && $plainname) { $r->print(" ($plainname) "); }
  return OK;  # Wishlistlink
           $r->print('</form></td><td><a href="javascript:;" '.
                     'title="'.&mt('Save a link for this folder in your personal Stored Links repository').'" '.
                     'onclick="set_wishlistlink('."'$plainname','$startdir$listname'".')">'.
                     '<img class="LC_icon" src="/res/adm/pages/wishlist.png" '.
                     'alt="'.&mt('save in Stored Links').'" 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 '') or $absolute) {          if (($fnptr == 0 and $filecom[3] ne '') or $absolute) {
  my $filelink = $pathprefix.$filecom[0];              my $title;
  my @file_ext = split (/\./,$listname);              my $filelink = $pathprefix.$filecom[0];
  my $curfext = $file_ext[-1];              if ($hash{'display_attrs_0'} == 1) {
         if (@Omit) {                  $title = &Apache::lonnet::gettitle($filelink);
             foreach (@Omit) { return OK if ($curfext eq $_); }              }
         }              my @file_ext = split (/\./,$listname);
         if (@Only) {              my $curfext = $file_ext[-1];
             my $skip = 1;              if (@Omit) {
             foreach (@Only) { $skip = 0 if ($curfext eq $_); }                  foreach (@Omit) { return OK if (lc($curfext) eq $_); }
             return OK if ($skip > 0);              }
         }              if (@Only) {
  # Set the icon for the file                  my $skip = 1;
  my $iconname = &Apache::loncommon::icon($listname);                  foreach (@Only) { $skip = 0 if (lc($curfext) eq $_); }
  $r->print("<tr valign='$valign' bgcolor=$fileclr><td nowrap='nowrap' valign='top'>");                  return OK if ($skip > 0);
               }
               # Set the icon for the file
               my $iconname = &Apache::loncommon::icon($listname);
   #SB $r->print("<tr valign='$valign' bgcolor=\"$fileclr\">);
           $r->print(&Apache::loncommon::start_data_table_row()); #SB valign="$valign" ?!?
           $r->print('<td class="LC_middle LC_nobreak">');
   
         if ($env{'form.catalogmode'} eq 'interactive') {          if ($env{'form.catalogmode'} eq 'interactive') {
     my $quotable_filelink = &Apache::loncommon::escape_single($filelink);      my $quotable_filelink = &Apache::loncommon::escape_single($filelink);
             $r->print("<a href=\"javascript:select_data(\'",              $r->print("<a href=\"javascript:select_data(\'",
                       $quotable_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 nowrap>");      $r->print('</td><td class="LC_middle">');
  } elsif ($env{'form.catalogmode'} eq 'groupimport') {   } elsif ($env{'form.catalogmode'} eq 'import') {
     $r->print("<form name='form$fnum'>\n");      $r->print("<form name='form$fnum' action=''>\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("</form></td><td nowrap>");      $r->print('</form></td><td class="LC_middle">');
     $hash{"pre_${fnum}_link"}=$filelink;      $hash{"pre_${fnum}_link"}=$filelink;
       $hash{"pre_${fnum}_title"}=$title;
       if (!$hash{"pre_${fnum}_title"}) {
           $hash{"pre_${fnum}_title"} = 'Not_retrieved';
       }
      $fnum++;       $fnum++;
  }   }
 # Form to open or close sequences  # Form to open or close sequences
  if ($filelink=~/\.(page|sequence)$/) {   if ($filelink=~/\.(page|sequence)$/) {
     my $curdir = $startdir.$filecom[0].'/';      my $curdir = $startdir.$filecom[0].'/';
     my $anchor = $curdir;  
     $anchor =~ s/\///g;  
     &begin_form($r,$curdir);      &begin_form($r,$curdir);
     $indent--;      $indent--;
  }   }
 # General indentation  # General indentation
  if ($indent > 0 and $indent < 11) {  
     $r->print("<img src=",$iconpath,"whitespace",$indent,  
       ".gif border='0' />\n");  
  } elsif ($indent >0) {  
     my $ten = int($indent/10.);  
     my $rem = $indent%10.0;  
     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,  
       ".gif border='0' />\n") if $rem > 0;  
  }  
 # Sequence open/close icon  # Sequence open/close icon
  if ($filelink=~/\.(page|sequence)$/) {   if ($filelink=~/\.(page|sequence)$/) {
     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 ('<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>');
        'folder_pointer_'.$diropen.'.gif"');              $r->print ('<a href="#" onclick="document.dirpath'.($dnum-1).'.submit()">');
     $r->print (' name="'.$msg.'" height="22" type="image" border="0" />'.              $r->print ('<img src="'.$iconpath.'arrow.'.($nowOpen ? "open" : "closed" ).
                          '.gif" class="LC_fileicon"');
       $r->print (' alt="'.$msg.'" /></a>'.
        "\n");         "\n");
  }   }
 # Filetype icons  # Filetype icons
  $r->print("<img src='$iconname' border='0' />\n");   $r->print("<img alt=\"\" src='$iconname' class='LC_fileicon' />\n");
  my $quotable_filelink = &Apache::loncommon::escape_single($filelink);   my $quotable_filelink = &Apache::loncommon::escape_single($filelink);
   
    $r->print (" <a href=\"javascript:openMyModal('".$quotable_filelink."?inhibitmenu=yes',500,500,'yes');\">$listname</a> ");
  $r->print (" <a href=\"javascript:openWindow('".$quotable_filelink.   $quotable_filelink = &Apache::loncommon::escape_single($filelink.'.meta');
    "', 'previewfile', '450', '500', 'no', 'yes','yes')\";".   &Apache::loncommon::inhibit_menu_check(\$quotable_filelink);
    " TARGET=_self>$listname</a> ");   $r->print (" (<a href=\"javascript:openMyModal('".$quotable_filelink."?inhibitmenu=yes',500,500,'yes');\">".&mt('metadata')."</a>) ");
   
  $r->print (" (<a href=\"javascript:openWindow('".$quotable_filelink.  
    ".meta', 'metadatafile', '500', '550', 'no', 'yes','no')\"; ".  
    "TARGET=_self>metadata</a>) ");  
 # Close form to open/close sequence  # Close form to open/close sequence
  if ($filelink=~/\.(page|sequence)$/) {   if ($filelink=~/\.(page|sequence)$/) {
     $r->print('</form>');      $r->print('</form>');
  }   }
  $r->print("</td>\n");   $r->print("</td>\n");
   # Wishlistlink
           $r->print('<td><a href="javascript:;" title="'.&mt('Save a link for this resource in your personal Stored Links repository').'" '.
                     'onclick="set_wishlistlink('."'".&Apache::lonnet::gettitle($filelink).
                     "','$startdir$listname'".')">'.
                     '<img class="LC_icon" src="/res/adm/pages/wishlist.png" '.
                     'alt="'.&mt('save in Stored Links').'" style="width:22px;"/></a></td>');
  if ($hash{'display_attrs_0'} == 1) {   if ($hash{'display_attrs_0'} == 1) {
     my $title = &Apache::lonnet::gettitle($filelink,'title');  
     $r->print('<td> '.($title eq '' ? '&nbsp;' : $title).      $r->print('<td> '.($title eq '' ? '&nbsp;' : $title).
       ' </td>'."\n");        ' </td>'."\n");
  }   }
  $r->print('<td align=right> ',   $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> '.   $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> '.   $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');
     $r->print('<td> '.($author eq '' ? '&nbsp;' : $author).      $r->print('<td class="LC_nobreak"> '.($author eq '' ? '&nbsp;' : $author).
       " </td>\n");        " </td>\n");
  }   }
  if ($hash{'display_attrs_5'} == 1) {   if ($hash{'display_attrs_5'} == 1) {
Line 1010  sub display_line { Line 1131  sub display_line {
     $r->print('<td> '.($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');
Line 1022  sub display_line { Line 1142  sub display_line {
 # statistics  # statistics
     &dynmetaread($filelink);      &dynmetaread($filelink);
     $r->print("<td>");      $r->print("<td>");
     &dynmetaprint($r,$filelink,'count');  
     &dynmetaprint($r,$filelink,'course');          for (qw(count course stdno avetries difficulty disc clear technical
     &dynmetaprint($r,$filelink,'stdno');              correct helpful depth)) {
     &dynmetaprint($r,$filelink,'avetries');  
     &dynmetaprint($r,$filelink,'difficulty');              dynmetaprint($r,$filelink,$_);
     &dynmetaprint($r,$filelink,'disc');          }
     &dynmetaprint($r,$filelink,'clear');  
     &dynmetaprint($r,$filelink,'technical');  
     &dynmetaprint($r,$filelink,'correct');  
     &dynmetaprint($r,$filelink,'helpful');  
     &dynmetaprint($r,$filelink,'depth');  
     $r->print("&nbsp;</td>\n");      $r->print("&nbsp;</td>\n");
   
  }   }
Line 1041  sub display_line { Line 1157  sub display_line {
     if($source eq 'open') {      if($source eq 'open') {
  my $sourcelink = &Apache::lonsource::make_link($filelink,$listname);   my $sourcelink = &Apache::lonsource::make_link($filelink,$listname);
  my $quotable_sourcelink = &Apache::loncommon::escape_single($sourcelink);   my $quotable_sourcelink = &Apache::loncommon::escape_single($sourcelink);
    &Apache::loncommon::inhibit_menu_check(\$quotable_sourcelink);
  $r->print('<td>'."<a href=\"javascript:openWindow('"   $r->print('<td>'."<a href=\"javascript:openWindow('"
   .$quotable_sourcelink.    .$quotable_sourcelink.
   "', 'previewsource', '700', '700', 'no', 'yes','yes')\";".    "', 'previewsource', '700', '700', 'no', 'yes','yes');\"".
   " TARGET=_self>Yes</a> "."</td>\n");    " target=\"_self\">".&mt('Source Code')."</a> "."</td>\n");
     } else { #A cuddled else. :P      } else { #A cuddled else. :P
  $r->print("<td>&nbsp;</td>\n");   $r->print("<td>&nbsp;</td>\n");
     }      }
Line 1053  sub display_line { Line 1170  sub display_line {
 # links  # links
    &dynmetaread($filelink);     &dynmetaread($filelink);
    $r->print('<td>');     $r->print('<td>');
    &dynmetaprint($r,$filelink,'goto_list');     &coursecontext($r,$filelink);
    &dynmetaprint($r,$filelink,'comefrom_list');         for (qw(goto_list comefrom_list sequsage_list dependencies course_list)) {
    &dynmetaprint($r,$filelink,'sequsage_list');               dynmetaprint($r,$filelink,$_);
    &dynmetaprint($r,$filelink,'dependencies');         }
    $r->print('</td>');     $r->print('</td>');
         }          }
         if ($hash{'display_attrs_7'} == 1) {          
      
   
    if ($hash{'display_attrs_7'} == 1) {
 # Show resource  # Show resource
             my $output='';     my $output=&showpreview($filelink);
             my $embstyle=&Apache::loncommon::fileembstyle($curfext);             $r->print('<td class="LC_fontsize_medium">'.($output eq '' ? '&nbsp;':$output).
     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 {  
     $output=&Apache::lonnet::ssi_body($filelink);  
     if ($output=~/LONCAPAACCESSCONTROLERRORSCREEN/) {  
  $output='';  
     } else {  
  open(FH,">$cache");  
  print FH $output;  
  close(FH);  
     }  
  }  
  $output='<font size="-2">'.$output.'</font>';  
    } elsif ($embstyle eq 'img') {  
                $output='<img src="'.$filelink.'" />';  
            } elsif ($filelink=~/^\/res\/(\w+)\/(\w+)\//) {  
                $output='<img src="http://'.  
  $Apache::lonnet::hostname{&Apache::lonnet::homeserver($2,$1)}.  
                  '/cgi-bin/thumbnail.gif?url='.$filelink.'" />';  
            }  
    $r->print('<td> '.($output eq '' ? '&nbsp;':$output).  
       " </td>\n");        " </td>\n");
         }  
  $r->print("</tr>\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 $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>");  #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;  
     while ($count < $ten) {  
  $r->print ("<img src=",$iconpath  
    ,"whitespace10.gif border='0' />\n");  
  $count++;  
     }  
     $r->print ("<img src=",$iconpath,"whitespace",$rem,  
        ".gif border='0' />\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>');
    'folder_pointer_'.$diropen.'.gif"');          $r->print ('<a href="#" onclick="document.dirpath'.($dnum-1).'.submit()"><img src="'.$iconpath.
  $r->print (' name="'.$msg.'" height="22" type="image" border="0" />'.     'arrow.'.($nowOpen ? "open" : "closed" ).'.gif"');
    $r->print (' alt="'.$msg.'" class="LC_fileicon" /></a>'.
    "\n");     "\n");
  my $quotable_curdir = &Apache::loncommon::escape_single($curdir);   my $quotable_curdir = &Apache::loncommon::escape_single($curdir);
  $r->print ('<a href="javascript:gothere(\''          
    .$quotable_curdir.'\')"><img src="'.          my $location = &Apache::loncommon::lonhttpdurl("/adm/lonIcons");
    $iconpath.'folder_'.$diropen.'.gif" border="0" /></a>'.   my $icon = "navmap.folder.".($nowOpen ? "open":"closed").'.gif';
    "\n");          $r->print ('<a href="javascript:gothere('
  $r->print ("$listname</td>\n");                    ."'$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('Save a link for this folder in Stored Links').'" '.
                     'onclick="set_wishlistlink('."'$listname','$startdir$listname'".')">'.
                     '<img class="LC_icon" src="/res/adm/pages/wishlist.png" '.
                     'alt="'.&mt('save in Stored Links').'" style="width:22px;"/></a></td>');
 # Attributes  # Attributes
  my $filelink = $startdir.$filecom[0].'/default';   my $filelink = $startdir.$filecom[0].'/default';
   
  if ($hash{'display_attrs_0'} == 1) {   if ($hash{'display_attrs_0'} == 1) {
     my $title = &Apache::lonnet::gettitle($filelink,'title');      my $title = &Apache::lonnet::gettitle($filelink);
     $r->print('<td> '.($title eq '' ? '&nbsp;' : $title).      $r->print('<td> '.($title eq '' ? '&nbsp;' : $title).
       ' </td>'."\n");        ' </td>'."\n");
  }   }
  $r->print('<td align=right> ',   $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> '.   $r->print('<td class="LC_break"> '.
   (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> '.   $r->print('<td class="LC_break"> '.
   (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) {
Line 1164  sub display_line { Line 1295  sub display_line {
     $r->print('<td> '.($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) {
    $r->print('<td>&nbsp;</td>');     $r->print('<td>&nbsp;</td>');
  }   }
   if ($hash{'display_attrs_10'} == 1) {    if ($hash{'display_attrs_10'} == 1) {
    $r->print('<td>&nbsp;</td>');     $r->print('<td>&nbsp;</td>');
  }   }
  if ($hash{'display_attrs_11'} == 1) {  
    $r->print('<td>&nbsp;</td>');  
  }  
  if ($hash{'display_attrs_7'} == 1) {   if ($hash{'display_attrs_7'} == 1) {
    $r->print('<td>&nbsp;</td>');     $r->print('<td>&nbsp;</td>');
         }      }     
  $r->print('</form></tr>');      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 {  sub dynmetaprint {
     my ($r,$filelink,$item)=@_;      my ($r,$filelink,$item)=@_;
     if ($dynhash{$filelink}->{$item}) {      if ($dynhash{$filelink}->{$item}) {
  $r->print("\n<br />".$fieldnames{$item}.': '.   $r->print("\n<br />".$fieldnames{$item}.': '.
   &Apache::lonmeta::prettyprint($item,    &Apache::lonmeta::prettyprint($item,
  $dynhash{$filelink}->{$item},   $dynhash{$filelink}->{$item},
   (($env{'form.catalogmode'} ne 'groupimport')?'preview':''),    (($env{'form.catalogmode'} ne 'import')?'preview':''),
   '',    '',
   (($env{'form.catalogmode'} eq 'groupimport')?'document.forms.fileattr':''),1));    (($env{'form.catalogmode'} eq 'import')?'document.forms.fileattr':''),1));
     }      }
 }  }
   
Line 1197  sub dynmetaprint { Line 1413  sub dynmetaprint {
 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 1241  sub cleanup { Line 1460  sub cleanup {
     if (tied(%hash)){      if (tied(%hash)){
  &Apache::lonnet::logthis('Cleanup indexer: hash');   &Apache::lonnet::logthis('Cleanup indexer: hash');
     }      }
       return OK;
 }  }
   
   
Line 1267  This module enables a scheme of browsing Line 1487  This module enables a scheme of browsing
 This is part of the LearningOnline Network with CAPA project  This is part of the LearningOnline Network with CAPA project
 described at http://www.lon-capa.org.  described at http://www.lon-capa.org.
   
 =head1 BEGIN SUBROUTINE  
   
 This routine is only run once after compilation.  
   
 =over 4  
   
 =item *  
   
 Initializes %language hash table.  
   
 =back  
   
 =head1 HANDLER SUBROUTINE  =head1 HANDLER SUBROUTINE
   
 This routine is called by Apache and mod_perl.  This routine is called by Apache and mod_perl.

Removed from v.1.136  
changed lines
  Added in v.1.217


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.