Diff for /loncom/publisher/lonpubdir.pm between versions 1.114.2.1 and 1.127

version 1.114.2.1, 2010/02/11 21:49:19 version 1.127, 2011/10/21 17:51:23
Line 47  sub handler { Line 47  sub handler {
   
   my $r=shift;    my $r=shift;
   
   my $fn;  
   
   
   
   $fn = getEffectiveUrl($r);  
   
   # Validate access to the construction space and get username@domain.    # Validate access to the construction space and get username@domain.
   
   my $uname;    my $uname;
   my $udom;    my $udom;
   
   ($uname,$udom)=    ($uname,$udom)=&Apache::loncacc::constructaccess($r->uri); 
     &Apache::loncacc::constructaccess(  
              $fn,$r->dir_config('lonDefDomain'));   
   unless (($uname) && ($udom)) {    unless (($uname) && ($udom)) {
      $r->log_reason($uname.':'.$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.  
   
   $fn=~s/\/$//;  
   
   unless ($fn) {   
      $r->log_reason($env{'user.name'}.':'.$env{'user.domain'}.  
          ' trying to list empty directory', $r->filename);   
      return HTTP_NOT_FOUND;  
   }   
   
 # ----------------------------------------------------------- Start page output  # ----------------------------------------------------------- Start page output
   
     my $fn=$r->filename;
   
   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//;
   
   &Apache::lonnet::logthis("Thisdisfn: $thisdisfn");
   
   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.
   
   &Apache::lonnet::logthis("Values: $resdir $targetdir $linkdir");
   
   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>'.&mt('Directory Contents:').'</h3>');    $r->print(&Apache::loncommon::start_data_table()
   $r->print('<table id="LC_browser"><tr>'.             .&Apache::loncommon::start_data_table_header_row()
             '<th>'.&mt('Type').'</th>'.             .'<th>'.&mt('Type').'</th>'
             '<th>'.&mt('Actions').'</th>'.             .'<th>'.&mt('Actions').'</th>'
             '<th>'.&mt('Name').'</th>'.             .'<th>'.&mt('Name').'</th>'
             '<th>'.&mt('Title').'</th>'.             .'<th>'.&mt('Title').'</th>'
     '<th>'.&mt('Status').'</th>'.             .'<th colspan="2">'.&mt('Status').'</th>'
             '<th>'.&mt('Last Modified').             .'<th>'.&mt('Last Modified').'</th>'
     '</th></tr>'."\n");             .&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 139  sub handler { Line 119  sub handler {
   }    }
   closedir(DIR);    closedir(DIR);
   
   $r->print('</table>'.&Apache::loncommon::end_page());    $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/^https?\:\/\/[^\/]+\///;  
   
         $fn=~s/^\///;  
         $fn=~s{~($LONCAPA::username_re)}{/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{^/~($LONCAPA::username_re)}{/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 197  sub startpage { Line 144  sub startpage {
   
     my $formaction='/priv/'.$uname.$thisdisfn.'/';      my $formaction='/priv/'.$uname.$thisdisfn.'/';
     $formaction=~s|/+|/|g;      $formaction=~s|/+|/|g;
     my $pagetitle .= &Apache::loncommon::help_open_menu('','',3,'Authoring').  
         '<font face="Arial, Helvetica, sans-serif" size="+1"><b>'.&mt('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::start_page('Construction Space',undef,      &Apache::lonhtmlcommon::add_breadcrumb({
  {'body_title' =>          'text'  => 'Construction Space',
       $pagetitle,}));          'href'  => &Apache::loncommon::authorspace(),
     } else {      });
  $r->print(&Apache::loncommon::start_page('Construction Space',undef,      # breadcrumbs (and tools) will be created 
  { 'only_body' => 1,}));      # in start_page->bodytag->innerregister
  $r->print($pagetitle);  
     }      $env{'request.noversionuri'}=$currdir.'/';
       $r->print(&Apache::loncommon::start_page('Construction Space',undef));
   
       $r->print(&Apache::loncommon::head_subbox(
                   &Apache::loncommon::CSTR_pageheader(1)));
   
     my $esc_thisdisfn = &Apache::loncommon::escape_single($thisdisfn);      my $esc_thisdisfn = &Apache::loncommon::escape_single($thisdisfn);
     my $doctitle = 'LON-CAPA '.&mt('Construction Space');      my $doctitle = 'LON-CAPA '.&mt('Construction Space');
Line 328  parent.lastknownpriv='/~$uname$esc_thisd Line 271  parent.lastknownpriv='/~$uname$esc_thisd
 </script>  </script>
 ENDPUBDIRSCRIPT  ENDPUBDIRSCRIPT
     $r->print($pubdirscript);      $r->print($pubdirscript);
   
     if ((($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) &&  
  $env{'environment.remote'} ne 'off') {  
         $r->print('<h3>'.&mt('Co-Author [_1]',$uname.':'.$udom).'</h3>');  
   '</h3>');  
     }  
 }  }
   
 sub dircontrols {  sub dircontrols {
Line 374  sub dircontrols { Line 311  sub dircontrols {
                                       );                                        );
     my $mytype = $lt{'type'}; # avoid conflict with " and ' in javascript      my $mytype = $lt{'type'}; # avoid conflict with " and ' in javascript
     $r->print(<<END);      $r->print(<<END);
         <table id="LC_cstr_controls">  <div class="LC_columnSection">
          <tr>    <div>
           <th>$lt{'acti'}</th>      <form name="curractions" method="post" action="">
           <th>$lt{'updc'}</th>        <fieldset>
           <th>$lt{'crea'}</th>          <legend>$lt{'acti'}</legend>
         </tr>          <select name="dirtask" onchange="currdiract(this.form)">
         <tr>  
          <td>  
           <form name="curractions" method="post" action="">  
            <select name="dirtask" onchange="currdiract(this.form)">  
             <option>$lt{'sela'}</option>              <option>$lt{'sela'}</option>
             <option value="publish">$lt{'pubd'}</option>              <option value="publish">$lt{'pubd'}</option>
             <option value="editmeta">$lt{'edit'}</option>              <option value="editmeta">$lt{'edit'}</option>
             <option value="printdir">$lt{'prnt'}</option>              <option value="printdir">$lt{'prnt'}</option>
             <option value="delete">$lt{'dedr'}</option>              <option value="delete">$lt{'dedr'}</option>
            </select>          </select>
            <input type="hidden" name="filename" value="/~$uname$thisdisfn/" />          <input type="hidden" name="filename" value="/~$uname$thisdisfn/" />
           </form>        </fieldset>
           <form name="publishdir" method="post" action="/adm/publish" target="_parent">      </form>
            <input type="hidden" name="pubrec" value="" />      <form name="publishdir" method="post" action="/adm/publish" target="_parent">
            <input type="hidden" name="filename" value="" />        <input type="hidden" name="pubrec" value="" />
           </form>        <input type="hidden" name="filename" value="" />
           <form name="printdir" method="post" action="/adm/printout" target="_parent">      </form>
            <input type="hidden" name="postdata" value="" />      <form name="printdir" method="post" action="/adm/printout" target="_parent">
           </form>        <input type="hidden" name="postdata" value="" />
          </td>      </form>
          <td>    </div>
     <form name="upublisher" enctype="multipart/form-data" method="post" action="/adm/upload" target="_parent">  
       <input type="hidden" name="filename" value="/~$uname$thisdisfn/" />    <div>
       <input type="file" name="upfile" size="20" />      <form name="upublisher" enctype="multipart/form-data" method="post" action="/adm/upload" target="_parent">
       <input type="button" value="$lt{'uplo'}"  onclick="checkUpload(this.form)" />        <fieldset>
     </form>          <legend>$lt{'updc'}</legend>
  </td>          <input type="hidden" name="filename" value="/~$uname$thisdisfn/" />
  <td>          <input type="file" name="upfile" size="20" />
     <form name="fileaction" method="post" action="/adm/cfile" target="_parent">          <input type="button" value="$lt{'uplo'}"  onclick="checkUpload(this.form)" />
       <span style="white-space: nowrap">        </fieldset>
       </form>
     </div>
   
     <div>
       <form name="fileaction" method="post" action="/adm/cfile" target="_parent">
         <fieldset>
                 <legend>$lt{'crea'}</legend>
         <span class="LC_nobreak">
  <input type="hidden" name="filename" value="/~$uname$thisdisfn/" />   <input type="hidden" name="filename" value="/~$uname$thisdisfn/" />
                   <script type="text/javascript">                    <script type="text/javascript">
                     function validate_go() {                      function validate_go() {
Line 435  sub dircontrols { Line 376  sub dircontrols {
             <option value="newdir">$lt{'nsub'}:</option>              <option value="newdir">$lt{'nsub'}:</option>
   </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();" />    </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();" />
  </span>   </span>
  </form>        </fieldset>
   </td>      </form>
          </tr>    </div>
         </table>  </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="submit" value="'.&mt('Publish Directory').'" /></td><td>'.  
 '<input type="button" onclick="window.location='."'/~".  
                $uname.$thisdisfn."/default.meta'".'" value="'.  
 &mt('Edit Directory Metadata').'" /></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 563  sub putdirectory { Line 493  sub putdirectory {
         }          }
  $r->print('<tr class="LC_browser_folder">'.   $r->print('<tr class="LC_browser_folder">'.
   '<td><img src="'.    '<td><img src="'.
   $Apache::lonnet::perlvar{'lonIconsURL'}.'/folder_closed.gif" alt="folder" /></td>'.    $Apache::lonnet::perlvar{'lonIconsURL'}.'/navmap.folder.closed.gif" alt="folder" /></td>'.
   '<td>'.$actionitem.'</td>'.    '<td>'.$actionitem.'</td>'.
   '<td><span class="LC_filename"><a href="'.&HTML::Entities::encode($here.'/'.$dirname,'<>&"').'/" target="_parent">'.    '<td><span class="LC_filename"><a href="'.&HTML::Entities::encode($here.'/'.$dirname,'<>&"').'/" target="_parent">'.
   $disfilename.'</a></span></td>'.    $disfilename.'</a></span></td>'.
         '<td colspan="2">'.($kaputt?&Apache::lonhtmlcommon::authorbombs($resdir.'/'.$disfilename.'/'):'').$Apache::lonpublisher::metadatafields{'title'});          '<td colspan="3">'.($kaputt?&Apache::lonhtmlcommon::authorbombs($resdir.'/'.$disfilename.'/'):'').$Apache::lonpublisher::metadatafields{'title'});
  if ($Apache::lonpublisher::metadatafields{'subject'} ne '') {   if ($Apache::lonpublisher::metadatafields{'subject'} ne '') {
     $r->print(' <i>'.      $r->print(' <i>'.
       $Apache::lonpublisher::metadatafields{'subject'}.        $Apache::lonpublisher::metadatafields{'subject'}.
Line 697  sub putresource { Line 627  sub putresource {
     }      }
     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 class="LC_browser_file_'.$pubstatus.'">'.      $r->print(&Apache::loncommon::start_data_table_row().
       '<td>'.($filename=~/[\#\~]$/?'&nbsp;':        '<td>'.($filename=~/[\#\~]$/?'&nbsp;':
       '<img src="'.&Apache::loncommon::icon($filename).'" alt="" />').'</td>'.        '<img src="'.&Apache::loncommon::icon($filename).'" alt="" />').'</td>'.
               '<td>'.$pub_select.'</td>'.                '<td>'.$pub_select.'</td>'.
Line 706  sub putresource { Line 636  sub putresource {
                $filename.'</a></span>'.$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;
 }  }
   

Removed from v.1.114.2.1  
changed lines
  Added in v.1.127


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>