Diff for /loncom/publisher/lonpubdir.pm between versions 1.137 and 1.156

version 1.137, 2011/11/14 00:20:31 version 1.156, 2014/06/23 03:22:39
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 41  use Apache::lonlocal; Line 40  use Apache::lonlocal;
 use Apache::lonmsg;  use Apache::lonmsg;
 use Apache::lonmenu;  use Apache::lonmenu;
 use Apache::lonnet;  use Apache::lonnet;
 use LONCAPA;  use LONCAPA qw(:DEFAULT :match);
   
 sub handler {  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,$udom)=&Apache::lonnet::constructaccess($r->uri); 
   my $udom;      unless (($uname) && ($udom)) {
           return HTTP_NOT_ACCEPTABLE;
   ($uname,$udom)=&Apache::loncacc::constructaccess($r->uri);       }
   unless (($uname) && ($udom)) {  
      return HTTP_NOT_ACCEPTABLE;  
   }  
   
 # ----------------------------------------------------------- Start page output  # ----------------------------------------------------------- Start page output
   
   my $fn=$r->filename;      my $fn=$r->filename;
   $fn=~s/\/$//;      $fn=~s/\/$//;
       my $thisdisfn=$fn;
   my $thisdisfn=$fn;  
   my $docroot=$r->dir_config('lonDocRoot');     # Apache  londocument root.      my $docroot=$r->dir_config('lonDocRoot');     # Apache  londocument root.
   $thisdisfn=~s/^\Q$docroot\E\/priv//;      if ($thisdisfn eq "$docroot/priv/$udom") {
           if ((-d "/home/$uname/public_html/") && (!-e "$docroot/priv/$udom/$uname")) {
   my $resdir=$docroot.'/res'.$thisdisfn; # Resource directory              my ($version) = ($r->dir_config('lonVersion') =~ /^\'?(\d+\.\d+)\./);
   my $targetdir='/res'.$thisdisfn; # Publication target directory.              &Apache::loncommon::content_type($r,'text/html');
   my $linkdir='/priv'.$thisdisfn;      # Full URL name of constr space.              $r->send_http_header;
   
   my %bombs=&Apache::lonmsg::all_url_author_res_msg($uname,$udom);              &Apache::lonhtmlcommon::clear_breadcrumbs();
               $r->print(&Apache::loncommon::start_page('Authoring Space').
   &startpage($r, $uname, $udom, $thisdisfn);   # Put out the start of page.                        '<div class="LC_error">'.
   &dircontrols($r,$uname,$udom,$thisdisfn);    # Put out actions for directory,                         '<br /><p>'.
                                                # browse/upload + new file page.                        &mt('Your Authoring Space is currently in the location used by LON-CAPA version 2.10 and older, but your domain is using a newer LON-CAPA version ([_1]).',$version).'</p>'.
   &resourceactions($r,$uname,$udom,$thisdisfn); #Put out form used for printing/deletion etc.                        '<p>'.
                         &mt('Please ask your Domain Coordinator to move your Authoring Space to the new location.').
                         '</p>'.
                         '</div>'.
                         &Apache::loncommon::end_page());
               return OK;
           }
       }
       $thisdisfn=~s/^\Q$docroot\E\/priv//;
       
       my $resdir=$docroot.'/res'.$thisdisfn; # Resource directory
       my $targetdir='/res'.$thisdisfn; # Publication target directory.
       my $linkdir='/priv'.$thisdisfn;      # Full URL name of constr space.
   
       my %bombs=&Apache::lonmsg::all_url_author_res_msg($uname,$udom);
   
       &startpage($r, $uname, $udom, $thisdisfn);  # Put out the start of page.
       &dircontrols($r,$uname,$udom,$thisdisfn);   # Put out actions for directory, 
                                                   # browse/upload + new file page.
       &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.      # Retrieving value for "sortby" and "sortorder" from QUERY_STRING
   $r->print(&Apache::loncommon::start_data_table()      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
            .&Apache::loncommon::start_data_table_header_row()          ['sortby','sortorder']);
            .'<th>'.&mt('Type').'</th>'  
            .'<th>'.&mt('Actions').'</th>'      # Sort by name as default, not reversed
            .'<th>'.&mt('Name').'</th>'      if (! exists($env{'form.sortby'})) { $env{'form.sortby'} = 'filename' }
            .'<th>'.&mt('Title').'</th>'      if (! exists($env{'form.sortorder'})) { $env{'form.sortorder'} = '' }
            .'<th colspan="2">'.&mt('Status').'</th>'  
            .'<th>'.&mt('Last Modified').'</th>'      my $sortby = $env{'form.sortby'};
            .&Apache::loncommon::end_data_table_header_row()      my $sortorder = $env{'form.sortorder'};
   );  
       opendir(DIR,$fn);
   my $filename;      my @files = readdir(DIR);
   my $dirptr=16384; # Mask indicating a directory in stat.cmode.      closedir(DIR);
   
   opendir(DIR,$fn);      if ((@files == 0) && ($thisdisfn =~ m{^/$match_domain/$match_username})) {
   my @files=sort {uc($a) cmp uc($b)} (readdir(DIR));          $r->print('<p class="LC_info">'.&mt('This Authoring Space is currently empty.').'</p>');
   foreach my $filename (@files) {          $r->print(&Apache::loncommon::end_page());
      my ($cdev,$cino,$cmode,$cnlink,          return OK;
          $cuid,$cgid,$crdev,$csize,      }
          $catime,$cmtime,$cctime,  
          $cblksize,$cblocks)=stat($fn.'/'.$filename);      # Start off the directory table.
       $r->print(&Apache::loncommon::start_data_table()
      my $extension='';          .&Apache::loncommon::start_data_table_header_row()
      if ($filename=~/\.(\w+)$/) { $extension=$1; }          .'<th><a href="'.$linkdir.'/?sortby=filetype&sortorder='
      if ($cmode&$dirptr) {              .((($sortby eq "filetype") && ($sortorder ne 'rev')) ? 'rev' : '') 
  &putdirectory($r, $thisdisfn, $linkdir, $filename, $cmtime,$targetdir,\%bombs,\$numdir);              .'">'.&mt('Type')
      } elsif (&Apache::loncommon::fileembstyle($extension) ne 'hdn') {              .'<span class="LC_fontsize_small"> &#9660;</span></a></th>'
  &putresource($r, $udom, $uname, $filename, $thisdisfn, $resdir,           .'<th>'.&mt('Actions').'</th>'
      $targetdir, $linkdir, $cmtime,\%bombs,\$numres);          .'<th><a href="'.$linkdir.'/?sortby=filename&sortorder='
      } else {              .((($sortby eq "filename") && ($sortorder ne 'rev')) ? 'rev' : '') 
  # "hidden" extension and not a directory, so hide it away.              .'">'.&mt('Name')
      }              .'<span class="LC_fontsize_small"> &#9660;</span></a></th>'
   }          .'<th><a href="'.$linkdir.'/?sortby=title&sortorder='
   closedir(DIR);              .((($sortby eq "title") && ($sortorder ne 'rev')) ? 'rev' : '') 
               .'">'.&mt('Title')
   $r->print(&Apache::loncommon::end_data_table()              .'<span class="LC_fontsize_small"> &#9660;</span></a></th>'
            .&Apache::loncommon::end_page()          .'<th colspan="2"><a href="'.$linkdir.'/?sortby=pubstatus&sortorder='
   );              .((($sortby eq "pubstatus") && ($sortorder ne 'rev')) ? 'rev' : '') 
   return OK;                .'">'.&mt('Status')
               .'<span class="LC_fontsize_small"> &#9660;</span></a></th>'
           .'<th><a href="'.$linkdir.'/?sortby=cmtime&sortorder='
               .((($sortby eq "cmtime") && ($sortorder ne 'rev')) ? 'rev' : '') 
               .'">'.&mt('Last Modified')
               .'<span class="LC_fontsize_small"> &#9660;</span></a></th>'
           .'<th><a href="'.$linkdir.'/?sortby=size&sortorder='
               .((($sortby eq "size") && ($sortorder ne 'rev')) ? 'rev' : '') 
               .'">'.&mt('Size').' (kB)'
               .'<span class="LC_fontsize_small"> &#9660;</span></a></th>'
           .&Apache::loncommon::end_data_table_header_row()
       );
   
       my $dirptr=16384; # Mask indicating a directory in stat.cmode.
       my $filehash = {};
       foreach my $filename (@files) {
           # Skip .DS_Store and hidden files
           my ($extension) = ($filename=~/\.(\w+)$/);
           next if (($filename eq '.DS_Store')
                   || (&Apache::loncommon::fileembstyle($extension) eq 'hdn')
                   || ($filename =~ /^\._/));
   
           my ($cmode,$csize,$cmtime)=(stat($fn.'/'.$filename))[2,7,9];
           my $linkfilename = &HTML::Entities::encode('/priv'.$thisdisfn.'/'.$filename,'<>&"');
           # Identify type of file according to icon used
           my ($filetype) = (&Apache::loncommon::icon($filename) =~ m{/(\w+).gif$}); 
           my $cstr_dir = $r->dir_config('lonDocRoot').'/priv'.$thisdisfn;
           my $meta_same = &isMetaSame($cstr_dir, $resdir, $filename);
           
           # Store size, title, and status for files but not directories
           my $size = (!($cmode&$dirptr)) ? $csize/1024. : 0;
           my ($status, $pubstatus, $title, $fulltitle);
           if (!($cmode&$dirptr)) {
               ($status, $pubstatus) = &getStatus($resdir, $targetdir, $cstr_dir, 
                   $filename, $linkfilename, $cmtime, $meta_same);
               ($fulltitle, $title) = &getTitle($resdir, $targetdir, $filename, 
                                           $linkfilename, $meta_same, \%bombs);
           } else {
               ($status, $pubstatus) = ('','');
               ($fulltitle, $title) = ('','');
           }
   
           # This hash will allow sorting
           $filehash->{ $filename } = {
               "cmtime"            => $cmtime,
               "size"              => $size,
               "cmode"             => $cmode,
               "filetype"          => $filetype,
               "title"             => $title,
               "fulltitle"         => $fulltitle,
               "status"            => $status,
               "pubstatus"         => $pubstatus,
               "linkfilename"      => $linkfilename,
           }
       }
      
       my @sorted_files;
       # Sorting by something other than "Name".  Name is the secondary key.
       if ($sortby =~ m{cmtime|size}) {    # Numeric fields
           # First check if order should be reversed
           if ($sortorder eq "rev") {
               @sorted_files = sort {
                   $filehash->{$a}->{$sortby} <=> $filehash->{$b}->{$sortby}
                       or
                   uc($a) cmp uc($b)
               } (keys(%{$filehash}));
           } else {
               @sorted_files = sort {
                   $filehash->{$b}->{$sortby} <=> $filehash->{$a}->{$sortby}
                       or
                   uc($a) cmp uc($b)
               } (keys(%{$filehash}));
           }
       } elsif ($sortby =~ m{filetype|title|status}) {     # String fields
           if ($sortorder eq "rev") {
               @sorted_files = sort {
                   $filehash->{$b}->{$sortby} cmp $filehash->{$a}->{$sortby}
                       or
                   uc($a) cmp uc($b)
               } (keys(%{$filehash}));
           } else {
               @sorted_files = sort {
                   $filehash->{$a}->{$sortby} cmp $filehash->{$b}->{$sortby}
                       or
                   uc($a) cmp uc($b)
               } (keys(%{$filehash}));
           }
   
       # Sort by "Name" is the default
       } else { 
           if ($sortorder eq "rev") {
               @sorted_files = sort {uc($b) cmp uc($a)} (keys(%{$filehash}));
           } else {
               @sorted_files = sort {uc($a) cmp uc($b)} (keys(%{$filehash}));
           }
       }
   
       # Print the sorted resources
       foreach my $filename (@sorted_files) {
           if ($filehash->{$filename}->{"cmode"}&$dirptr) {        # Directories
               &putdirectory($r, $thisdisfn, $linkdir, $filename, 
                   $filehash->{$filename}->{"cmtime"}, 
                   $targetdir, \%bombs, \$numdir);
           } else {                                                # Files
               &putresource($r, $udom, $uname, $filename, $thisdisfn, $resdir,
                   $targetdir, $linkdir, $filehash->{$filename}->{"cmtime"}, 
                   $filehash->{$filename}->{"size"}, \$numres, 
                   $filehash->{$filename}->{"linkfilename"},
                   $filehash->{$filename}->{"fulltitle"},
                   $filehash->{$filename}->{"status"},
                   $filehash->{$filename}->{"pubstatus"});
           }
       }
   
       $r->print( &Apache::loncommon::end_data_table()
           .&Apache::loncommon::end_page() );
   
       return OK;
 }  }
   
 #  
   
 #   Output the header of the page.  This includes:  #   Output the header of the page.  This includes:
 #   - The HTML header   #   - The HTML header 
 #   - The H1/H3  stuff which includes the directory.  #   - The H1/H3  stuff which includes the directory.
