Diff for /loncom/interface/lonindexer.pm between versions 1.89 and 1.137

version 1.89, 2004/01/29 00:45:12 version 1.137, 2005/11/14 23:17:12
Line 44  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::lonhtmlcommon();
   use Apache::lonsequence();
 use Apache::Constants qw(:common);  use Apache::Constants qw(:common);
 use Apache::lonmeta;  use Apache::lonmeta;
 use Apache::File;  use Apache::File;
 use Apache::lonlocal;  use Apache::lonlocal;
   use Apache::lonsource();
 use GDBM_File;  use GDBM_File;
   
 # ---------------------------------------- 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 %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 69  my @Only = (); Line 73  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;
Line 84  sub handler { Line 90  sub handler {
     # 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 112  sub handler { Line 119  sub handler {
   
     $extrafield='';      $extrafield='';
     my $diropendb =       my $diropendb = 
  "/home/httpd/perl/tmp/$ENV{'user.domain'}_$ENV{'user.name'}_indexer.db";   "/home/httpd/perl/tmp/$env{'user.domain'}_$env{'user.name'}_indexer.db";
     %hash = ();      %hash = ();
     {      {
  my %dbfile;   my %dbfile;
Line 124  sub handler { Line 131  sub handler {
  }   }
     }      }
     {      {
  if ($ENV{'form.launch'} eq '1') {   if ($env{'form.launch'} eq '1') {
     &start_fresh_session();      &start_fresh_session();
         }     }
     #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 $html=&Apache::lonxml::xmlbegin();
          $r->print(<<ENDSUBM);
      $html
        <!-- Generated by lonindexer.pm -->
        <head>
          <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>
        </head>
       <body onLoad="load();">
         </body>
       </html>
   ENDSUBM
          return OK;
      }
       
 # -------------------- refresh environment with user database values (in %hash)  # -------------------- refresh environment with user database values (in %hash)
  &setvalues(\%hash,'form.catalogmode',\%ENV,'form.catalogmode'   );   &setvalues(\%hash,'form.catalogmode',\%env,'form.catalogmode'   );
   
 # --------------------- define extra fields and buttons in case of special mode  # --------------------- define extra fields and buttons in case of special mode
  if ($ENV{'form.catalogmode'} eq 'interactive') {   if ($env{'form.catalogmode'} eq 'interactive') {
     $extrafield='<td bgcolor="'.$fileclr.'" valign="bottom">'.      $extrafield='<td bgcolor="'.$fileclr.'" valign="bottom">'.
  '<a name="$anchor"><img src="'.$iconpath.'whitespace1.gif"'.   '<a name="$anchor"><img src="'.$iconpath.'whitespace1.gif"'.
  ' border="0" /></td>';   ' border="0" /></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 'groupimport') {
     $extrafield='<td bgcolor="'.$fileclr.'" valign="bottom">'.      $extrafield='<td bgcolor="'.$fileclr.'" valign="bottom">'.
  '<a name="$anchor"><img src="'.$iconpath.'whitespace1.gif"'.   '<a name="$anchor"><img src="'.$iconpath.'whitespace1.gif"'.
  ' border="0" /></td>';   ' border="0" /></td>';
     $colspan=" colspan='2' ";      $colspan=" colspan='2' ";
     my $cl=&mt('Close');      my $cl=&mt('Close');
             my $gi=&mt('Group 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 164  END Line 204  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.titleelement',\%ENV,'form.titleelement');   &setvalues(\%hash,'form.titleelement',\%env,'form.titleelement');
  &setvalues(\%hash,'form.only'        ,\%ENV,'form.only'   );   &setvalues(\%hash,'form.only'        ,\%env,'form.only'   );
  &setvalues(\%hash,'form.omit'        ,\%ENV,'form.omit'   );   &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,$titleelement);   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'};      $titleelement = $env{'form.titleelement'};
  }   }
  &Apache::lonxml::debug("mode=$mode form=$form element=$element   #&Apache::lonxml::debug("mode=$mode form=$form element=$element titleelement=$titleelement");
                                 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 'groupimport') {
     # 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 207  END Line 246  END
                 $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 235  END Line 266  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;
     changeTitle(title);     window.location=location;
     self.close();  
 }  }
   
 function select_group() {  function select_group() {
     window.location="$location"+document.forms.fileattr.acts.value;      window.location="$location"+document.forms.fileattr.acts.value;
 }  }
Line 271  END Line 300  END
                 $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 300  function rep_dirpath(suffix,val) { Line 329  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 'groupimport') {
             $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 318  END Line 347  END
  }   }
   
 # ---------------------------------------------------------------- Print Header  # ---------------------------------------------------------------- Print Header
    my $html=&Apache::lonxml::xmlbegin();
  $r->print(<<ENDHEADER);   $r->print(<<ENDHEADER);
 <html>  $html
 <head>  <head>
 <title>The LearningOnline Network With CAPA Directory Browser</title>  <title>The LearningOnline Network With CAPA Directory Browser</title>
   
   <!-- Generated by lonindexer.pm -->
   
 <script type="text/javascript">  <script type="text/javascript">
 $catalogmodefunctions  $catalogmodefunctions
 function openWindow(url, wdwName, w, h, toolbar,scrollbar,locationbar) {  function openWindow(url, wdwName, w, h, toolbar,scrollbar,locationbar) {
Line 347  my ($headerdom)=($uri=~/^\/res\/(\w+)\// Line 379  my ($headerdom)=($uri=~/^\/res\/(\w+)\//
 $r->print(&Apache::loncommon::bodytag('Browse Resources',undef,undef,undef,  $r->print(&Apache::loncommon::bodytag('Browse Resources',undef,undef,undef,
       $headerdom));        $headerdom));
 # - Evaluate actions from previous page (both cumulatively and chronologically)  # - Evaluate actions from previous page (both cumulatively and chronologically)
         if ($ENV{'form.catalogmode'} eq 'groupimport') {          if ($env{'form.catalogmode'} eq 'groupimport') {
     my $acts=$ENV{'form.acts'};      my $acts=$env{'form.acts'};
     my @Acts=split(/b/,$acts);      my @Acts=split(/b/,$acts);
     my %ahash;      my %ahash;
     my %achash;      my %achash;
Line 389  $r->print(&Apache::loncommon::bodytag('B Line 421  $r->print(&Apache::loncommon::bodytag('B
  }   }
   
 # ---------------------------------- 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<=9; $i++) {      for (my $i=0; $i<=11; $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<=9; $i++) {      for (my $i=0; $i<=11; $i++) {
  $attrchk[$i] = 'checked' if $hash{'display_attrs_'.$i} == 1;   $attrchk[$i] = 'checked' if $hash{'display_attrs_'.$i} == 1;
     }      }
  }   }
Line 415  $r->print(&Apache::loncommon::bodytag('B Line 447  $r->print(&Apache::loncommon::bodytag('B
    'au' => 'Author',     'au' => 'Author',
    'kw' => 'Keywords',     'kw' => 'Keywords',
    'ln' => 'Language',     'ln' => 'Language',
      'sa' => 'Source Available',
    'sr' => 'Show resource',     'sr' => 'Show resource',
      'li' => 'Linked/Related Resources',
    'av' => 'All versions',     'av' => 'All versions',
    'ud' => 'Update Display'     'ud' => 'Update Display'
    );     );
         my $Displayfileattributes=&mt('Display file attributes');  
  $r->print(<<END);   $r->print(<<END);
 <form method="post" name="fileattr" action="$uri"  <form method="post" name="fileattr" action="$uri"
  enctype="application/x-www-form-urlencoded">   enctype="application/x-www-form-urlencoded">
 <b><font color="#666666">$Displayfileattributes</font></b><br />  <label><input type="checkbox" name="attr9" value="1" $attrchk[9] onClick="this.form.submit();" /> $lt{'av'}</label>
 <table border=0><tr>  <table border="0">
 <td><input type="checkbox" name="attr0" value="1" $attrchk[0] onClick="this.form.submit();" /> $lt{'ti'}</td>  <tr>
 <td><input type="checkbox" name="attr1" value="1" $attrchk[1] onClick="this.form.submit();" /> $lt{'si'}</td>  <td><label><input type="checkbox" name="attr0" value="1" $attrchk[0] onClick="this.form.submit();" /> $lt{'ti'}</label></td>
 <td><input type="checkbox" name="attr2" value="1" $attrchk[2] onClick="this.form.submit();" /> $lt{'la'}</td>  <td><label><input type="checkbox" name="attr4" value="1" $attrchk[4] onClick="this.form.submit();" /> $lt{'au'}</label></td>
 <td><input type="checkbox" name="attr3" value="1" $attrchk[3] onClick="this.form.submit();" /> $lt{'lm'}</td>  <td><label><input type="checkbox" name="attr5" value="1" $attrchk[5] onClick="this.form.submit();" /> $lt{'kw'}</label></td>
 <td><input type="checkbox" name="attr8" value="1" $attrchk[8] onClick="this.form.submit();" /> $lt{'st'}</td>  <td><label><input type="checkbox" name="attr6" value="1" $attrchk[6] onClick="this.form.submit();" /> $lt{'ln'}</label></td>
 </tr><tr>  </tr>
 <td><input type="checkbox" name="attr4" value="1" $attrchk[4] onClick="this.form.submit();" /> $lt{'au'}</td>  <tr>
 <td><input type="checkbox" name="attr5" value="1" $attrchk[5] onClick="this.form.submit();" /> $lt{'kw'}</td>  <td><label><input type="checkbox" name="attr1" value="1" $attrchk[1] onClick="this.form.submit();" /> $lt{'si'}</label></td>
 <td><input type="checkbox" name="attr6" value="1" $attrchk[6] onClick="this.form.submit();" /> $lt{'ln'}</td>  <td><label><input type="checkbox" name="attr2" value="1" $attrchk[2] onClick="this.form.submit();" /> $lt{'la'}</label></td>
 <td><input type="checkbox" name="attr7" value="1" $attrchk[7] onClick="this.form.submit();" /> $lt{'sr'}</td>  <td><label><input type="checkbox" name="attr3" value="1" $attrchk[3] onClick="this.form.submit();" /> $lt{'lm'}</label></td>
 <td><input type="checkbox" name="attr9" value="1" $attrchk[9] onClick="this.form.submit();" /> $lt{'av'}</td>  <td><label><input type="checkbox" name="attr10" value="1" $attrchk[10] onClick="this.form.submit();" /> $lt{'sa'}</label></td>
   </tr>
   <tr>
   <td><label><input type="checkbox" name="attr8" value="1" $attrchk[8] onClick="this.form.submit();" /> $lt{'st'}</label></td>
   <td><label><input type="checkbox" name="attr11" value="1" $attrchk[11] onClick="this.form.submit();" /> $lt{'li'}</label></td>
   <td><label><input type="checkbox" name="attr7" value="1" $attrchk[7] onClick="this.form.submit();" /> $lt{'sr'}</label></td>
 <td>&nbsp;</td>  <td>&nbsp;</td>
 </tr></table>  </tr>
   </table>
 <input type="hidden" name="attrs" value="1" />  <input type="hidden" name="attrs" value="1" />
 <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
   # -------------- Filter out sequence containment in crumbs and "recent folders"
    my $storeuri=$uri;
    $storeuri='/'.(split(/\.(page|sequence)\/\//,$uri))[-1];
    $storeuri=~s/\/+/\//g;
 # ---------------------------------------------------------------- Bread crumbs  # ---------------------------------------------------------------- Bread crumbs
         $r->print(&Apache::lonhtmlcommon::crumbs($uri,'','',          $r->print(&Apache::lonhtmlcommon::crumbs($storeuri,'','',
  (($ENV{'form.catalogmode'} eq 'groupimport')?   (($env{'form.catalogmode'} eq 'groupimport')?
  'document.forms.fileattr':'')).   'document.forms.fileattr':'')).
   &Apache::lonhtmlcommon::select_recent('residx','resrecent',    &Apache::lonhtmlcommon::select_recent('residx','resrecent',
 'this.form.action=this.form.resrecent.options[this.form.resrecent.selectedIndex].value;this.form.submit();').  '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();'));
   '</form>');  # -------------------------------------------------------- Resource Home Button
    my $reshome=$env{'course.'.$env{'request.course.id'}.'.reshome'};
    if ($reshome) {
       $r->print("<font size='+2'><a href='");
       if ($env{'form.catalogmode'} eq 'groupimport') {
    $r->print('javascript:document.forms.fileattr.action="'.$reshome.'";document.forms.fileattr.submit();');
       } else {
    $r->print($reshome);
       }
       $r->print("'>".&mt('Home').'</a></font>');
    }
    $r->print('</form>');
 # ------------------------------------------------------ Remember where we were  # ------------------------------------------------------ Remember where we were
  &Apache::loncommon::storeresurl($uri);   &Apache::loncommon::storeresurl($storeuri);
  &Apache::lonhtmlcommon::store_recent('residx',$uri,$uri);   &Apache::lonhtmlcommon::store_recent('residx',$storeuri,$storeuri);
 # ----------------- output starting row to the indexed file/directory hierarchy  # ----------------- output starting row to the indexed file/directory hierarchy
         my $titleclr="#ddffff";          my $titleclr="#ddffff";
 #        $r->print(&initdebug());          #$r->print(&initdebug());
 #        $r->print(&writedebug("Omit:@Omit")) if (@Omit);          #$r->print(&writedebug("Omit:@Omit")) if (@Omit);
 #        $r->print(&writedebug("Only:@Only")) if (@Only);          #$r->print(&writedebug("Only:@Only")) if (@Only);
         $r->print("<table width='100\%' border=0><tr><td bgcolor=#777777>\n");          $r->print('<table width="100%" border="0"><tr><td bgcolor="#777777">'."\n");
  $r->print("<table width='100\%' border=0><tr bgcolor=$titleclr>\n");   $r->print('<table width="100%" border="0"><tr bgcolor="'.$titleclr.'">'."\n");
  $r->print("<td $colspan><b>".&mt('Name')."</b></td>\n");   $r->print("<td $colspan><b>".&mt('Name')."</b></td>\n");
  $r->print("<td><b>".&mt('Title')."</b></td>\n")    $r->print("<td><b>".&mt('Title')."</b></td>\n") 
     if ($hash{'display_attrs_0'} == 1);      if ($hash{'display_attrs_0'} == 1);
Line 475  END Line 529  END
     if ($hash{'display_attrs_5'} == 1);      if ($hash{'display_attrs_5'} == 1);
  $r->print("<td><b>".&mt("Language")."</b></td>\n")   $r->print("<td><b>".&mt("Language")."</b></td>\n")
     if ($hash{'display_attrs_6'} == 1);      if ($hash{'display_attrs_6'} == 1);
  $r->print("<td><b>".&mt("Resource")."</b></td>\n")  
     if ($hash{'display_attrs_7'} == 1);  
  $r->print("<td><b>".&mt("Usage Statistics")." <br />(".   $r->print("<td><b>".&mt("Usage Statistics")." <br />(".
   &mt("Courses/Network Hits").")</b></td>\n")    &mt("Courses/Network Hits").")</b> ".&mt('updated periodically')."</td>\n")
     if ($hash{'display_attrs_8'} == 1);      if ($hash{'display_attrs_8'} == 1);
    $r->print("<td><b>".&mt("Source Available")."</b></td>\n")
       if ($hash{'display_attrs_10'} == 1);
    $r->print("<td><b>".&mt("Linked/Related Resources")."</b></td>\n")
       if ($hash{'display_attrs_11'} == 1);
    $r->print("<td><b>".&mt("Resource")."</b></td>\n")
       if ($hash{'display_attrs_7'} == 1);
  $r->print('</tr>');   $r->print('</tr>');
   
 # ----------------- read in what directories have previously been set to "open"  # ----------------- read in what directories have previously been set to "open"
Line 491  END Line 549  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 511  END Line 569  END
  my $indent = 0;   my $indent = 0;
  $uri = $uri.'/' if $uri !~ /.*\/$/;   $uri = $uri.'/' if $uri !~ /.*\/$/;
   
   if ($ENV{'form.dirPointer'} ne 'on') {    if ($env{'form.dirPointer'} ne 'on') {
      $hash{'top.level'} = $uri;       $hash{'top.level'} = $uri;
      $toplevel = $uri;       $toplevel = $uri;
   } else {    } else {
Line 533  END Line 591  END
   
 # ---------------------------- embed hidden information useful for group import  # ---------------------------- embed hidden information useful for group import
  $r->print("<form name='fnum'>");   $r->print("<form name='fnum'>");
  $r->print("<input type='hidden' name='fnum' value='$fnum'></form>");   $r->print("<input type='hidden' name='fnum' value='$fnum' /></form>");
   
 # -------------------------------------------------------------- end the tables  # -------------------------------------------------------------- end the tables
  $r->print('</table>');   $r->print('</table>');
Line 562  sub scanDir { Line 620  sub scanDir {
     my $c = $r->connection();      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) {
         return if ($c->aborted());          return if ($c->aborted());
  my ($strip,$dom,undef,$testdir,undef)=split(/\&/,$line,5);    #This is a kludge, sorry aboot this
  next if $strip =~ /.*\.meta$/;   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_9'} != 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;
Line 590  sub scanDir { Line 650  sub scanDir {
     $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 608  sub scanDir { Line 668  sub scanDir {
 # --------------- get complete matched list based on the uri (returns an array)  # --------------- get complete matched list based on the uri (returns an array)
 sub get_list {  sub get_list {
     my ($r,$uri)=@_;      my ($r,$uri)=@_;
     my @list;      my @list=();
     (my $luri = $uri) =~ s/\//_/g;      (my $luri = $uri) =~ s/\//_/g;
     if ($ENV{'form.updatedisplay'}) {      if ($env{'form.updatedisplay'}) {
  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,$ratpart[1];
    } 
    $hash{'dirlist_files_'.$luri} = join("\n",@list);
     } else {      } else {
   # is really a directory
  @list = &Apache::lonnet::dirlist($uri);   @list = &Apache::lonnet::dirlist($uri);
  $hash{'dirlist_files_'.$luri} = join("\n",@list);   $hash{'dirlist_files_'.$luri} = join("\n",@list);
    $hash{'dirlist_timestamp_files_'.$luri} = time;
     }      }
     return @list=&match_ext($r,@list);      return @list=&match_ext($r,@list);
 }  }
   
   sub dynmetaread {
       my $uri=shift;
       if (($hash{'display_attrs_8'}==1) || ($hash{'display_attrs_11'}==1)) {
   # We don't want the filename
    $uri=~s/\/[^\/]+$//;
   # Did we already see this?
    my $builddir=$uri;
    while ($builddir) {
       if ($dynread{$builddir}) {
    return 0;
       }
       $builddir=~s/\/[^\/]+$//;
    }
   # Actually get the data
    %dynhash=
       (%dynhash,&Apache::lonmeta::get_dynamic_metadata_from_sql($uri));
   # Remember that we got it
    $dynread{$uri}=1;
       } 
   }
   
 sub initdebug {  sub initdebug {
       my $html=&Apache::lonxml::xmlbegin();
     return <<ENDJS;      return <<ENDJS;
 <script>  <script>
 var debugging = true;  var debugging = true;
Line 638  function output(text) { Line 734  function output(text) {
         debuggingWindow.document.writeln(text);          debuggingWindow.document.writeln(text);
     }      }
 }  }
 output("<html><head><title>Debugging Window</title></head><body><pre>");     output('$html<head><title>Debugging Window</title><!-- for lonindexer.pm --></head><body><pre>');   
 </script>  </script>
 ENDJS  ENDJS
 }  }
Line 664  sub match_ext { Line 760  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 681  sub match_ext { Line 777  sub match_ext {
 sub display_line {  sub display_line {
     my ($r,$diropen,$line,$indent,$startdir,$hashref,@list)=@_;      my ($r,$diropen,$line,$indent,$startdir,$hashref,@list)=@_;
     my (@pathfn, $fndir);      my (@pathfn, $fndir);
   # there could be relative paths (files actually belonging into this directory)
   # or absolute paths (for example, from sequences)
       my $absolute;
       my $pathprefix;
       if ($line=~m|^/res/| && $startdir ne '') {
    $absolute=1;
    $pathprefix='';
       } else {
    $absolute=0;
    $pathprefix=$startdir;
       }
     my $dirptr=16384;      my $dirptr=16384;
     my $fileclr="#ffffe6";      my $fileclr="#ffffe6";
     my $iconpath= $r->dir_config('lonIconsURL') . '/';      my $iconpath= $r->dir_config('lonIconsURL') . '/';
Line 694  sub display_line { Line 801  sub display_line {
   
     my $tabtag='</td>';      my $tabtag='</td>';
     my $i=0;      my $i=0;
       while ($i<=11) {
     while ($i<=8) {  
  $tabtag=join('',$tabtag,"<td>&nbsp;</td>")   $tabtag=join('',$tabtag,"<td>&nbsp;</td>")
     if $hash{'display_attrs_'.$i} == 1;      if $hash{'display_attrs_'.$i} == 1;
  $i++;   $i++;
     }      }
   
     my $valign = ($hash{'display_attrs_7'} == 1 ? 'top' : 'bottom');      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') {
    my $updir=$startdir;
   # -------------- Filter out sequence containment in crumbs and "recent folders"
    $updir='/'.(split(/\.(page|sequence)\/\//,$startdir))[-1];
    $updir=~s/\/+/\//g;
   
  $r->print("<tr valign='$valign' bgcolor=$fileclr>$extrafield");   $r->print("<tr valign='$valign' bgcolor=$fileclr>$extrafield");
  $r->print("<td>\n");   $r->print("<td>\n");
  $r->print ('<form method="post" name="dirpathUP" action="'.$startdir.   $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 ('<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 ('<input src="'.$iconpath.'arrow_up.gif"');
  $r->print (' name="'.$msg.'" height="22" type="image" border="0">'.   $r->print (' name="'.$msg.'" height="22" type="image" border="0" />'.
    "\n");     "\n");
  $r->print(&mt("Up")." $tabtag</tr></form>\n");   $r->print(&mt("Up")."</form>$tabtag</tr>\n");
  return OK;   return OK;
     }      }
 # Do we have permission to look at this?  # Do we have permission to look at this?
   
     return OK if (!&Apache::lonnet::allowed('bre',$startdir.$filecom[0]));      if($filecom[15] ne '1') { return OK if (!&Apache::lonnet::allowed('bre',$pathprefix.$filecom[0])); }
   
   # make absolute links appear on different background
       if ($absolute) { $fileclr='#ccdd99'; }
   
 # display domain  # display domain
     if ($filecom[1] eq 'domain') {      if ($filecom[1] eq 'domain') {
   $r->print ('<input type="hidden" name="dirPointer" value="on">'."\n")    $r->print ('<input type="hidden" name="dirPointer" value="on" />'."\n")
      if ($ENV{'form.dirPointer'} eq "on");       if ($env{'form.dirPointer'} eq "on");
  $r->print("<tr valign='$valign' bgcolor=$fileclr>$extrafield");   $r->print("<tr valign='$valign' bgcolor=$fileclr>$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/\///g;
  $r->print ('<a name="'.$anchor.'">');   $r->print ('<a name="'.$anchor.'">');
  $r->print ('<input type="hidden" name="acts" value="">');   $r->print ('<input type="hidden" name="acts" value="" />');
  $r->print ('<input src="'.$iconpath.'folder_pointer_'.   $r->print ('<input src="'.$iconpath.'folder_pointer_'.
    $diropen.'.gif"');      $diropen.'.gif"'); 
  $r->print (' name="'.$msg.'" height="22" type="image" border="0">'.   $r->print (' name="'.$msg.'" height="22" type="image" border="0" />'.
    "\n");     "\n");
  $r->print ('<a href="javascript:gothere(\''.$filecom[0].   my $quotable_filecom = &Apache::loncommon::escape_single($filecom[0]);
    $r->print ('<a href="javascript:gothere(\''.$quotable_filecom.
    '\')"><img src="'.$iconpath.'server.gif"');     '\')"><img src="'.$iconpath.'server.gif"');
  $r->print (' border="0" /></a>'."\n");   $r->print (' border="0" /></a>'."\n");
  $r->print (&mt("Domain")." - $listname ");   $r->print (&mt("Domain")." - $listname ");
Line 749  sub display_line { Line 863  sub display_line {
     $r->print("(".$Apache::lonnet::domaindescription{$listname}.      $r->print("(".$Apache::lonnet::domaindescription{$listname}.
       ")");        ")");
  }   }
  $r->print (" $tabtag</tr></form>\n");   $r->print ("</form>$tabtag</tr>\n");
  return OK;   return OK;
   
 # display user directory  # display user directory
Line 763  sub display_line { Line 877  sub display_line {
  &begin_form ($r,$curdir);   &begin_form ($r,$curdir);
  $r->print ('<a name="'.$anchor.'"><img src="'.$iconpath.   $r->print ('<a name="'.$anchor.'"><img src="'.$iconpath.
    'whitespace1.gif" border="0" />'."\n");     'whitespace1.gif" border="0" />'."\n");
  $r->print ('<input type="hidden" name="acts" value="">');   $r->print ('<input type="hidden" name="acts" value="" />');
  $r->print ('<input src="'.$iconpath.'folder_pointer_'.$diropen.   $r->print ('<input src="'.$iconpath.'folder_pointer_'.$diropen.
    '.gif"');      '.gif"'); 
  $r->print (' name="'.$msg.'" height="22" type="image" border="0">'.   $r->print (' name="'.$msg.'" height="22" type="image" border="0" />'.
    "\n");     "\n");
  $r->print ('<a href="javascript:gothere(\''.$curdir.'\')"><img src='.   my $quotable_curdir = &Apache::loncommon::escape_single($curdir);
    $r->print ('<a href="javascript:gothere(\''.$quotable_curdir
      .'\')"><img src='.
    $iconpath.'quill.gif border="0" name="'.$msg.     $iconpath.'quill.gif border="0" name="'.$msg.
    '" height="22" /></a>');     '" 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);
  if (defined($plainname) && $plainname) { $r->print(" ($plainname) "); }   if (defined($plainname) && $plainname) { $r->print(" ($plainname) "); }
  $r->print ($tabtag.'</tr></form>'."\n");   $r->print ('</form>'.$tabtag.'</tr>'."\n");
  return OK;   return OK;
     }      }
   
 # display file  # display file
     if ($fnptr == 0 and $filecom[3] ne '') {      if (($fnptr == 0 and $filecom[3] ne '') or $absolute) {
  my $filelink = $startdir.$filecom[0];   my $filelink = $pathprefix.$filecom[0];
  next if &Apache::lonnet::metadata($filelink,'obsolete');  
  my @file_ext = split (/\./,$listname);   my @file_ext = split (/\./,$listname);
  my $curfext = $file_ext[-1];   my $curfext = $file_ext[-1];
         if (@Omit) {          if (@Omit) {
Line 795  sub display_line { Line 910  sub display_line {
         }          }
  # Set the icon for the file   # Set the icon for the file
  my $iconname = &Apache::loncommon::icon($listname);   my $iconname = &Apache::loncommon::icon($listname);
  $r->print("<tr valign='$valign' bgcolor=$fileclr><td nowrap>");   $r->print("<tr valign='$valign' bgcolor=$fileclr><td nowrap='nowrap' valign='top'>");
  my $metafile = grep /^\Q$filecom[0]\E\.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 src='",$iconpath,"select.gif' border='0' /></a>".
       "\n");        "\n");
     $r->print("</td><td nowrap>");      $r->print("</td><td nowrap>");
  }   } elsif ($env{'form.catalogmode'} eq 'groupimport') {
         elsif ($ENV{'form.catalogmode'} eq 'groupimport') {  
     $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("<form name='form$fnum'>\n");
     $r->print("<input type='checkbox' name='filelink"."' ".      $r->print("<input type='checkbox' name='filelink"."' ".
       "value='$filelink' onClick='".        "value='$filelink' onClick='".
Line 824  sub display_line { Line 927  sub display_line {
     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 nowrap>");
       "value='$titleesc'>\n");  
     $r->print("</form>\n");  
     $r->print("</td><td nowrap>");  
     $hash{"pre_${fnum}_link"}=$filelink;      $hash{"pre_${fnum}_link"}=$filelink;
     $hash{"pre_${fnum}_title"}=$titleesc;  
      $fnum++;       $fnum++;
  }   }
   # Form to open or close sequences
    if ($filelink=~/\.(page|sequence)$/) {
       my $curdir = $startdir.$filecom[0].'/';
       my $anchor = $curdir;
       $anchor =~ s/\///g;
       &begin_form($r,$curdir);
       $indent--;
    }
   # General indentation
  if ($indent > 0 and $indent < 11) {   if ($indent > 0 and $indent < 11) {
     $r->print("<img src=",$iconpath,"whitespace",$indent,      $r->print("<img src=",$iconpath,"whitespace",$indent,
       ".gif border='0' />\n");        ".gif border='0' />\n");
Line 849  sub display_line { Line 956  sub display_line {
     $r->print("<img src=",$iconpath,"whitespace",$rem,      $r->print("<img src=",$iconpath,"whitespace",$rem,
       ".gif border='0' />\n") if $rem > 0;        ".gif border='0' />\n") if $rem > 0;
  }   }
   # Sequence open/close icon
    if ($filelink=~/\.(page|sequence)$/) {
       my $curdir = $startdir.$filecom[0].'/';
       my $anchor = $curdir;
       $anchor =~ s/\///g;
       $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");
    }
   # Filetype icons
  $r->print("<img src='$iconname' border='0' />\n");   $r->print("<img src='$iconname' border='0' />\n");
  $r->print (" <a href=\"javascript:openWindow('".$filelink.   my $quotable_filelink = &Apache::loncommon::escape_single($filelink);
   
   
    $r->print (" <a href=\"javascript:openWindow('".$quotable_filelink.
    "', 'previewfile', '450', '500', 'no', 'yes','yes')\";".     "', 'previewfile', '450', '500', 'no', 'yes','yes')\";".
    " TARGET=_self>$listname</a> ");     " TARGET=_self>$listname</a> ");
   
  $r->print (" (<a href=\"javascript:openWindow('".$filelink.   $r->print (" (<a href=\"javascript:openWindow('".$quotable_filelink.
    ".meta', 'metadatafile', '500', '550', 'no', 'yes','no')\"; ".     ".meta', 'metadatafile', '500', '550', 'no', 'yes','no')\"; ".
    "TARGET=_self>metadata</a>) ") if ($metafile == 1);     "TARGET=_self>metadata</a>) ");
   # Close form to open/close sequence
    if ($filelink=~/\.(page|sequence)$/) {
       $r->print('</form>');
    }
  $r->print("</td>\n");   $r->print("</td>\n");
  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,'title');
  if ($metafile == 1);  
     $r->print('<td> '.($title eq '' ? '&nbsp;' : $title).      $r->print('<td> '.($title eq '' ? '&nbsp;' : $title).
       ' </td>'."\n");        ' </td>'."\n");
  }   }
Line 877  sub display_line { Line 1000  sub display_line {
     if $hash{'display_attrs_3'} == 1;      if $hash{'display_attrs_3'} == 1;
   
  if ($hash{'display_attrs_4'} == 1) {   if ($hash{'display_attrs_4'} == 1) {
     my $author = &Apache::lonnet::metadata($filelink,'author')      my $author = &Apache::lonnet::metadata($filelink,'author');
  if ($metafile == 1);  
     $r->print('<td> '.($author eq '' ? '&nbsp;' : $author).      $r->print('<td> '.($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> '.($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> '.($lang eq '' ? '&nbsp;' : $lang).      $r->print('<td> '.($lang eq '' ? '&nbsp;' : $lang).
       " </td>\n");        " </td>\n");
  }   }
    if ($hash{'display_attrs_8'} == 1) {
   # statistics
       &dynmetaread($filelink);
       $r->print("<td>");
       &dynmetaprint($r,$filelink,'count');
       &dynmetaprint($r,$filelink,'course');
       &dynmetaprint($r,$filelink,'stdno');
       &dynmetaprint($r,$filelink,'avetries');
       &dynmetaprint($r,$filelink,'difficulty');
       &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");
   
    }
    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);
    $r->print('<td>'."<a href=\"javascript:openWindow('"
     .$quotable_sourcelink.
     "', 'previewsource', '700', '700', 'no', 'yes','yes')\";".
     " TARGET=_self>Yes</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>');
      &dynmetaprint($r,$filelink,'goto_list');
      &dynmetaprint($r,$filelink,'comefrom_list');
      &dynmetaprint($r,$filelink,'sequsage_list');
      &dynmetaprint($r,$filelink,'dependencies');
      $r->print('</td>');
           }
         if ($hash{'display_attrs_7'} == 1) {          if ($hash{'display_attrs_7'} == 1) {
   # Show resource
             my $output='';              my $output='';
             my $embstyle=&Apache::loncommon::fileembstyle($curfext);              my $embstyle=&Apache::loncommon::fileembstyle($curfext);
     if ($embstyle eq 'ssi') {      if ($embstyle eq 'ssi') {
  my $cache=$Apache::lonnet::perlvar{'lonDocRoot'}.$filelink.   my $cache=$Apache::lonnet::perlvar{'lonDocRoot'}.$filelink.
     '.tmp';      '.tmp';
  if ((!$ENV{'form.updatedisplay'}) &&   if ((!$env{'form.updatedisplay'}) &&
     (-e $cache)) {      (-e $cache)) {
     open(FH,$cache);      open(FH,$cache);
     $output=join("\n",<FH>);      $output=join("\n",<FH>);
     close(FH);      close(FH);
  } else {   } else {
     $output=&Apache::lonnet::ssi_body($filelink);      $output=&Apache::lonnet::ssi_body($filelink);
     open(FH,">$cache");      if ($output=~/LONCAPAACCESSCONTROLERRORSCREEN/) {
     print FH $output;   $output='';
     close(FH);      } else {
    open(FH,">$cache");
    print FH $output;
    close(FH);
       }
  }   }
  $output='<font size="-2">'.$output.'</font>';   $output='<font size="-2">'.$output.'</font>';
    } elsif ($embstyle eq 'img') {     } elsif ($embstyle eq 'img') {
Line 924  sub display_line { Line 1092  sub display_line {
    $r->print('<td> '.($output eq '' ? '&nbsp;':$output).     $r->print('<td> '.($output eq '' ? '&nbsp;':$output).
       " </td>\n");        " </td>\n");
         }          }
  if ($hash{'display_attrs_8'} == 1) {  
     my (%stat) = &Apache::lonmeta::dynamicmeta($filelink) if ($metafile == 1);  
     my $stat = (exists($stat{'course'}) ? $stat{'course'} : '').  
  ((exists($stat{'course'}) || exists($stat{'count'})) ? '/' : '').  
  (exists($stat{'count'}) ? $stat{'count'} : '');  
     $r->print('<td align=center> '.($stat eq '' ? '&nbsp;' : $stat).  
       ' </td>'."\n");  
  }  
   
  $r->print("</tr>\n");   $r->print("</tr>\n");
     }      }
   
Line 959  sub display_line { Line 1118  sub display_line {
     $r->print ("<img src=",$iconpath,"whitespace",$rem,      $r->print ("<img src=",$iconpath,"whitespace",$rem,
        ".gif border='0' />\n") if $rem > 0;         ".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.'"><input src="'.$iconpath.
    'folder_pointer_'.$diropen.'.gif"');     'folder_pointer_'.$diropen.'.gif"');
  $r->print (' name="'.$msg.'" height="22" type="image" border="0">'.   $r->print (' name="'.$msg.'" height="22" type="image" border="0" />'.
    "\n");     "\n");
  $r->print ('<a href="javascript:gothere(\''.$curdir.'\')"><img src="'.   my $quotable_curdir = &Apache::loncommon::escape_single($curdir);
    $r->print ('<a href="javascript:gothere(\''
      .$quotable_curdir.'\')"><img src="'.
    $iconpath.'folder_'.$diropen.'.gif" border="0" /></a>'.     $iconpath.'folder_'.$diropen.'.gif" border="0" /></a>'.
    "\n");     "\n");
  $r->print ("$listname</td>\n");   $r->print ("$listname</td>\n");
Line 1003  sub display_line { Line 1164  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_7'} == 1) {  
    $r->print('<td>&nbsp;</td>');  
         }  
  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) {
      $r->print('<td>&nbsp;</td>');
    }
    if ($hash{'display_attrs_11'} == 1) {
      $r->print('<td>&nbsp;</td>');
    }
    if ($hash{'display_attrs_7'} == 1) {
      $r->print('<td>&nbsp;</td>');
           }
  $r->print('</form></tr>');   $r->print('</form></tr>');
     }      }
   
 }  }
   
   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 'groupimport')?'preview':''),
     '',
     (($env{'form.catalogmode'} eq 'groupimport')?'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) = @_;
Line 1024  sub begin_form { Line 1203  sub begin_form {
        '" 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");
     $dnum++;      $dnum++;
 }  }
   
Line 1064  sub cleanup { Line 1243  sub cleanup {
     }      }
 }  }
   
   
   
   
   
 =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.89  
changed lines
  Added in v.1.137


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.