Diff for /loncom/publisher/lonpubdir.pm between versions 1.72 and 1.149

version 1.72, 2004/12/10 18:26:49 version 1.149, 2014/01/21 18:23:35
Line 1 Line 1
 # The LearningOnline Network with CAPA  # The LearningOnline Network with CAPA
 # Construction Space Directory Lister  # Authoring Space Directory Lister
 #  #
 # $Id$  # $Id$
 #  #
Line 33  use strict; Line 33  use strict;
 use Apache::File;  use Apache::File;
 use File::Copy;  use File::Copy;
 use Apache::Constants qw(:common :http :methods);  use Apache::Constants qw(:common :http :methods);
 use Apache::loncacc;  
 use Apache::loncommon();  use Apache::loncommon();
 use Apache::lonhtmlcommon();  use Apache::lonhtmlcommon();
   use Apache::londiff();
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonmsg;  use Apache::lonmsg;
 use Apache::lonmenu;  use Apache::lonmenu;
 use Apache::lonnet;  use Apache::lonnet;
   use LONCAPA;
   
 sub handler {  sub handler {
   
   my $r=shift;    my $r=shift;
   
   my $fn;    # Validate access to the construction space and get username:domain.
   
   
   
   $fn = getEffectiveUrl($r);  
   
   # Validate access to the construction space and get username@domain.  
   
   my $uname;    my $uname;
   my $udom;    my $udom;
   
   ($uname,$udom)=    ($uname,$udom)=&Apache::lonnet::constructaccess($r->uri); 
     &Apache::loncacc::constructaccess(  
              $fn,$r->dir_config('lonDefDomain'));   
   unless (($uname) && ($udom)) {    unless (($uname) && ($udom)) {
      $r->log_reason($uname.' at '.$udom.  
          ' trying to list directory '.$ENV{'form.filename'}.  
          ' ('.$fn.') - not authorized',   
          $r->filename);   
      return HTTP_NOT_ACCEPTABLE;       return HTTP_NOT_ACCEPTABLE;
   }    }
   
   # Remove trailing / from directory name.  # ----------------------------------------------------------- Start page output
   
     my $fn=$r->filename;
   $fn=~s/\/$//;    $fn=~s/\/$//;
   
   unless ($fn) {   
      $r->log_reason($ENV{'user.name'}.' at '.$ENV{'user.domain'}.  
          ' trying to list empty directory', $r->filename);   
      return HTTP_NOT_FOUND;  
   }   
   
 # ----------------------------------------------------------- Start page output  
   
   my $thisdisfn=$fn;    my $thisdisfn=$fn;
   $thisdisfn=~s/^\/home\/$uname\/public_html//; # subdirectory part of  
                                                 # construction space.   
   my $docroot=$r->dir_config('lonDocRoot');     # Apache  londocument root.    my $docroot=$r->dir_config('lonDocRoot');     # Apache  londocument root.
     $thisdisfn=~s/^\Q$docroot\E\/priv//;
   
   my $resdir=$docroot.'/res/'.$udom.'/'.$uname.$thisdisfn; # Resource directory    my $resdir=$docroot.'/res'.$thisdisfn; # Resource directory
   my $targetdir=$udom.'/'.$uname.$thisdisfn; # Publiction target directory.    my $targetdir='/res'.$thisdisfn; # Publication target directory.
   my $linkdir='/priv/'.$uname.$thisdisfn;      # Full URL name of constr space.    my $linkdir='/priv'.$thisdisfn;      # Full URL name of constr space.
   
   my %bombs=&Apache::lonmsg::all_url_author_res_msg($uname,$udom);    my %bombs=&Apache::lonmsg::all_url_author_res_msg($uname,$udom);
   
   &startpage($r, $uname, $udom, $thisdisfn);   # Put out the start of page.    &startpage($r, $uname, $udom, $thisdisfn);   # Put out the start of page.
   if ($ENV{'environment.remote'} eq 'off') {    &dircontrols($r,$uname,$udom,$thisdisfn);    # Put out actions for directory, 
       &dircontrols($r,$uname,$udom,$thisdisfn);    # Put out actions for directory,   
                                                # browse/upload + new file page.                                                 # browse/upload + new file page.
   } else {  
       &pubbuttons($r,$uname,$thisdisfn);  
   }  
   &resourceactions($r,$uname,$udom,$thisdisfn); #Put out form used for printing/deletion etc.    &resourceactions($r,$uname,$udom,$thisdisfn); #Put out form used for printing/deletion etc.
   
   my $numdir = 0;    my $numdir = 0;
   my $numres = 0;    my $numres = 0;
       
   # Start off the directory table.    # Start off the directory table.
   $r->print('<h3>Directory Contents:</h3>');    $r->print(&Apache::loncommon::start_data_table()
   $r->print('<table border="0" cellspacing="2" cellpadding="2"><tr>'.             .&Apache::loncommon::start_data_table_header_row()
             '<th bgcolor="#DDDDDD">'.&mt('Type').'</th>'.             .'<th>'.&mt('Type').'</th>'
             '<th bgcolor="#DDDDDD">'.&mt('Actions').'</th>'.             .'<th>'.&mt('Actions').'</th>'
             '<th bgcolor="#DDDDDD">'.&mt('Name').'</th>'.             .'<th>'.&mt('Name').'</th>'
             '<th bgcolor="#DDDDDD">'.&mt('Title').'</th>'.             .'<th>'.&mt('Title').'</th>'
     '<th bgcolor="#DDDDDD">'.&mt('Status').'</th>'.             .'<th colspan="2">'.&mt('Status').'</th>'
             '<th bgcolor="#DDDDDD">'.&mt('Last Modified').             .'<th>'.&mt('Last Modified').'</th>'
     '</th></tr>');             .&Apache::loncommon::end_data_table_header_row()
     );
   
   my $filename;    my $filename;
   my $dirptr=16384; # Mask indicating a directory in stat.cmode.    my $dirptr=16384; # Mask indicating a directory in stat.cmode.
Line 119  sub handler { Line 97  sub handler {
   opendir(DIR,$fn);    opendir(DIR,$fn);
   my @files=sort {uc($a) cmp uc($b)} (readdir(DIR));    my @files=sort {uc($a) cmp uc($b)} (readdir(DIR));
   foreach my $filename (@files) {    foreach my $filename (@files) {
        next if ($filename eq '.DS_Store');
      my ($cdev,$cino,$cmode,$cnlink,       my ($cdev,$cino,$cmode,$cnlink,
          $cuid,$cgid,$crdev,$csize,           $cuid,$cgid,$crdev,$csize,
          $catime,$cmtime,$cctime,           $catime,$cmtime,$cctime,
Line 127  sub handler { Line 106  sub handler {
      my $extension='';       my $extension='';
      if ($filename=~/\.(\w+)$/) { $extension=$1; }       if ($filename=~/\.(\w+)$/) { $extension=$1; }
      if ($cmode&$dirptr) {       if ($cmode&$dirptr) {
  putdirectory($r, $thisdisfn, $linkdir, $filename, $cmtime,$targetdir,\%bombs,\$numdir);   &putdirectory($r, $thisdisfn, $linkdir, $filename, $cmtime,$targetdir,\%bombs,\$numdir);
      } elsif (&Apache::loncommon::fileembstyle($extension) ne 'hdn') {       } elsif (&Apache::loncommon::fileembstyle($extension) ne 'hdn') {
  putresource($r, $udom, $uname, $filename, $thisdisfn, $resdir,    &putresource($r, $udom, $uname, $filename, $thisdisfn, $resdir, 
      $targetdir, $linkdir, $cmtime,\%bombs,\$numres);       $targetdir, $linkdir, $cmtime,\%bombs,\$numres);
      } else {       } else {
  # "hidden" extension and not a directory, so hide it away.   # "hidden" extension and not a directory, so hide it away.
Line 137  sub handler { Line 116  sub handler {
   }    }
   closedir(DIR);    closedir(DIR);
   
   $r->print('</table></body></html>');    $r->print(&Apache::loncommon::end_data_table()
              .&Apache::loncommon::end_page()
     );
   return OK;      return OK;  
 }  }
 #  
 #  Gets the effective URL of the request and returns it:  
 #    $effn = getEffectiveUrl($r);  
 #       $r  - The Apache Request object.  
 sub getEffectiveUrl {  
     my $r = shift;  
     my $fn;  
       
     if ($ENV{'form.filename'}) { # If a form filename is defined.  
  $fn=$ENV{'form.filename'};  
  #  
  #   Replace the ~username of the URL with /home/username/public_html  
  #   so that we don't have to worry about ~ expansion internally.  
  #  
  $fn=~s/^http\:\/\/[^\/]+\///;  
         $fn=~s/^\///;  
         $fn=~s/\~(\w+)/\/home\/$1\/public_html/;  
   
  #  Remove trailing / strings (?)   
   
  $fn=~s/\/[^\/]+$//;  
     } else {  
  #   If no form is defined, use request filename.  
  $fn = $r->filename();  
  my $lonDocRoot=$r->dir_config('lonDocRoot');  
  if ( $fn =~ /$lonDocRoot/ ) {  
     #internal authentication, needs fixup.  
     $fn = $r->uri(); # non users do not get the full path request  
                              # through SCRIPT_FILENAME  
     $fn=~s|^/~(\w+)|/home/$1/public_html|;  
  }  
     }  
     $fn=~s/\/+/\//g;  
     return $fn;  
 }  
 #  #
 #   Output the header of the page.  This includes:  #   Output the header of the page.  This includes:
 #   - The HTML header   #   - The HTML header 
Line 188  sub getEffectiveUrl { Line 135  sub getEffectiveUrl {
   
 sub startpage {  sub startpage {
     my ($r, $uname, $udom, $thisdisfn) = @_;      my ($r, $uname, $udom, $thisdisfn) = @_;
     my $currdir = '/priv/'.$uname.$thisdisfn;  
     &Apache::loncommon::content_type($r,'text/html');      &Apache::loncommon::content_type($r,'text/html');
     $r->send_http_header;      $r->send_http_header;
   
     $r->print('<html><head><title>LON-CAPA Construction Space</title></head>');      my $formaction='/priv'.$thisdisfn.'/';
       $formaction=~s|/+|/|g;
     my $pagetitle;  
     my $formaction='/priv/'.$uname.$thisdisfn.'/';  
     $formaction=~s/\/+/\//g;  
     $pagetitle .= &Apache::loncommon::help_open_menu('','','','',3,'Authoring').  
         '<font face="Arial, Helvetica, sans-serif" size="+1"><b>Construction Space</b>:</font>&nbsp;'.  
         '<form name="dirs" method="post" action="'.$formaction.  
         '" target="_parent"><tt><b>'.  
         &Apache::lonhtmlcommon::crumbs($uname.$thisdisfn.'/','_top','/priv','','+1',1)."</b></tt><br />".  
         &Apache::lonhtmlcommon::select_recent('construct','recent',  
                  'this.form.action=this.form.recent.value;this.form.submit()').  
               '</form>';  
     &Apache::lonhtmlcommon::store_recent('construct',$formaction,$formaction);      &Apache::lonhtmlcommon::store_recent('construct',$formaction,$formaction);
     if ($ENV{'environment.remote'} eq 'off') {  
  $ENV{'request.noversionuri'}=$currdir.'/';      &Apache::lonhtmlcommon::clear_breadcrumbs();
  $r->print(&Apache::loncommon::bodytag('Construction Space',undef,undef,undef,undef,undef,$pagetitle));      &Apache::lonhtmlcommon::add_breadcrumb({
     } else {          'text'  => 'Authoring Space',
  $r->print($pagetitle);          'href'  => &Apache::loncommon::authorspace($formaction),
     }      });
       # breadcrumbs (and tools) will be created 
       # in start_page->bodytag->innerregister
   
       $env{'request.noversionuri'}=$formaction;
       $r->print(&Apache::loncommon::start_page('Authoring Space',undef));
   
       my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'};
       my $current_disk_usage = &Apache::lonnet::diskusage($udom,$uname,"$londocroot/priv/$udom/$uname");
       my $disk_quota = &Apache::loncommon::get_user_quota($uname,$udom,'author'); #expressed in Mb
       $disk_quota = 1000 * $disk_quota; # convert from Mb to kb
   
       $r->print(&Apache::loncommon::head_subbox(
                        '<div style="float:right;padding-top:0;margin-top;0">'
                       .&Apache::lonhtmlcommon::display_usage($current_disk_usage,$disk_quota)
                       .'</div>'
                       .&Apache::loncommon::CSTR_pageheader()));
   
       my $esc_thisdisfn = &Apache::loncommon::escape_single($thisdisfn);
       my $doctitle = 'LON-CAPA '.&mt('Authoring Space');
       my $newname = &mt('New Name');
     my $pubdirscript=(<<ENDPUBDIRSCRIPT);      my $pubdirscript=(<<ENDPUBDIRSCRIPT);
 <script>  <script type="text/javascript">
   top.document.title = '$esc_thisdisfn/ - $doctitle';
 // Store directory location for menu bar to find  // Store directory location for menu bar to find
   
 parent.lastknownpriv='/~$uname$thisdisfn/';  parent.lastknownpriv='/priv$esc_thisdisfn/';
   
 // Confirmation dialogues  // Confirmation dialogues
   
     function currdiract(theform) {      function currdiract(theform) {
         if (theform.dirtask.options[theform.dirtask.selectedIndex].value == 'publish') {          if (theform.dirtask.options[theform.dirtask.selectedIndex].value == 'publish') {
             document.publishdir.filename.value = theform.filename.value              document.publishdir.filename.value = theform.filename.value;
             pubdir(document.publishdir)      document.publishdir.submit();
         }  
         if (theform.dirtask.options[theform.dirtask.selectedIndex].value == 'publishsub') {  
             document.publishdir.filename.value = theform.filename.value  
             pubrecdir(document.publishdir)  
         }          }
         if (theform.dirtask.options[theform.dirtask.selectedIndex].value == 'editcat') {          if (theform.dirtask.options[theform.dirtask.selectedIndex].value == 'editmeta') {
             top.location=theform.filename.value+'default.meta'              top.location=theform.filename.value+'default.meta'
         }          }
         if (theform.dirtask.options[theform.dirtask.selectedIndex].value == 'printdir' ) {          if (theform.dirtask.options[theform.dirtask.selectedIndex].value == 'printdir' ) {
             document.printdir.postdata.value=theform.filename.value              document.printdir.postdata.value=theform.filename.value
             document.printdir.submit();              document.printdir.submit();
         }          }
     }          if (theform.dirtask.options[theform.dirtask.selectedIndex].value == "delete") {
                   var delform = document.delresource
     function pubdir(theform) {                delform.filename.value = theform.filename.value
  if (confirm('Publish complete directory?')) {                delform.submit()
             forcepub(theform)  
     theform.submit();  
         }  
     }  
     function pubrecdir(theform) {  
  if (confirm('Publish directory and all subdirectories?')) {  
             forcepub(theform);  
             theform.pubrec.value='1';  
     theform.submit();  
         }          }
     }      }
     
     function forcepub(theform) {  
         if (confirm('Force publication of unmodified files? - OK=yes; Cancel=No.')) {  
             theform.forcerepub.value="ON";  
         }   
     }  
   
     function checkUpload(theform) {      function checkUpload(theform) {
         if (theform.file == '') {          if (theform.file == '') {
             alert("Please use 'Browse..' to choose a file first, before uploading")              alert("Please use 'Browse..' to choose a file first, before uploading")
Line 268  parent.lastknownpriv='/~$uname$thisdisfn Line 205  parent.lastknownpriv='/~$uname$thisdisfn
   
     function SetPubDir(theform,printForm) {      function SetPubDir(theform,printForm) {
         if (theform.diraction.options[theform.diraction.selectedIndex].value == "open") {          if (theform.diraction.options[theform.diraction.selectedIndex].value == "open") {
             top.location = theform.filename.value              top.location = theform.openname.value
             return              return
         }          }
         if (theform.diraction.options[theform.diraction.selectedIndex].value == "publish") {          if (theform.diraction.options[theform.diraction.selectedIndex].value == "publish") {
             pubdir(theform)              theform.submit();
         }          }
         if (theform.diraction.options[theform.diraction.selectedIndex].value == "publishsub") {          if (theform.diraction.options[theform.diraction.selectedIndex].value == "editmeta") {
             pubrecdir(theform)  
         }  
         if (theform.diraction.options[theform.diraction.selectedIndex].value == "editcat") {  
             top.location=theform.filename.value+'default.meta'              top.location=theform.filename.value+'default.meta'
         }          }
         if (theform.diraction.options[theform.diraction.selectedIndex].value == "printdir") {          if (theform.diraction.options[theform.diraction.selectedIndex].value == "printdir") {
Line 285  parent.lastknownpriv='/~$uname$thisdisfn Line 219  parent.lastknownpriv='/~$uname$thisdisfn
             theform.postdata.value = theform.filename.value              theform.postdata.value = theform.filename.value
             theform.submit()              theform.submit()
         }          }
           if (theform.diraction.options[theform.diraction.selectedIndex].value == "delete") {
                 var delform = document.delresource
                 delform.filename.value = theform.filename.value
                 delform.submit()
           }
         return          return
     }      }
     function SetResChoice(theform) {      function SetResChoice(theform) {
Line 305  parent.lastknownpriv='/~$uname$thisdisfn Line 244  parent.lastknownpriv='/~$uname$thisdisfn
       if (activity == 'obsolete') {        if (activity == 'obsolete') {
           var pubform = document.pubresource            var pubform = document.pubresource
           pubform.filename.value = theform.filename.value            pubform.filename.value = theform.filename.value
           alert("You will be taken to the publication page.\\nCheck the 'Obsolete' checkbox at the bottom of the page, and click 'Finalize Publication'.")            pubform.makeobsolete.value=1;
           pubform.submit()            pubform.submit()
       }        }
       if (activity == 'print') {        if (activity == 'print') {
Line 316  parent.lastknownpriv='/~$uname$thisdisfn Line 255  parent.lastknownpriv='/~$uname$thisdisfn
           document.retrieveres.filename.value = theform.filename.value            document.retrieveres.filename.value = theform.filename.value
           document.retrieveres.submit()            document.retrieveres.submit()
       }        }
         if (activity == 'cleanup') {
             document.cleanup.filename.value = theform.filename.value
             document.cleanup.submit()
         }
       return        return
     }      }
     function changename(theform,activity) {      function changename(theform,activity) {
         var newname=prompt('New Name');          var oldname=theform.dispfilename.value;
         if (newname == "" || !newname)  {          var newname=prompt('$newname',oldname);
           if (newname == "" || !newname || newname == oldname)  {
             return              return
         }          }
         document.moveresource.newfilename.value = newname          document.moveresource.newfilename.value = newname
Line 331  parent.lastknownpriv='/~$uname$thisdisfn Line 275  parent.lastknownpriv='/~$uname$thisdisfn
 </script>  </script>
 ENDPUBDIRSCRIPT  ENDPUBDIRSCRIPT
     $r->print($pubdirscript);      $r->print($pubdirscript);
   
     if (($uname ne $ENV{'user.name'}) || ($udom ne $ENV{'user.domain'})) {  
  $r->print('<h3>'.&mt('Co-Author').': '.$uname.' at '.$udom.  
   '</h3>');  
     }  
 }  }
   
 sub dircontrols {  sub dircontrols {
     my ($r,$uname,$udom,$thisdisfn) = @_;      my ($r,$uname,$udom,$thisdisfn) = @_;
       my %lt=&Apache::lonlocal::texthash(
                                          cnpd => 'Cannot publish directory',
                                          cnrd => 'Cannot retrieve directory',
                                          mcdi => 'Must create new subdirectory inside a directory',
                                          pubr => 'Publish this Resource',
                                          pubd => 'Publish this Directory',
                                          dedr => 'Delete Directory',
                                          rtrv => 'Retrieve Old Version',
                                          list => 'List Directory',
                                          uplo => 'Upload file',  
                                          dele => 'Delete',
                                          edit => 'Edit Metadata', 
                                          sela => 'Select Action',
                                          nfil => 'New file',
                                          nhtm => 'New HTML file',
                                          nprb => 'New problem',
                                          npag => 'New assembled page',
                                          nseq => 'New assembled sequence',
                                          ncrf => 'New custom rights file',
                                          nsty => 'New style file',
                                          nlib => 'New library file',
                                          nbt  => 'New bridgetask file',
                                          nsub => 'New subdirectory',
                                          renm => 'Rename current file to',
                                          move => 'Move current file to',
                                          copy => 'Copy current file to',
                                          type => 'Type Name Here',
                                          go   => 'Go',
                                          prnt => 'Print contents of directory',
                                          crea => 'Create a new directory or LON-CAPA document',
          acti => 'Actions for current directory',
          updc => 'Upload a new document',
          pick => 'Please select an action to perform using the new filename',
                                         );
       my $mytype = $lt{'type'}; # avoid conflict with " and ' in javascript
     $r->print(<<END);      $r->print(<<END);
         <table cellspacing="4" cellpadding="4" width="100%">  <div class="LC_columnSection">
          <tr>    <div>
           <td bgcolor="#DDDDDD" align="middle"><font face="Arial, Helvetica, sans-serif" size="-1"><b>Actions for current directory</b></font></td>      <form name="curractions" method="post" action="">
           <td bgcolor="#DDDDDD" align="middle"><font face="Arial, Helvetica, sans-serif" size="-1"><b>Upload a new document</b></font></td>        <fieldset>
           <td bgcolor="#DDDDDD" align="middle"><font face="Arial, Helvetica, sans-serif" size="-1"><b>Create a new directory or LON-CAPA document</b></font></td>          <legend>$lt{'acti'}</legend>
         </tr>          <select name="dirtask" onchange="currdiract(this.form)">
         <tr>              <option>$lt{'sela'}</option>
          <td bgcolor="#ccddaa" valign="top" align="center">              <option value="publish">$lt{'pubd'}</option>
           <form name="curractions" method="post" action="">              <option value="editmeta">$lt{'edit'}</option>
            <select name="dirtask" onChange="currdiract(this.form)">              <option value="printdir">$lt{'prnt'}</option>
             <option>Select action</option>              <option value="delete">$lt{'dedr'}</option>
             <option value="publish">Publish directory</option>          </select>
             <option value="publishsub">Publish with subdirectories</option>          <input type="hidden" name="filename" value="/priv$thisdisfn/" />
             <option value="editcat">Edit catalog information</option>        </fieldset>
             <option value="printdir">Print contents of directory</option>      </form>
            </select>      <form name="publishdir" method="post" action="/adm/publish" target="_parent">
            <input type="hidden" name="filename" value="/~$uname$thisdisfn/" />        <input type="hidden" name="pubrec" value="" />
           </form>        <input type="hidden" name="filename" value="" />
           <form name="publishdir" method="post" action="/adm/publish" target="_parent">      </form>
            <input type="hidden" name="pubrec" value="" />      <form name="printdir" method="post" action="/adm/printout" target="_parent">
            <input type="hidden" name="filename" value="" />        <input type="hidden" name="postdata" value="" />
            <input type="hidden" name="forcerepub" value="NO" />      </form>
           </form>    </div>
           <form name="printdir" method="post" action="/adm/printout" target="_parent">  
            <input type="hidden" name="postdata" value="" />    <div>
           </form>      <form name="upublisher" enctype="multipart/form-data" method="post" action="/adm/upload" target="_parent">
          </td>        <fieldset>
          <td bgcolor="#ccddaa" valign="top" align="center">          <legend>$lt{'updc'}</legend>
     <form name="upublisher" enctype="multipart/form-data" method="post" action="/adm/upload" target="_parent">          <input type="hidden" name="filename" value="/priv$thisdisfn/" />
       <input type="hidden" name="filename" value="/~$uname$thisdisfn/" />          <input type="file" name="upfile" size="20" />
       <input type="file" name="upfile" size="20" />          <input type="button" value="$lt{'uplo'}"  onclick="checkUpload(this.form)" />
       <input type="button" value="Upload file"  onclick="checkUpload(this.form)" />        </fieldset>
     </form>      </form>
  </td>    </div>
  <td bgcolor="#ccddaa" align="center">  
     <form name="fileaction" method="post" action="/adm/cfile" target="_parent">    <div>
       <nobr>      <form name="fileaction" method="post" action="/adm/cfile" target="_parent">
  <input type="hidden" name="filename" value="/~$uname$thisdisfn/" />        <fieldset>
                 <legend>$lt{'crea'}</legend>
         <span class="LC_nobreak">
    <input type="hidden" name="filename" value="/priv$thisdisfn/" />
                     <script type="text/javascript">
                       function validate_go() {
                           var selected = document.fileaction.action.selectedIndex;
                           if (selected == 0) {
                               alert('$lt{'pick'}');
                           } else {
                               document.fileaction.submit();
                           }
                       }
                     </script>
   <select name="action">    <select name="action">
     <option>Select Action</option>      <option value="none">$lt{'sela'}</option>
     <option value="newfile">New file:</option>      <option value="newfile">$lt{'nfil'}:</option>
     <option value="newhtmlfile">New HTML file:</option>      <option value="newhtmlfile">$lt{'nhtm'}:</option>
     <option value="newproblemfile">New problem:</option>      <option value="newproblemfile">$lt{'nprb'}:</option>
                     <option value="newpagefile">New assembled page:</option>                      <option value="newpagefile">$lt{'npag'}:</option>
                     <option value="newsequencefile">New assembled sequence:</option>                      <option value="newsequencefile">$lt{'nseq'}:</option>
                     <option value="newrightsfile">New custom rights file:</option>                      <option value="newrightsfile">$lt{'ncrf'}:</option>
                     <option value="newstyfile">New style file:</option>                      <option value="newstyfile">$lt{'nsty'}:</option>
     <option value="newdir">New subdirectory:</option>                      <option value="newtaskfile">$lt{'nbt'}:</option>
   </select>&nbsp;<input type="text" name="newfilename" value="Type Name Here" onfocus="if (this.value == 'Type Name Here') this.value=''" />&nbsp;<input type="button" value="Go" onclick="document.fileaction.submit()" />                      <option value="newlibraryfile">$lt{'nlib'}:</option>
  </nobr>              <option value="newdir">$lt{'nsub'}:</option>
  </form>    </select>&nbsp;<input type="text" name="newfilename" value="$lt{'type'}" onfocus="if (this.value == '$mytype') this.value=''" />&nbsp;<input type="button" value="Go" onclick="validate_go();" />
   </td>   </span>
          </tr>        </fieldset>
         </table>      </form>
     </div>
   </div>
 END  END
 }  }
   
 sub pubbuttons {  
     my ($r,$uname,$thisdisfn) = @_;  
     $r->print('<form method="post" action="/adm/publish" target="_parent">'.  
               '<table><tr><td><input type="hidden" name="filename" value="/~'.  
                $uname.$thisdisfn.'/" />'.  
               '<input type="button" onClick="pubdir(this.form);" value="'.  
 &mt('Publish Directory').'" />'.  
               '<input type="hidden" name="pubrec" value="" />'.  
               '<input type="hidden" name="forcerepub" value="NO" />'.  
               '<input type="button" onClick="pubrecdir(this.form);" value="'.  
 &mt('Publish Directory and Sub Directories').'" /></td><td>'.  
 '<input type="button" onClick="window.location='."'/~".  
                $uname.$thisdisfn."/default.meta'".'" value="'.  
 &mt('Edit Directory Catalog Information').'" /></td></tr></table></form>');  
 }  
   
 sub resourceactions {  sub resourceactions {
     my ($r,$uname,$udom,$thisdisfn) = @_;      my ($r,$uname,$udom,$thisdisfn) = @_;
     $r->print(<<END);      $r->print(<<END);
Line 427  sub resourceactions { Line 400  sub resourceactions {
          <input type="hidden" name="action" value="delete" />           <input type="hidden" name="action" value="delete" />
        </form>         </form>
        <form name="pubresource" action="/adm/publish" target="_parent" method="post">         <form name="pubresource" action="/adm/publish" target="_parent" method="post">
          <input type="hidden" name="pubrec" value="" />  
          <input type="hidden" name="filename" value="" />           <input type="hidden" name="filename" value="" />
          <input type="hidden" name="forcerepub" value="NO" />           <input type="hidden" name="makeobsolete" value="0" />
        </form>         </form>
        <form name="printresource" action="/adm/printout" target="_parent" method="post">         <form name="printresource" action="/adm/printout" target="_parent" method="post">
            <input type="hidden" name="postdata" value="" />             <input type="hidden" name="postdata" value="" />
Line 437  sub resourceactions { Line 409  sub resourceactions {
        <form name="retrieveres" action="/adm/retrieve" target="_parent" method="post">         <form name="retrieveres" action="/adm/retrieve" target="_parent" method="post">
            <input type="hidden" name="filename" value="" />             <input type="hidden" name="filename" value="" />
        </form>         </form>
          <form name="cleanup" action="/adm/cleanup" target="_parent" method="post">
              <input type="hidden" name="filename" value="" />
          </form>
 END  END
 }  }
   
Line 470  sub getSourceRightString { Line 445  sub getSourceRightString {
 }  }
 #  #
 #  Put out a directory table row:  #  Put out a directory table row:
 #    putdirectory(r, base, here, dirname, modtime)  #    putdirectory(r, base, here, dirname, modtime, targetdir, bombs, numdir)
 #      r       - Apache request object.  #      r         - Apache request object.
 #      reqfile - File in request.  #      reqfile   - File in request.
 #      here    - Where we are in directory tree.  #      here      - Where we are in directory tree.
 #      dirname - Name of directory special file.  #      dirname   - Name of directory special file.
 #      modtime - Encoded modification time.  #      modtime   - Encoded modification time.
 #   #      targetdir - Publication target directory.
   #      bombs     - Reference to hash of URLs with runtime error messages.
   #      numdir    - Reference to scalar used to track number of sub-directories
   #                  in directory (used in form name for each "actions" dropdown).
   #
 sub putdirectory {  sub putdirectory {
     my ($r, $reqfile, $here, $dirname, $modtime, $resdir, $bombs, $numdir) = @_;      my ($r, $reqfile, $here, $dirname, $modtime, $targetdir, $bombs, $numdir) = @_;
     # construct the display filename: the directory name unless ..:  
       # construct the display filename: the directory name unless ..:
      
       my $actionitem;
    
     my $disfilename = $dirname;      my $disfilename = $dirname;
     if ($dirname eq '..') {  # Don't display directory itself, and there is no way up from root directory
  $disfilename = '<i>'.&mt('Parent Directory').'</i>';      unless ((($dirname eq '..') && ($reqfile=~/^\/[^\/]+\/[^\/]+$/)) || ($dirname eq '.')) {
     }          my $kaputt=0;
     unless ( (($dirname eq '..') && ($reqfile eq '')) || ($dirname eq '.')) {          if (ref($bombs) eq 'HASH') {
  my $kaputt=0;              foreach my $key (keys(%{$bombs})) {
  foreach (keys %{$bombs}) {                  my $currentdir = &Apache::lonnet::declutter("$targetdir/$disfilename");
     if ($_=~m:^\Q$resdir\E/\Q$disfilename\E/:) { $kaputt=1; last; }                  if (($key) =~ m{^\Q$currentdir\E/}) { $kaputt=1; last; }
  }              }
           }
   #
   # Get the metadata from that directory's default.meta to display titles
   #
  %Apache::lonpublisher::metadatafields=();   %Apache::lonpublisher::metadatafields=();
  %Apache::lonpublisher::metadatakeys=();   %Apache::lonpublisher::metadatakeys=();
  my $construct=$here;   &Apache::lonpublisher::metaeval(
  $construct=~s:^/priv/(\w+)$:/home/$1/public_html:;                   &Apache::lonnet::getfile($r->dir_config('lonDocRoot').$here.'/'.$dirname.'/default.meta')
         my $dirpath = $here;                                         );
         $dirpath=~s:^/priv/:/~:;  
  &Apache::lonpublisher::metaeval(&Apache::lonnet::getfile(  
         $construct.'/'.$dirname.'/default.meta'  
  ));  
         my $actionitem = '';  
         if ($dirname eq '..') {          if ($dirname eq '..') {
             $actionitem = 'Go to ...';              $actionitem = &mt('Go to ...');
               $disfilename = '<i>'.&mt('Parent Directory').'</i>';
         } else {          } else {
             $actionitem =               $actionitem = 
                     '<form name="dirselect_'.$$numdir.                      '<form name="dirselect_'.$$numdir.
                     '" action="/adm/publish" target="_parent">'.                      '" action="/adm/publish" target="_parent">'.
                     '<select name="diraction" onChange="SetPubDir(this.form,document)">'.                      '<select name="diraction" onchange="SetPubDir(this.form,document)">'.
                       '<option selected="selected">'.&mt('Select action').'</option>'.                        '<option selected="selected">'.&mt('Select action').'</option>'.
                       '<option value="open">'.&mt('Open').'</option>'.                        '<option value="open">'.&mt('Open').'</option>'.
                       '<option value="publish">'.&mt('Publish').'</option>'.                        '<option value="publish">'.&mt('Publish').'</option>'.
                       '<option value="publishsub">'.&mt('Publish with subdirectories').'</option>'.                        '<option value="editmeta">'.&mt('Edit Metadata').'</option>'.
                       '<option value="editcat">'.&mt('Edit catalog information').'</option>'.                        '<option value="printdir">'.&mt('Print directory').'</option>'.
                       '<option value="printdir">'.&mt('Print directory').                        '<option value="delete">'.&mt('Delete directory').'</option>'.
                     '</select>'.                      '</select>'.
                      '<input type="hidden" name="filename" value="'.$dirpath.'/'.$dirname.'/" />'.                       '<input type="hidden" name="filename" value="'.&HTML::Entities::encode($here.'/'.$dirname,'<>&"').'/" />'.
                      '<input type="hidden" name="pubrec" value="" />'.                       '<input type="hidden" name="openname" value="'.$here.'/'.$dirname.'/" />'.
                      '<input type="hidden" name="forcerepub" value="" />'.  
                      '<input type="hidden" name="postdata" value="" />'.                       '<input type="hidden" name="postdata" value="" />'.
                    '</form>';                     '</form>';
             $$numdir ++;              $$numdir ++;
         }          }
  $r->print('<tr bgcolor="#CCCCFF">'.   $r->print('<tr class="LC_browser_folder">'.
   '<td><img src="'.    '<td><img src="'.
   $Apache::lonnet::perlvar{'lonIconsURL'}.'/folder_closed.gif" /></td>'.    $Apache::lonnet::perlvar{'lonIconsURL'}.'/navmap.folder.closed.gif" alt="folder" /></td>'.
   '<td>'.$actionitem.'</td>'.    '<td>'.$actionitem.'</td>'.
   '<td><font face="arial"><a href="'.$here.'/'.$dirname.'/" target="_parent">'.    '<td><span class="LC_filename"><a href="'.&HTML::Entities::encode($here.'/'.$dirname,'<>&"').'/" target="_parent">'.
   $disfilename.'</a></font></td>'.    $disfilename.'</a></span></td>'.
         '<td colspan="2">'.($kaputt?&Apache::lonhtmlcommon::authorbombs($resdir.'/'.$disfilename.'/'):'').$Apache::lonpublisher::metadatafields{'title'}.' <i>'.          '<td colspan="3">'.($kaputt?&Apache::lonhtmlcommon::authorbombs($targetdir.'/'.$disfilename.'/'):'').$Apache::lonpublisher::metadatafields{'title'});
   $Apache::lonpublisher::metadatafields{'subject'}.'</i> '.   if ($Apache::lonpublisher::metadatafields{'subject'} ne '') {
   $Apache::lonpublisher::metadatafields{'keywords'}.'</td>'.      $r->print(' <i>'.
         $Apache::lonpublisher::metadatafields{'subject'}.
         '</i> ');
    }
    $r->print($Apache::lonpublisher::metadatafields{'keywords'}.'</td>'.
   '<td>'.&Apache::lonlocal::locallocaltime($modtime).'</td>'.    '<td>'.&Apache::lonlocal::locallocaltime($modtime).'</td>'.
   "</tr>\n");    "</tr>\n");
     }      }
Line 542  sub putresource { Line 527  sub putresource {
     my ($r, $udom, $uname, $filename, $thisdisfn,       my ($r, $udom, $uname, $filename, $thisdisfn, 
  $resdir, $targetdir, $linkdir,   $resdir, $targetdir, $linkdir,
  $cmtime,$bombs,$numres) = @_;   $cmtime,$bombs,$numres) = @_;
       &Apache::lonnet::devalidate_cache_new('meta',$targetdir.'/'.$filename);
     my $pubstatus = 'unpublished';      my $pubstatus = 'unpublished';
     my $status=&mt('Unpublished');      my $status=&mt('Unpublished');
     my $bgcolor='#FFAA99';      my $css_class='LC_browser_file';
     my $title='&nbsp;';      my $title='';
     my $publish_button=&mt('Publish');      my $publish_button=&mt('Publish');
 #    my $action_buttons=      my $cstr_dir = $r->dir_config('lonDocRoot').'/priv'.$thisdisfn;
 #        '<br /><a target="_parent" href="/adm/cfile?action=delete&filename=/~'.      my $linkfilename=&HTML::Entities::encode('/priv'.$thisdisfn.'/'.$filename,'<>&"');
 # $uname.'/'.$thisdisfn.'/'.$filename.'">'.  
 # &mt('Delete').'</a>';  
     if (-e $resdir.'/'.$filename) {      if (-e $resdir.'/'.$filename) {
           my $same=0;
  my ($rdev,$rino,$rmode,$rnlink,   my ($rdev,$rino,$rmode,$rnlink,
     $ruid,$rgid,$rrdev,$rsize,      $ruid,$rgid,$rrdev,$rsize,
     $ratime,$rmtime,$rctime,      $ratime,$rmtime,$rctime,
     $rblksize,$rblocks)=stat($resdir.'/'.$filename);      $rblksize,$rblocks)=stat($resdir.'/'.$filename);
           if ($rmtime>=$cmtime) {
              $same=1;
           } else {
              if (&Apache::londiff::are_different_files($resdir.'/'.$filename,
        $cstr_dir.'/'.$filename)) {
                 $same=0;
              } else {
                 $same=1;
              }
           }
    my $meta_cmtime = (stat($cstr_dir.'/'.$filename.'.meta'))[9];
    my $meta_rmtime = (stat($resdir.'/'.$filename.'.meta'))[9];
    my $meta_same = 1;
    if ($meta_rmtime < $meta_cmtime
       && &Apache::londiff::are_different_files($resdir.'/'.$filename.'.meta',
        $cstr_dir.'/'.$filename.'.meta')) {
       $meta_same = 0;
    }
  $publish_button=&mt('Re-publish');   $publish_button=&mt('Re-publish');
  if ($rmtime>=$cmtime) {  
             $pubstatus = 'published';          my $rights_status =
     $status=&mt('Published').'<br />'.              &mt(&getCopyRightString($targetdir.'/'.$filename)).', ';
  &mt(&getCopyRightString($targetdir.'/'.$filename)).' '.  
  &mt(&getSourceRightString($targetdir.'/'.$filename));          my %lt_SourceRight = &Apache::lonlocal::texthash(
     $bgcolor='#CCFF88';                 'open'   => 'Source: open',
                  'closed' => 'Source: closed',
           );
           $rights_status .=
               $lt_SourceRight{&getSourceRightString($targetdir.'/'.$filename)};
   
    $title = '<a href="'.$targetdir.'/'.$filename.
       '.meta" target="cat">'.
       &getTitleString($targetdir.'/'.$filename).'</a>';
    if ($same) {
     if (&Apache::lonnet::metadata($targetdir.'/'.$filename,'obsolete')) {      if (&Apache::lonnet::metadata($targetdir.'/'.$filename,'obsolete')) {
                 $pubstatus = 'obsolete';                  $pubstatus = 'obsolete';
  $status=&mt('Obsolete');   $status=&mt('Obsolete');
                 $bgcolor='#AAAAAA';              } else {
             }   if (!$meta_same) {
 #    } else {      $pubstatus = 'metamodified';
 # $action_buttons='';   } else {
 #    }      $pubstatus = 'published';
     $title='<a href="/res/'.$targetdir.'/'.$filename.   }
  '.meta" target=cat>'.   $status=&mt('Published').
  &getTitleString($targetdir.'/'.$filename).'</a>';      '<br />'. $rights_status;
       }
  } else {   } else {
             $pubstatus = 'modified';              $pubstatus = 'modified';
     $status=&mt('Modified').'<br />'.      $status=&mt('Modified').
  &mt(&getCopyRightString($targetdir.'/'.$filename)).' '.   '<br />'. $rights_status;
  &mt(&getSourceRightString($targetdir.'/'.$filename));  
             $bgcolor='#FFFF77';  
 #    $action_buttons='';  
     $title='<a href="/res/'.$targetdir.'/'.$filename.'.meta" target=cat>'.  
  &getTitleString($targetdir.'/'.$filename).'</a>';  
     if (&Apache::loncommon::fileembstyle(($filename=~/\.(\w+)$/)) eq 'ssi') {      if (&Apache::loncommon::fileembstyle(($filename=~/\.(\w+)$/)) eq 'ssi') {
  $status.='<br /><a href="/adm/diff?filename=/~'.$uname.   $status.='<br />'.
     $thisdisfn.'/'.$filename.                           &Apache::loncommon::modal_link(
     '&versiontwo=priv" target=cat>'.&mt('Diffs').'</a>';                               '/adm/diff?filename='.$linkfilename.'&amp;versiontwo=priv',
                                &mt('Diffs'),600,500);
     }      }
    } 
    if (!$meta_same) {
       $title = &mt('Metadata Modified').'<br />'.$title.
    '<br />'.
                   &Apache::loncommon::modal_link(
                       '/adm/diff?filename='.$linkfilename.'.meta'.'&amp;versiontwo=priv',
                       &mt('Metadata Diffs'),600,500);
       $title.="\n".'<br />'.
                   &Apache::loncommon::modal_link(
                       '/adm/retrieve?filename='.$linkfilename.'.meta&amp;inhibitmenu=yes&amp;add_modal=yes',
                       &mt('Retrieve Metadata'),600,500);
  }   }
  $title.='<br /><a href="/~'.$uname.$thisdisfn.'/'.$filename.'.meta">'.    $status.="\n".'<br />'.
     ($$bombs{$targetdir.'/'.$filename}?'<img src="/adm/lonMisc/bomb.gif" border="0" />':'Edit Metadata').'</a>';               &Apache::loncommon::modal_link(
  $status.='<br><a href="/adm/retrieve?filename=/~'.$uname.                   '/adm/retrieve?filename='.$linkfilename.'&amp;inhibitmenu=yes&amp;add_modal=yes',&mt('Retrieve'),600,500);
     $thisdisfn.'/'.$filename.'" target="_parent">'.&mt('Retrieve').'</a>';      }
     }      # Allow editing metadata of published and unpublished resources
       $title .= "\n".'<br />' if ($title);
       $title .= '<a href="'.$linkfilename.'.meta">'.
                 ($$bombs{&Apache::lonnet::declutter($targetdir.'/'.$filename)}?
                     '<img src="/adm/lonMisc/bomb.gif" border="0" alt="'.&mt('bomb').'" />':
                     &mt('Edit Metadata')).
                 '</a>';
   
     my $editlink='';      my $editlink='';
     my $editlink2='';      my $editlink2='';
     if ($filename=~/\.(xml|html|htm|xhtml|xhtm|sty)$/) {      if ($filename=~/\.(xml|html|htm|xhtml|xhtm|sty)$/) {
  $editlink=' <br />(<a href="'.$linkdir.'/'.$filename.'?forceedit=1" target="_parent">'.&mt('Edit').'</a>)';   $editlink=' <br />(<a href="'.$linkdir.'/'.$filename.'?editmode=Edit&amp;problemmode=edit">'.&mt('Edit').'</a>)';
       }
       if ($filename=~/$LONCAPA::assess_re/) {
    $editlink=' (<a href="'.$linkdir.'/'.$filename.'?editmode=Edit&amp;problemmode=editxml">'.&mt('EditXML').'</a>)';
    $editlink2=' <br />(<a href="'.$linkdir.'/'.$filename.'?editmode=Edit&amp;problemmode=edit">'.&mt('Edit').'</a>)';
     }      }
     if ($filename=~/\.(problem|exam|quiz|assess|survey|form|library)$/) {      if ($filename=~/\.(problem|exam|quiz|assess|survey|form|library|xml|html|htm|xhtml|xhtm|sty)$/) {
  $editlink=' (<a href="'.$linkdir.'/'.$filename.'?forceedit=1" target="_parent">'.&mt('EditXML').'</a>)';   $editlink.=' (<a href="/adm/cleanup?filename='.$linkfilename.'" target="_parent">'.&mt('Clean Up').')</a>';
  $editlink2=' <br />(<a href="'.$linkdir.'/'.$filename.'?forceColoredit=1" target="_parent">'.&mt('Edit').'</a>)';  
     }      }
     if ($filename=~/\.(zip|tar|bz2|gz|tar.gz|tar.bz2|tgz)$/) {      if ($filename=~/\.(zip|tar|bz2|gz|tar.gz|tar.bz2|tgz)$/) {
  $editlink=' (<a target="_parent" href="/adm/cfile?decompress=/~'.   $editlink=' (<a target="_parent" href="/adm/cfile?decompress='.$linkfilename.'">'.&mt('Decompress').'</a>)';
       $uname.$thisdisfn.'/'.$filename.'">'.&mt('Decompress').'</a>)';  
     }      }
     my $pub_select = '';      my $pub_select = '';
     &create_pubselect($r,\$pub_select,$udom,$uname,$thisdisfn,$filename,$resdir,$pubstatus,$publish_button,$numres);      &create_pubselect($r,\$pub_select,$udom,$uname,$thisdisfn,$filename,$resdir,$pubstatus,$publish_button,$numres);
     $r->print('<tr bgcolor="'.$bgcolor.'">'.      $r->print(&Apache::loncommon::start_data_table_row().
       '<td>'.($filename=~/[\#\~]$/?'&nbsp;':        '<td>'.($filename=~/[\#\~]$/?'&nbsp;':
       '<img src="'.&Apache::loncommon::icon($filename).'" /></td>').        '<img src="'.&Apache::loncommon::icon($filename).'" alt="" />').'</td>'.
               '<td>'.$pub_select.'</td>'.                '<td>'.$pub_select.'</td>'.
       '<td><font face="arial">'.        '<td><span class="LC_filename">'.
       '<a href="'.$linkdir.'/'.$filename.'" target="_parent">'.        '<a href="'.$linkdir.'/'.$filename.'" target="_parent">'.
                $filename.'</a></font>'.$editlink2.$editlink.                 $filename.'</a></span>'.$editlink2.$editlink.
       '</td>'.        '</td>'.
       '<td>'.$title.'</td>'.        '<td>'.$title.'</td>'.
       '<td>'.$status.'</td>'.                '<td class="LC_browser_file_'.$pubstatus.'">&nbsp;&nbsp;</td>'. # Display publication status
                 '<td>'.$status.'</td>'.
       '<td>'.&Apache::lonlocal::locallocaltime($cmtime).'</td>'.        '<td>'.&Apache::lonlocal::locallocaltime($cmtime).'</td>'.
       "</tr>\n");        &Apache::loncommon::end_data_table_row()
       );
     return OK;      return OK;
 }  }
   
Line 628  sub create_pubselect { Line 660  sub create_pubselect {
     my ($r,$pub_select,$udom,$uname,$thisdisfn,$filename,$resdir,$pubstatus,$publish_button,$numres) = @_;      my ($r,$pub_select,$udom,$uname,$thisdisfn,$filename,$resdir,$pubstatus,$publish_button,$numres) = @_;
     $$pub_select = '      $$pub_select = '
 <form name="resselect_'.$$numres.'" action="">  <form name="resselect_'.$$numres.'" action="">
 <select name="reschoice"  onChange="SetResChoice(this.form)">  <select name="reschoice"  onchange="SetResChoice(this.form)">
 <option>'.&mt('Select action').  <option>'.&mt('Select action').'</option>'.
 '<option value="copy"/>'.&mt('Copy');  '<option value="copy">'.&mt('Copy').'</option>';
     if ($pubstatus eq 'obsolete' || $pubstatus eq 'unpublished') {      if ($pubstatus eq 'obsolete' || $pubstatus eq 'unpublished') {
         $$pub_select .=           $$pub_select .= 
 '<option value="rename"/>'.&mt('Rename').  '<option value="rename">'.&mt('Rename').'</option>'.
 '<option value="move"/>'.&mt('Move').  '<option value="move">'.&mt('Move').'</option>'.
 '<option value="delete"/>'.&mt('Delete');  '<option value="delete">'.&mt('Delete').'</option>';
     } else {      } else {
         $$pub_select .= '          $$pub_select .= '
 <option value="obsolete"/>'.&mt('Mark obsolete');  <option value="obsolete">'.&mt('Mark obsolete').'</option>';
     }      }
 # check for versions  # check for versions
     my $versions = &check_for_versions($r,'/'.$filename,$udom,$uname);      my $versions = &check_for_versions($r,'/'.$filename,$udom,$uname);
     if ($versions > 0) {      if ($versions > 0) {
         $$pub_select .='          $$pub_select .='
 <option value="retrieve"/>'.&mt('Retrieve old version');  <option value="retrieve">'.&mt('Retrieve old version').'</option>';
     }      }
     $$pub_select .= '      $$pub_select .= '
 <option value="publish"/>'.$publish_button.  <option value="publish">'.$publish_button.'</option>'.
 '<option value="print"/>'.&mt('Print').  '<option value="cleanup">'.&mt('Clean up').'</option>'.
   '<option value="print">'.&mt('Print').'</option>'.
 '</select>  '</select>
 <input type="hidden" name="filename" value="/~'.  <input type="hidden" name="filename" value="/priv'.
  $uname.$thisdisfn.'/'.$filename.'"></form>';   &HTML::Entities::encode($thisdisfn.'/'.$filename,'<>&"').'" />
    <input type="hidden" name="dispfilename" value="'.
    &HTML::Entities::encode($filename).'" /></form>';
     $$numres ++;      $$numres ++;
 }  }
   
Line 674  sub check_for_versions { Line 709  sub check_for_versions {
     return $versions;      return $versions;
 }  }
   
 #  
 #   Categorize files in the directory.  
 #   For each file in a list of files in a file directory,   
 #   the  file categorized as one of:  
 #    - directory    
 #    - sequence  
 #    - problem   
 #    - Other resource.  
 #  
 #   For each file the modification date is determined as well.  
 #   Returned is a list of sublists:  
 #    (directories, sequences, problems, other)  
 #   each of the sublists contains entries of the following form (sorted by  
 #   filename):  
 #     (filename, typecode, lastmodtime)  
 #  
 #   $list = CategorizeFiles($location, $files)  
 #       $location   - Directory in which the files live (relative to our  
 #                     execution.  
 #       $files      - list of files.  
 #  
 sub CategorizeFiles {  
     my $location = shift;  
     my $files    = shift;  
 }  
   
 1;  1;
 __END__  __END__
   
   
 =head1 NAME  =head1 NAME
   
 Apache::lonpubdir - Construction space directory lister  Apache::lonpubdir - Authoring space directory lister
   
 =head1 SYNOPSIS  =head1 SYNOPSIS
   
 Invoked (for various locations) by /etc/httpd/conf/srm.conf:  Invoked (for various locations) by /etc/httpd/conf/srm.conf:
   
  <LocationMatch "^/\~.*/$">   <LocationMatch "^/+priv.*/$">
  PerlAccessHandler       Apache::loncacc   PerlAccessHandler       Apache::loncacc
  SetHandler perl-script   SetHandler perl-script
  PerlHandler Apache::lonpubdir   PerlHandler Apache::lonpubdir
Line 758  run through list of files and attempt to Line 768  run through list of files and attempt to
   
 =back  =back
   
   =head1 SUBROUTINES:
   
   =over
   
   =item startpage($r, $uame, $udom, $thisdisfn)
   
   Output the header of the page.  This includes:
    - The HTML header 
    - The H1/H3  stuff which includes the directory.
    
       startpage($r, $uame, $udom, $thisdisfn);
           $r     - The apache request object.
           $uname - User name.
           $udom  - Domain name the user is logged in under.
           $thisdisfn - Displayable version of the filename.
   
   =item getTitleString($fullname)
   
       Get the title string or "[untitled]" if the file has no title metadata:
       Without the latter substitution, it's impossible to examine metadata for
       untitled resources.  Resources may be legitimately untitled, to prevent
       searches from locating them.
       
       $str = getTitleString($fullname);
           $fullname - Fully qualified filename to check.
   
   =item putdirectory($r, $base, $here, $dirname, $modtime, $targetdir, $bombs,
                      $numdir)
   
       Put out a directory table row:
       
           $r        - Apache request object.
           $reqfile  - File in request.
           $here     - Where we are in directory tree.
           $dirname  - Name of directory special file.
           $modtime  - Encoded modification time.
           targetdir - Publication target directory.
           bombs     - Reference to hash of URLs with runtime error messages.
           numdir    - Reference to scalar used to track number of sub-directories
                       in directory (used in form name for each "actions" dropdown).
   
   =back
   
 =cut  =cut
   

Removed from v.1.72  
changed lines
  Added in v.1.149


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.