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

version 1.132, 2011/10/25 22:04:20 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::londiff();
Line 47  sub handler { Line 46  sub handler {
   
   my $r=shift;    my $r=shift;
   
   # 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)=&Apache::loncacc::constructaccess($r->uri);     ($uname,$udom)=&Apache::lonnet::constructaccess($r->uri); 
   unless (($uname) && ($udom)) {    unless (($uname) && ($udom)) {
      return HTTP_NOT_ACCEPTABLE;       return HTTP_NOT_ACCEPTABLE;
   }    }
Line 98  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 144  sub startpage { Line 144  sub startpage {
   
     &Apache::lonhtmlcommon::clear_breadcrumbs();      &Apache::lonhtmlcommon::clear_breadcrumbs();
     &Apache::lonhtmlcommon::add_breadcrumb({      &Apache::lonhtmlcommon::add_breadcrumb({
         'text'  => 'Construction Space',          'text'  => 'Authoring Space',
         'href'  => &Apache::loncommon::authorspace(),          'href'  => &Apache::loncommon::authorspace($formaction),
     });      });
     # breadcrumbs (and tools) will be created       # breadcrumbs (and tools) will be created 
     # in start_page->bodytag->innerregister      # in start_page->bodytag->innerregister
   
     $env{'request.noversionuri'}=$formaction;      $env{'request.noversionuri'}=$formaction;
     $r->print(&Apache::loncommon::start_page('Construction Space',undef));      $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(      $r->print(&Apache::loncommon::head_subbox(
                 &Apache::loncommon::CSTR_pageheader(1)));                       '<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 $esc_thisdisfn = &Apache::loncommon::escape_single($thisdisfn);
     my $doctitle = 'LON-CAPA '.&mt('Construction Space');      my $doctitle = 'LON-CAPA '.&mt('Authoring Space');
     my $newname = &mt('New Name');      my $newname = &mt('New Name');
     my $pubdirscript=(<<ENDPUBDIRSCRIPT);      my $pubdirscript=(<<ENDPUBDIRSCRIPT);
 <script type="text/javascript">  <script type="text/javascript">
Line 437  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 '..') {  
  $disfilename = '<i>'.&mt('Parent Directory').'</i>';  
     }  
 # Don't display directory itself, and there is no way up from root directory  # Don't display directory itself, and there is no way up from root directory
     unless ( (($dirname eq '..') && ($reqfile=~/^\/[^\/]+\/[^\/]+$/)) || ($dirname eq '.')) {      unless ((($dirname eq '..') && ($reqfile=~/^\/[^\/]+\/[^\/]+$/)) || ($dirname eq '.')) {
  my $kaputt=0;          my $kaputt=0;
  foreach (keys %{$bombs}) {          if (ref($bombs) eq 'HASH') {
     if ($_=~m:^\Q$resdir\E/\Q$disfilename\E/:) { $kaputt=1; last; }              foreach my $key (keys(%{$bombs})) {
  }                  my $currentdir = &Apache::lonnet::declutter("$targetdir/$disfilename");
                   if (($key) =~ m{^\Q$currentdir\E/}) { $kaputt=1; last; }
               }
           }
 #  #
 # Get the metadata from that directory's default.meta to display titles  # Get the metadata from that directory's default.meta to display titles
 #  #
Line 467  sub putdirectory { Line 481  sub putdirectory {
  &Apache::lonpublisher::metaeval(   &Apache::lonpublisher::metaeval(
                  &Apache::lonnet::getfile($r->dir_config('lonDocRoot').$here.'/'.$dirname.'/default.meta')                   &Apache::lonnet::getfile($r->dir_config('lonDocRoot').$here.'/'.$dirname.'/default.meta')
                                        );                                         );
 #          if ($dirname eq '..') {
         my $actionitem = '';  
         if ($here eq '..') {  
             $actionitem = &mt('Go to ...');              $actionitem = &mt('Go to ...');
               $disfilename = '<i>'.&mt('Parent Directory').'</i>';
         } else {          } else {
             $actionitem =               $actionitem = 
                     '<form name="dirselect_'.$$numdir.                      '<form name="dirselect_'.$$numdir.
Line 495  sub putdirectory { Line 508  sub putdirectory {
   '<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="3">'.($kaputt?&Apache::lonhtmlcommon::authorbombs($resdir.'/'.$disfilename.'/'):'').$Apache::lonpublisher::metadatafields{'title'});          '<td colspan="3">'.($kaputt?&Apache::lonhtmlcommon::authorbombs($targetdir.'/'.$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 518  sub putresource { Line 531  sub putresource {
     my $pubstatus = 'unpublished';      my $pubstatus = 'unpublished';
     my $status=&mt('Unpublished');      my $status=&mt('Unpublished');
     my $css_class='LC_browser_file';      my $css_class='LC_browser_file';
     my $title='&nbsp;';      my $title='';
     my $publish_button=&mt('Publish');      my $publish_button=&mt('Publish');
     my $cstr_dir = $r->dir_config('lonDocRoot').'/priv/'.$udom.'/'.$uname.'/'.$thisdisfn.'/';      my $cstr_dir = $r->dir_config('lonDocRoot').'/priv'.$thisdisfn;
     my $linkfilename=&HTML::Entities::encode('/priv'.$thisdisfn.'/'.$filename,'<>&"');      my $linkfilename=&HTML::Entities::encode('/priv'.$thisdisfn.'/'.$filename,'<>&"');
   
     if (-e $resdir.'/'.$filename) {      if (-e $resdir.'/'.$filename) {
Line 559  sub putresource { Line 572  sub putresource {
         $rights_status .=          $rights_status .=
             $lt_SourceRight{&getSourceRightString($targetdir.'/'.$filename)};              $lt_SourceRight{&getSourceRightString($targetdir.'/'.$filename)};
   
  $title = '<a href="/res/'.$targetdir.'/'.$filename.   $title = '<a href="'.$targetdir.'/'.$filename.
     '.meta" target="cat">'.      '.meta" target="cat">'.
     &getTitleString($targetdir.'/'.$filename).'</a>';      &getTitleString($targetdir.'/'.$filename).'</a>';
  if ($same) {   if ($same) {
Line 580  sub putresource { Line 593  sub putresource {
     $status=&mt('Modified').      $status=&mt('Modified').
  '<br />'. $rights_status;   '<br />'. $rights_status;
     if (&Apache::loncommon::fileembstyle(($filename=~/\.(\w+)$/)) eq 'ssi') {      if (&Apache::loncommon::fileembstyle(($filename=~/\.(\w+)$/)) eq 'ssi') {
  $status.='<br /><a href="/adm/diff?filename='.$linkfilename.   $status.='<br />'.
     '&amp;versiontwo=priv" target="cat">'.&mt('Diffs').'</a>';                           &Apache::loncommon::modal_link(
                                '/adm/diff?filename='.$linkfilename.'&amp;versiontwo=priv',
                                &mt('Diffs'),600,500);
     }      }
  }    } 
   
  $title.="\n".'<br /><a href="'.$linkfilename.'.meta">'.   
     ($$bombs{$targetdir.'/'.$filename}?'<img src="/adm/lonMisc/bomb.gif" border="0" alt="'.&mt('bomb').'" />':&mt('Edit Metadata')).'</a>';  
   
  if (!$meta_same) {   if (!$meta_same) {
     $title = &mt('Metadata Modified').'<br />'.$title.      $title = &mt('Metadata Modified').'<br />'.$title.
  '<br /><a href="/adm/diff?filename=/priv/'.$linkfilename.'.meta'.   '<br />'.
  '&amp;versiontwo=priv" target="cat">'.&mt('Metadata Diffs').'</a>';                  &Apache::loncommon::modal_link(
     $title.="\n".'<br /><a href="/adm/retrieve?filename='.$linkfilename.'.meta" target="_parent">'.&mt('Retrieve Metadata').'</a>';                      '/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);
  }   }
  $status.="\n".'<br /><a href="/adm/retrieve?filename='.$linkfilename.'" target="_parent">'.&mt('Retrieve').'</a>';   $status.="\n".'<br />'.
     }               &Apache::loncommon::modal_link(
                    '/adm/retrieve?filename='.$linkfilename.'&amp;inhibitmenu=yes&amp;add_modal=yes',&mt('Retrieve'),600,500);
       }
       # 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=~/\.(problem|exam|quiz|assess|survey|form|library)$/) {      if ($filename=~/$LONCAPA::assess_re/) {
  $editlink=' (<a href="'.$linkdir.'/'.$filename.'?forceedit=1" target="_parent">'.&mt('EditXML').'</a>)';   $editlink=' (<a href="'.$linkdir.'/'.$filename.'?editmode=Edit&amp;problemmode=editxml">'.&mt('EditXML').'</a>)';
  $editlink2=' <br />(<a href="'.$linkdir.'/'.$filename.'?forceColoredit=1" target="_parent">'.&mt('Edit').'</a>)';   $editlink2=' <br />(<a href="'.$linkdir.'/'.$filename.'?editmode=Edit&amp;problemmode=edit">'.&mt('Edit').'</a>)';
     }      }
     if ($filename=~/\.(problem|exam|quiz|assess|survey|form|library|xml|html|htm|xhtml|xhtm|sty)$/) {      if ($filename=~/\.(problem|exam|quiz|assess|survey|form|library|xml|html|htm|xhtml|xhtm|sty)$/) {
  $editlink.=' (<a href="/adm/cleanup?filename='.$linkfilename.'" target="_parent">'.&mt('Clean Up').')</a>';   $editlink.=' (<a href="/adm/cleanup?filename='.$linkfilename.'" target="_parent">'.&mt('Clean Up').')</a>';
Line 689  __END__ Line 715  __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 768  Output the header of the page.  This inc Line 794  Output the header of the page.  This inc
     $str = getTitleString($fullname);      $str = getTitleString($fullname);
         $fullname - Fully qualified filename to check.          $fullname - Fully qualified filename to check.
   
 =item putdirectory(r, base, here, dirname, modtime)  =item putdirectory($r, $base, $here, $dirname, $modtime, $targetdir, $bombs,
                      $numdir)
   
     Put out a directory table row:      Put out a directory table row:
           
     putdirectory($r, $base, $here, $dirname, $modtime)          $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).
   
 =back  =back
   

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


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