Line 144  sub startpage { Line 277  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($formaction),          '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'));
   
       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()));                       '<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 458  sub putdirectory { Line 599  sub putdirectory {
     my $disfilename = $dirname;      my $disfilename = $dirname;
 # 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;
         if (ref($bombs) eq 'HASH') {          if (ref($bombs) eq 'HASH') {
     foreach my $key (keys(%{$bombs})) {              foreach my $key (keys(%{$bombs})) {
         if ($key =~ m{^\Q$targetdir/$disfilename\E/}) { $kaputt=1; last; }                  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 507  sub putdirectory { Line 649  sub putdirectory {
  }   }
  $r->print($Apache::lonpublisher::metadatafields{'keywords'}.'</td>'.   $r->print($Apache::lonpublisher::metadatafields{'keywords'}.'</td>'.
   '<td>'.&Apache::lonlocal::locallocaltime($modtime).'</td>'.    '<td>'.&Apache::lonlocal::locallocaltime($modtime).'</td>'.
             '<td></td>'.
   "</tr>\n");    "</tr>\n");
     }      }
     return OK;      return;
 }  }
 #  
 #   Put a table row for a file resource.  sub getTitle {
 #      my ($resdir, $targetdir, $filename, $linkfilename, $meta_same, $bombs) = @_;
 sub putresource {      my $title='';
     my ($r, $udom, $uname, $filename, $thisdisfn,       my $titleString = &getTitleString($targetdir.'/'.$filename);
  $resdir, $targetdir, $linkdir,      if (-e $resdir.'/'.$filename) {
  $cmtime,$bombs,$numres) = @_;   $title = '<a href="'.$targetdir.'/'.$filename.
     &Apache::lonnet::devalidate_cache_new('meta',$targetdir.'/'.$filename);      '.meta" target="cat">'.$titleString.'</a>';
           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);
           } 
       }
       # 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>';
   
       return ($title, $titleString);
   }
   
   
   sub isMetaSame {
       my ($cstr_dir, $resdir, $filename) = @_;
       my $meta_cmtime = (stat($cstr_dir.'/'.$filename.'.meta'))[9];
       my $meta_rmtime = (stat($resdir.'/'.$filename.'.meta'))[9];
       return (&Apache::londiff::are_different_files($resdir.'/'.$filename.'.meta',
               $cstr_dir.'/'.$filename.'.meta') && $meta_rmtime < $meta_cmtime) 
           ? 0 : 1;
   }
       
   
   sub getStatus {    
       my ($resdir, $targetdir, $cstr_dir, $filename,  
               $linkfilename, $cmtime, $meta_same) = @_;
     my $pubstatus = 'unpublished';      my $pubstatus = 'unpublished';
     my $status=&mt('Unpublished');      my $status = &mt('Unpublished');
     my $css_class='LC_browser_file';  
     my $title='&nbsp;';  
     my $publish_button=&mt('Publish');  
     my $cstr_dir = $r->dir_config('lonDocRoot').'/priv/'.$udom.'/'.$uname.'/'.$thisdisfn.'/';  
     my $linkfilename=&HTML::Entities::encode('/priv'.$thisdisfn.'/'.$filename,'<>&"');  
   
     if (-e $resdir.'/'.$filename) {      if (-e $resdir.'/'.$filename) {
         my $same=0;          my $same = 0;
  my ($rdev,$rino,$rmode,$rnlink,          if ((stat($resdir.'/'.$filename))[9] >= $cmtime) {
     $ruid,$rgid,$rrdev,$rsize,              $same = 1;
     $ratime,$rmtime,$rctime,  
     $rblksize,$rblocks)=stat($resdir.'/'.$filename);  
         if ($rmtime>=$cmtime) {  
            $same=1;  
         } else {          } else {
            if (&Apache::londiff::are_different_files($resdir.'/'.$filename,             if (&Apache::londiff::are_different_files($resdir.'/'.$filename,
      $cstr_dir.'/'.$filename)) {       $cstr_dir.'/'.$filename)) {
               $same=0;                $same = 0;
            } else {             } else {
               $same=1;                $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');  
   
         my $rights_status =          my $rights_status =
             &mt(&getCopyRightString($targetdir.'/'.$filename)).', ';              &mt(&getCopyRightString($targetdir.'/'.$filename)).', ';
Line 563  sub putresource { Line 725  sub putresource {
         $rights_status .=          $rights_status .=
             $lt_SourceRight{&getSourceRightString($targetdir.'/'.$filename)};              $lt_SourceRight{&getSourceRightString($targetdir.'/'.$filename)};
   
  $title = '<a href="'.$targetdir.'/'.$filename.  
     '.meta" target="cat">'.  
     &getTitleString($targetdir.'/'.$filename).'</a>';  
  if ($same) {   if ($same) {
     if (&Apache::lonnet::metadata($targetdir.'/'.$filename,'obsolete')) {      if (&Apache::lonnet::metadata($targetdir.'/'.$filename,'obsolete')) {
                 $pubstatus = 'obsolete';                  $pubstatus = 'obsolete';
Line 584  sub putresource { Line 743  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">'.    $status.="\n".'<br />'.
     ($$bombs{$targetdir.'/'.$filename}?'<img src="/adm/lonMisc/bomb.gif" border="0" alt="'.&mt('bomb').'" />':&mt('Edit Metadata')).'</a>';               &Apache::loncommon::modal_link(
                    '/adm/retrieve?filename='.$linkfilename.'&amp;inhibitmenu=yes&amp;add_modal=yes',&mt('Retrieve'),600,500);
  if (!$meta_same) {  
     $title = &mt('Metadata Modified').'<br />'.$title.  
  '<br /><a href="/adm/diff?filename=/priv/'.$linkfilename.'.meta'.  
  '&amp;versiontwo=priv" target="cat">'.&mt('Metadata Diffs').'</a>';  
     $title.="\n".'<br /><a href="/adm/retrieve?filename='.$linkfilename.'.meta" target="_parent">'.&mt('Retrieve Metadata').'</a>';  
  }  
  $status.="\n".'<br /><a href="/adm/retrieve?filename='.$linkfilename.'" target="_parent">'.&mt('Retrieve').'</a>';  
     }      }
   
       return ($status, $pubstatus);
   }
   
   
   #
   #   Put a table row for a file resource.
   #
   sub putresource {
       my ($r, $udom, $uname, $filename, $thisdisfn, $resdir, $targetdir, 
               $linkdir, $cmtime, $size, $numres, $linkfilename, $title, 
               $status, $pubstatus) = @_;
       &Apache::lonnet::devalidate_cache_new('meta',$targetdir.'/'.$filename);
   
     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/) {      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 615  sub putresource { Line 783  sub putresource {
     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='.$linkfilename.'">'.&mt('Decompress').'</a>)';   $editlink=' (<a target="_parent" href="/adm/cfile?decompress='.$linkfilename.'">'.&mt('Decompress').'</a>)';
     }      }
       my $publish_button = (-e $resdir.'/'.$filename) ? &mt('Re-publish') : &mt('Publish');
     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(&Apache::loncommon::start_data_table_row().      $r->print(&Apache::loncommon::start_data_table_row().
Line 629  sub putresource { Line 798  sub putresource {
               '<td class="LC_browser_file_'.$pubstatus.'">&nbsp;&nbsp;</td>'. # Display publication status                '<td class="LC_browser_file_'.$pubstatus.'">&nbsp;&nbsp;</td>'. # Display publication status
               '<td>'.$status.'</td>'.                '<td>'.$status.'</td>'.
       '<td>'.&Apache::lonlocal::locallocaltime($cmtime).'</td>'.        '<td>'.&Apache::lonlocal::locallocaltime($cmtime).'</td>'.
         '<td>'.sprintf("%.1f",$size).'</td>'.
       &Apache::loncommon::end_data_table_row()        &Apache::loncommon::end_data_table_row()
     );      );
     return OK;      return;
 }  }
   
 sub create_pubselect {  sub create_pubselect {
Line 684  sub check_for_versions { Line 854  sub check_for_versions {
             $versions ++;                      $versions ++;        
         }          }
     }      }
       closedir(DIR);
     return $versions;      return $versions;
 }  }
   
Line 693  __END__ Line 864  __END__
   
 =head1 NAME  =head1 NAME
   
 Apache::lonpubdir - Construction space directory lister  Apache::lonpubdir - Authoring space directory lister
   
 =head1 SYNOPSIS  =head1 SYNOPSIS
   
Line 790  Output the header of the page.  This inc Line 961  Output the header of the page.  This inc
 =back  =back
   
 =cut  =cut
   

Removed from v.1.137  
changed lines
  Added in v.1.156


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