Diff for /loncom/publisher/loncfile.pm between versions 1.127 and 1.129

version 1.127, 2023/07/14 23:20:15 version 1.129, 2024/05/21 02:57:16
Line 70  use HTML::Entities(); Line 70  use HTML::Entities();
 use Apache::Constants qw(:common :http :methods);  use Apache::Constants qw(:common :http :methods);
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::loncommon();  use Apache::loncommon();
   use Apache::lonhtmlcommon;
 use Apache::lonlocal;  use Apache::lonlocal;
 use LONCAPA qw(:DEFAULT :match);  use LONCAPA qw(:DEFAULT :match);
   
   
 my $DEBUG=0;  my $DEBUG=0;
 my $r; # Needs to be global for some stuff RF.  my $r; # Needs to be global for some stuff RF.
   
Line 819  sub Decompress1 { Line 819  sub Decompress1 {
     }      }
 }  }
   
   sub Archive1 {
       my ($request,$fn) = @_;
       my @posstypes = qw(problem library sty sequence page task rights meta xml html xhtml htm xhtm css js tex txt gif jpg jpeg png svg other);
       my (%location_of,%defaults);
       my ($compstyle,$canarchive,$cancompress,$numformat,$numcompress,$defext) =
           &archive_tools(\%location_of,\%defaults);
       if (!$canarchive) {
           $request->print('<p class="LC_error">'.
                           &mt('This LON-CAPA instance does not seem to have either tar or zip installed.').'</p>'."\n".
                           '<span class="LC_warning">'.
                           &mt('At least one of the two is needed in order to be able to create an archive file for: [_1].',
                               &display($fn))."\n".
                           '</span></form>');
       } elsif (-e $fn) {
           $request->print('<input type="hidden" name="adload" value="" />'."\n".
                           &Apache::lonhtmlcommon::start_pick_box().
                           &Apache::lonhtmlcommon::row_title(&mt('Directory')).
                           &display($fn).
                           &Apache::lonhtmlcommon::row_closure().
                           &Apache::lonhtmlcommon::row_title(&mt('Options').
                           &Apache::loncommon::help_open_topic('Archiving_Directory_Options')).
                           '<fieldset><legend>'.&mt('Recurse').'</legend>'.
                           '<span class="LC_nobreak"><label><input type="checkbox" name="recurse" /> '.
                           &mt('include subdirectories').'</label></span>'.
                           '</fieldset>'.
                           '<fieldset><legend>'.&mt('File types (extensions) to include').('&nbsp;'x2).
                           '<span style="text-decoration:line-through">'.('&nbsp;'x5).'</span>'.('&nbsp;'x2).
                           '<input type="button" name="checkall" value="'.&mt('check all').
                           '" style="height:20px;" onclick="checkAll(document.phaseone.filetype);" />'.
                           ('&nbsp;'x2).
                           '<input type="button" name="uncheckall" value="'.&mt('uncheck all').
                           '" style="height:20px;" onclick="uncheckAll(document.phaseone.filetype);" /></legend>'.
                           '<table>');
           my $rem;
           my $numinrow = 6;
           for (my $i=0; $i<@posstypes; $i++) {
               my $rem = $i%($numinrow);
               if ($rem == 0) {
                  if ($i > 0) {
                       $request->print('</tr>'."\n");
                  }
                  $request->print('<tr>'."\n");
               }
               $request->print('<td class="LC_left_item">'.
                               '<span class="LC_nobreak"><label>'.
                               '<input type="checkbox" name="filetype" '.
                               'value="'.$posstypes[$i].'" /> '.
                               $posstypes[$i].'</label></span></td>'."\n");
           }
           $rem = scalar(@posstypes)%($numinrow);
           my $colsleft;
           if ($rem) {
               $colsleft = $numinrow - $rem;
           }
           if ($colsleft > 1 ) {
               $request->print('<td colspan="'.$colsleft.'" class="LC_left_item">'.
                               '&nbsp;</td>'."\n");
           } elsif ($colsleft == 1) {
               $request->print('<td class="LC_left_item">&nbsp;</td>'."\n");
           }
           $request->print('</tr></table>'."\n".
                           '</fieldset>'.
                           '<fieldset><legend>'.&mt('Archive file format').'</legend>');
           foreach my $possfmt ('tar','zip') {
               if (exists($location_of{$possfmt})) {
                   $request->print('<span class="LC_nobreak">'.
                                   '<label><input type="radio" name="format" value="'.$possfmt.'"'.
                                   $defaults{$possfmt}.' onclick="toggleCompression(this.form);" /> '.
                                   $possfmt.'</label></span>&nbsp;&nbsp; ');
               }
           }
           $request->print('</fieldset>'."\n".
                           '<fieldset style="display:'.$compstyle.'" id="tar_compression">'.
                           '<legend>'.&mt('Compression to apply to tar file').'</legend>'.
                           '<span class="LC_nobreak">');
           if ($cancompress) { 
               foreach my $compress ('gzip','bzip2','xz') {
                   if (exists($location_of{$compress})) {
                       $request->print('<label><input type="radio" name="compress" value="'.$compress.'"'.
                                       $defaults{$compress}.' onclick="setArchiveExt(this.form);"  />'.
                                       $compress.'</label>&nbsp;&nbsp;');
                   }
               }
           } else {
               $request->print('<span class="LC_warning">'.
                               &mt('This LON-CAPA instance does not seem to have gzip, bzip2 or xz installed.').
                               '<br />'.&mt('No compression will be used.').'</span>');
           }
           $request->print('</fieldset>'."\n".
                           '<fieldset style="display:none" id="archive_saveas">'.
                           '<legend>'.&mt('Filename to download').'</legend>'.
                           '<table style="border-spacing:0"><tr><td style="padding:0;">'.&mt('Name').'<br />'."\n".
                           '<input type="text" name="archivefname" value="" size="8" /></td><td style="padding:0;">'.
                           &mt('Extension').'<br />'."\n".
                           '<input type="text" name="archiveext" id="archiveext" value="" size="4" readonly="readonly" />'.
                           '</td></tr></table></fieldset>'."\n".
                           &Apache::lonhtmlcommon::row_closure(1).
                           &Apache::lonhtmlcommon::end_pick_box().'<br />'."\n"
           );
           &CloseForm1($request, $fn);
       } else {
           $request->print('<p class="LC_error">'
                          .&mt('No such directory: [_1]',
                               &display($fn))
                          .'</p></form>'
           );
       }
       return;
   }
   
   sub archive_tools {
       my ($location_of,$defaults) = @_;
       my ($compstyle,$canarchive,$cancompress,$numformat,$numcompress,$defext);
       ($numformat,$numcompress) = (0,0);
       if ((ref($location_of) eq 'HASH') && (ref($defaults) eq 'HASH')) {
           foreach my $program ('tar','gzip','bzip2','xz','zip') {
               foreach my $dir ('/bin/','/usr/bin/','/usr/local/bin/','/sbin/',
                                '/usr/sbin/') {
                   if (-x $dir.$program) {
                       $location_of->{$program} = $dir.$program;
                       last;
                   }
               }
           }
           foreach my $format ('tar','zip') {
               if (exists($location_of->{$format})) {
                   unless ($canarchive) {
                       $defext = $format;
                       $defaults->{$format} = ' checked="checked"';
                       if ($format eq 'tar') {
                           $compstyle = 'block';
                       } else {
                           $compstyle = 'none';
                       }
                   }
                   $canarchive = 1;
                   $numformat ++;
               }
           }
           foreach my $compress ('gzip','bzip2','xz') {
               if (exists($location_of->{$compress})) {
                   $numcompress ++;
                   unless ($cancompress) {
                       if ($defext eq 'tar') {
                           if ($compress eq 'gzip') {
                               $defext .= '.gz';
                           } elsif ($compress eq 'bzip2') {
                               $defext .= '.bz2';
                           } else {
                               $defext .= ".$compress";
                           }
                       }
                       $defaults->{$compress} = ' checked="checked"';
                       $cancompress = 1;
                   }
               }
           }
       }
       if (wantarray) {
           return ($compstyle,$canarchive,$cancompress,$numformat,$numcompress,$defext);
       } else {
           return $defext;
       }
   }
   
   sub archive_in_progress {
       my ($earlyout,$idnum);
       if ($env{'cgi.author.archive'} =~ /^(\d+)_\d+_\d+$/) {
           my $timestamp = $1;
           $idnum = $env{'cgi.author.archive'};
           if (exists($env{'cgi.'.$idnum.'.archive'})) {
               my $hashref = &Apache::lonnet::thaw_unescape($env{'cgi.'.$idnum.'.archive'});
               my $lonprtdir = $Apache::lonnet::perlvar{'lonPrtDir'};
               if (-e $lonprtdir.'/'.$env{'user.name'}.'_'.$env{'user.domain'}.'_archive_'.$idnum.'.txt') {
                   $earlyout = $timestamp;
               } elsif (ref($hashref) eq 'HASH') {
                   my $suffix = $hashref->{'extension'};
                   if (-e $lonprtdir.'/'.$env{'user.name'}.'_'.$env{'user.domain'}.'_archive_'.$idnum.$suffix) {
                       $earlyout = $timestamp;
                   }
               }
               unless ($earlyout) {
                   &Apache::lonnet::delenv('cgi.'.$idnum.'.archive');
                   &Apache::lonnet::delenv('cgi.author.archive');
               }
           } else {
               &Apache::lonnet::delenv('cgi.author.archive');
           }
       }
       return ($earlyout,$idnum);
   }
   
   sub cancel_archive_form {
       my ($r,$title,$fname,$earlyout,$idnum) = @_;
       $r->print('<h2>'.$title.'</h2>'."\n".
                 '<form action="/adm/cfile" method="post" onsubmit="return confirmation(this);">'."\n".
                 '<input type="hidden" name="filename" value="'.$fname.'" />'."\n".
                 '<input type="hidden" name="action" value="'.$env{'form.action'}.'" />'."\n".
                 '<p>'.&mt('Each author may only have one archive request in process at a time.')."\n".'<ul>'.
                 '<li>'.&mt('An incomplete archive request was begun: [_1].',
                            &Apache::lonlocal::locallocaltime($earlyout)).
                 '</li>'."\n".
                 '<li>'.&mt('An archive request is considered complete when the archive file has been successfully downloaded.').'</li>'."\n".
                 '<li>'.
                 &mt('To submit a new archive request, either wait for the existing request (e.g., in another tab/window) to complete, or remove it.').'</li>'."\n".
                 '</ul></p>'."\n".
                 '<p><span class="LC_nobreak">'.&mt('Remove existing archive request?').'&nbsp;'."\n".
                 '<label><input type="radio" name="remove_archive_request" value="'.$idnum.'" />'.&mt('Yes').'</label>'.
                 ('&nbsp;'x2)."\n".
                 '<label><input type="radio" name="remove_archive_request" value="" checked="checked" />'.&mt('No').'</label></span></p>'."\n".
                 '<br />');
   }
   
 =pod  =pod
   
 =item NewFile1  =item NewFile1
Line 994  sub phaseone { Line 1207  sub phaseone {
                   '</a></p>');                    '</a></p>');
         return;          return;
     }      }
     $r->print('<form action="/adm/cfile" method="post">'.      $r->print('<form action="/adm/cfile" method="post" name="phaseone">'."\n".
       '<input type="hidden" name="qualifiedfilename" value="'.$fn.'" />'.        '<input type="hidden" name="qualifiedfilename" value="'.$fn.'" />'."\n".
       '<input type="hidden" name="phase" value="two" />'.        '<input type="hidden" name="phase" value="two" />'."\n".
       '<input type="hidden" name="action" value="'.$env{'form.action'}.'" />');        '<input type="hidden" name="action" value="'.$env{'form.action'}.'" />'."\n");
   
     if ($env{'form.action'} eq 'newfile' ||      if ($env{'form.action'} eq 'newfile' ||
         $env{'form.action'} eq 'newhtmlfile' ||          $env{'form.action'} eq 'newhtmlfile' ||
Line 1033  sub phaseone { Line 1246  sub phaseone {
     &Delete1($r, $uname, $udom, $fn);      &Delete1($r, $uname, $udom, $fn);
         } elsif ($env{'form.action'} eq 'decompress') {          } elsif ($env{'form.action'} eq 'decompress') {
     &Decompress1($r, $uname, $udom, $fn);      &Decompress1($r, $uname, $udom, $fn);
           } elsif ($env{'form.action'} eq 'archive') {
               &Archive1($r,$fn);
         } elsif ($env{'form.action'} eq 'copy') {          } elsif ($env{'form.action'} eq 'copy') {
     if ($newfilename) {      if ($newfilename) {
         &Copy1($r, $uname, $udom, $fn, $newfilename);          &Copy1($r, $uname, $udom, $fn, $newfilename);
Line 1310  sub decompress2 { Line 1525  sub decompress2 {
     return 1;      return 1;
 }  }
   
   sub Archive2 {
       my ($r,$uname,$udom,$fn,$identifier) = @_;
       my %options = (
                       dir => $fn,
                       uname => $uname,
                       udom => $udom,
                     );
       if ($env{'form.adload'}) {
           $options{'adload'} = 1;
           if ($env{'form.archivefname'} ne '') {
               $env{'form.archivefname'} =~ s{\.+}{.}g;
               $options{'fname'} = $env{'form.archivefname'};
           }
           if ($env{'form.archiveext'} ne '') {
               $options{'extension'} = $env{'form.archiveext'};
           }
       }
       my @filetypes = qw(problem library sty sequence page task rights meta xml html xhtml htm xhtm css js tex txt gif jpg jpeg png svg other);
       my (@include,%oktypes);
       map { $oktypes{$_} = 1; } @filetypes;
       my @posstypes = &Apache::loncommon::get_env_multiple('form.filetype');
       foreach my $type (@posstypes) {
           if ($oktypes{$type}) {
               push(@include,$type);
           }
       }
       if (scalar(@include) == scalar(@filetypes)) {
           $options{'types'} = 'all';
       } else {
           $options{'types'} = join(',',@include);
       }
       if (exists($env{'form.recurse'})) {
           $options{'recurse'} = 1;
       }
       if (exists($env{'form.encrypt'})) {
           if ($env{'form.enckey'} ne '') {
               $options{'encrypt'} = $env{'form.enckey'};
           }
       }
       $options{'format'} = 'tar';
       $options{'compress'} = 'gzip';
       if ((exists($env{'form.format'})) && $env{'form.format'} =~ /^zip$/i) {
           $options{'format'} = 'zip';
           delete($options{'compress'});
       } elsif ((exists($env{'form.compress'})) && ($env{'form.compress'} =~ /^(xz|bzip2)$/i)) {
           $options{'compress'} = lc($env{'form.compress'});  
       }
       my $key = 'cgi.'.$identifier.'.archive';
       my $storestring = &Apache::lonnet::freeze_escape(\%options);
       &Apache::lonnet::appenv({$key => $storestring,
                                'cgi.author.archive' => $identifier});
       return 1;
   }
   
   sub Archive3 {
       my ($hashref) = @_;
       if (ref($hashref) eq 'HASH') {
           if (($hashref->{'uname'} eq $env{'user.name'}) &&
               ($hashref->{'udom'} eq $env{'user.domain'}) &&
               ($env{'environment.canarchive'}) &&
               ($env{'form.delarchive'})) {
               my $filesdest = $Apache::lonnet::perlvar{'lonPrtDir'}.'/'.$env{'user.name'}.'_'.$env{'user.domain'}.'_archive_'.$env{'form.delarchive'};
               if (-e $filesdest) {
                   my $size = (stat($filesdest))[7];
                   if (unlink($filesdest)) {
                       my ($identifier,$suffix) = split(/\./,$env{'form.delarchive'},2);
                       if (($identifier) && (exists($env{'cgi.'.$identifier.'.archive'}))) {
                           my $delres = &Apache::lonnet::delenv('cgi.'.$identifier.'.archive');
                           if (($delres eq 'ok') &&
                               (exists($env{'cgi.author.archive'})) &&
                               ($env{'cgi.author.archive'} eq $identifier)) {
                               &Apache::lonnet::authorarchivelog($hashref,$size,$filesdest,'delete');
                               &Apache::lonnet::delenv('cgi.author.archive');
                           }
                       }
                       return 1;
                   }
               }
           }
       }
       return 0;
   }
   
 =pod  =pod
   
 =item phasetwo($r, $fn, $uname, $udom)  =item phasetwo($r, $fn, $uname, $udom,$identifier)
   
    Controls the phase 2 processing of file management     Controls the phase 2 processing of file management
    requests for construction space.  In phase one, the user     requests for construction space.  In phase one, the user
Line 1343  Parameters: Line 1641  Parameters:
 =cut  =cut
   
 sub phasetwo {  sub phasetwo {
     my ($r,$fn,$uname,$udom)=@_;      my ($r,$fn,$uname,$udom,$identifier)=@_;
   
     &Debug($r, "loncfile - Entering phase 2 for $fn");      &Debug($r, "loncfile - Entering phase 2 for $fn");
   
Line 1380  sub phasetwo { Line 1678  sub phasetwo {
     return ;      return ;
  }   }
  $dest = $dir."/.";   $dest = $dir."/.";
       } elsif ($env{'form.action'} eq 'archive') {
           &Archive2($r,$uname,$udom,$fn,$identifier);
           return;
     } elsif ($env{'form.action'} eq 'rename' ||      } elsif ($env{'form.action'} eq 'rename' ||
      $env{'form.action'} eq 'move') {       $env{'form.action'} eq 'move') {
  if($env{'form.newfilename'}) {   if($env{'form.newfilename'}) {
Line 1454  sub handler { Line 1755  sub handler {
 #  #
 # Determine the root filename  # Determine the root filename
 # This could come in as "filename", which actually is a URL, or  # This could come in as "filename", which actually is a URL, or
 # as "qualifiedfilename", which is indeed a real filename in filesystem  # as "qualifiedfilename", which is indeed a real filename in filesystem,
   # or in value of decompress form element, or need to be extracted
   # from %env from hashref retrieved for cgi.<id>.archive key, where id
   # is a unique cgi_id created when an Author creates an archive of
   # Authoring Space for download.
 #  #
     my $fn;      my ($fn,$archiveref);
   
     if ($env{'form.filename'}) {      if ($env{'form.filename'}) {
  &Debug($r, "test: $env{'form.filename'}");   &Debug($r, "test: $env{'form.filename'}");
  $fn=&unescape($env{'form.filename'});   $fn=&unescape($env{'form.filename'});
  $fn=&URLToPath($fn);   $fn=&URLToPath($fn);
     }  elsif($ENV{'QUERY_STRING'} && $env{'form.phase'} ne 'two') {      } elsif ($env{'form.delarchive'}) {
           my ($delarchive,$suffix) = split(/\./,$env{'form.delarchive'});
           if (($delarchive) && (exists($env{'cgi.'.$delarchive.'.archive'}))) {
               $archiveref = &Apache::lonnet::thaw_unescape($env{'cgi.'.$delarchive.'.archive'});
               if (ref($archiveref) eq 'HASH') {
                   $fn = $archiveref->{'dir'};
               }
           }
       } elsif($ENV{'QUERY_STRING'} && $env{'form.phase'} ne 'two') {
  #Just hijack the script only the first time around to inject the   #Just hijack the script only the first time around to inject the
  #correct information for further processing   #correct information for further processing
  $fn=&unescape($env{'form.decompress'});   $fn=&unescape($env{'form.decompress'});
Line 1496  sub handler { Line 1809  sub handler {
        $r->filename);         $r->filename);
  return HTTP_NOT_ACCEPTABLE;   return HTTP_NOT_ACCEPTABLE;
     }      }
       if (($env{'form.delarchive'}) &&
           ($env{'environment.canarchive'})) {
           &Apache::loncommon::content_type($r,'text/plain');
           $r->send_http_header;
           $r->print(&Archive3($archiveref));
           return OK;
       }
   
     &Apache::loncommon::content_type($r,'text/html');      &Apache::loncommon::content_type($r,'text/html');
     $r->send_http_header;      $r->send_http_header;
   
     my (%loaditem,$js);  # Declarations for items used for directory archive requests
       my ($js,$identifier,$defext,$archive_earlyout,$archive_idnum);
       my $args = {};
   
     if ( ($env{'form.action'} eq 'newdir') && ($env{'form.phase'} eq 'two') && ( ($env{'form.callingmode'} eq 'testbank') || ($env{'form.callingmode'} eq 'imsimport') ) ) {      if (($env{'form.action'} eq 'newdir') && ($env{'form.phase'} eq 'two') && 
           (($env{'form.callingmode'} eq 'testbank') || ($env{'form.callingmode'} eq 'imsimport'))) {
  my $newdirname = $env{'form.newfilename'};   my $newdirname = $env{'form.newfilename'};
  $js = qq|          &js_escape(\$newdirname);
    $js = <<"ENDJS";
 <script type="text/javascript">  <script type="text/javascript">
   // <![CDATA[
 function writeDone() {  function writeDone() {
     window.focus();      window.focus();
     opener.document.info.newdir.value = "$newdirname";      opener.document.info.newdir.value = "$newdirname";
     setTimeout("self.close()",10000);      setTimeout("self.close()",10000);
 }  }
   </script>  // ]]>
 |;  </script>
  $loaditem{'onload'} = "writeDone()";  ENDJS
           $args->{'add_entries'} = { onload => "writeDone()" };
       } elsif (($env{'form.action'} eq 'archive') &&
                ($env{'environment.canarchive'})) {
   # Check if author already has an archive request in process
           ($archive_earlyout,$archive_idnum) = &archive_in_progress();
   # Check if archive request was in process which author wishes to terminate
           if ($env{'form.remove_archive_request'}) {
               if ($env{'form.remove_archive_request'} eq $archive_idnum) {
                   if (exists($env{'cgi.'.$archive_idnum.'.archive'})) {
                       my $archiveref = &Apache::lonnet::thaw_unescape($env{'cgi.'.$archive_idnum.'.archive'});
                       if (ref($archiveref) eq 'HASH') {
                           $env{'form.delarchive'} = $archive_idnum.$archiveref->{'extension'};
                           if (&Archive3($archiveref)) {
                               ($archive_earlyout,$archive_idnum) = &archive_in_progress();
                           }
                           delete($env{'form.delarchive'});
                       }
                   }
               }
           }
           if ($archive_earlyout) {
               my $conftext =
                   &mt('Removing an existing request will terminate an active download of the archive file.');
               &js_escape(\$conftext);
               $js = <<"ENDJS";
   <script type="text/javascript">
   // <![CDATA[
   function confirmation(form) {
       if (form.remove_archive_request.length) {
           for (var i=0; i<form.remove_archive_request.length; i++) {
               if (form.remove_archive_request[i].checked) {
                   if (form.remove_archive_request[i].value == '$archive_idnum') {
                       if (!confirm('$conftext')) {
                           return false;
                       }
                   }
               }
           }
       }
       return true;
   }
   // ]]>
   </script>
   
   ENDJS
           } else {
               if ($env{'form.phase'} eq 'two') {
                   $identifier = &Apache::loncommon::get_cgi_id();
                   $args->{'redirect'} = [0.1,"/cgi-bin/archive.pl?$identifier"];
               } else {
                   my (%location_of,%defaults);
                   $defext = &archive_tools(\%location_of,\%defaults);
                   my $check_uncheck_js = &Apache::loncommon::check_uncheck_jscript();
                   $js = <<"ENDJS";
   <script type="text/javascript">
   // <![CDATA[
   function toggleCompression(form) {
       if (document.getElementById('tar_compression')) {
           if (form.format.length > 1) {
               for (var i=0; i<form.format.length; i++) {
                   if (form.format[i].checked) {
                       if (form.format[i].value == 'zip') {
                           document.getElementById('tar_compression').style.display = 'none';
                       } else if (form.format[i].value == 'tar') {
                           document.getElementById('tar_compression').style.display = 'block';
                       }
                       break;
                   }
               }
           }
       }
       setArchiveExt(form);
       return;
   }
   
   function setArchiveExt(form) {
       var newfmt;
       var newcomp;
       var newdef;
       if (document.getElementById('archiveext')) {
           if (form.format.length) {
               for (var i=0; i<form.format.length; i++) {
                   if (form.format[i].checked) {
                       newfmt = form.format[i].value;
                       break;
                   }
               }
           } else {
               newfmt = form.format[0];
           }
           if (newfmt == 'tar') {
               if (document.getElementById('tar_compression')) {
                   if (form.compress.length) {
                       for (var i=0; i<form.compress.length; i++) {
                           if (form.compress[i].checked) {
                               newcomp = form.compress[i].value;
                               break;
                           }
                       }
                   } else {
                       newcomp = form.compress[0];
                   }
               }
               if (newcomp == 'gzip') {
                   newdef = newfmt+'.gz';
               } else if (newcomp == 'bzip2') {
                   newdef = newfmt+'.bz2';
               } else if (newcomp == 'xz') {
                   newdef = newfmt+'.'+newcomp;
               } else {
                   newdef = newfmt;
               }
           } else if (newfmt == 'zip') {
               newdef = newfmt;
           }
           if ((newdef == '') || (newdef == undefined) || (newdef == null)) {
               newdef = '.$defext';
           }
           document.getElementById('archiveext').value = newdef;
       }
   }
   
   function resetForm() {
       if (document.phaseone.filetype.length) {
           for (var i=0; i<document.phaseone.filetype.length; i++) {
               document.phaseone.filetype[i].checked = false;
           }
       }
       if (document.getElementById('tar_compression')) { 
           if (document.phaseone.format.length) {
               document.getElementById('tar_compression').style.display = 'block';
               for (var i=0; i<document.phaseone.format.length; i++) {
                   if (document.phaseone.format[i].value == 'tar') {
                       document.phaseone.format[i].checked = true;  
                   } else {
                       document.phaseone.format[i].checked = false;
                   }
               }
           }
           if (document.phaseone.compress.length) {
               for (var i=0; i<document.phaseone.compress.length; i++) {
                   if (document.phaseone.compress[i].value == 'gzip') {
                       document.phaseone.compress[i].checked = true;
                   } else {
                       document.phaseone.compress[i].checked = false;
                   }
               }
           }
       }
       document.phaseone.recurse.checked = false;
       var a = document.createElement('a');
       var vis;
       if (typeof a.download != "undefined") {
           document.phaseone.adload.value = '1';
           if (document.getElementById('archive_saveas')) {
               document.getElementById('archive_saveas').style.display = 'block';
               vis = '1';
           }
     }      }
       if (vis == '1') {
           if (document.getElementById('archiveext')) {
               document.getElementById('archiveext').value='.$defext';
           }
       } else {
           if (document.getElementById('archive_saveas')) {
               document.getElementById('archive_saveas').style.display = 'none';
           }
           if (document.getElementById('archiveext')) {
               document.getElementById('archiveext').value='';
           }
       }
   }
   
   $check_uncheck_js
   
   // ]]>
   </script>
   
   ENDJS
                   $args->{'add_entries'} = { onload => "resetForm()" };
               }
           }
       }
     my $londocroot = $r->dir_config('lonDocRoot');      my $londocroot = $r->dir_config('lonDocRoot');
     my $trailfile = $fn;      my $trailfile = $fn;
     $trailfile =~ s{^/(priv/)}{$londocroot/$1};      $trailfile =~ s{^/(priv/)}{$londocroot/$1};
Line 1546  function writeDone() { Line 2051  function writeDone() {
         'href'  => '',          'href'  => '',
     });      });
   
     $r->print(&Apache::loncommon::start_page($title,      $r->print(&Apache::loncommon::start_page($title,$js,$args)
      $js,  
      {'add_entries' => \%loaditem,})  
              .&Apache::lonhtmlcommon::breadcrumbs()               .&Apache::lonhtmlcommon::breadcrumbs()
              .&Apache::loncommon::head_subbox(               .&Apache::loncommon::head_subbox(
                   &Apache::loncommon::CSTR_pageheader($trailfile))                    &Apache::loncommon::CSTR_pageheader($trailfile))
     );      );
   
     $r->print('<p>'.&mt('Location').': '.&display($fn).'</p>');      unless ($env{'form.action'} eq 'archive') {
           $r->print('<p>'.&mt('Location').': '.&display($fn).'</p>');
       }
   
     if (($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) {      if (($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) {
         unless ($crsauthor) {          unless ($crsauthor) {
Line 1573  function writeDone() { Line 2078  function writeDone() {
         'move'            => 'Move',          'move'            => 'Move',
         'newdir'          => 'New Directory',          'newdir'          => 'New Directory',
         'decompress'      => 'Decompress',          'decompress'      => 'Decompress',
           'archive'         => 'Export directory to archive file',
         'copy'            => 'Copy',          'copy'            => 'Copy',
         'newfile'         => 'New Resource',          'newfile'         => 'New Resource',
  'newhtmlfile'     => 'New Resource',   'newhtmlfile'     => 'New Resource',
Line 1604  function writeDone() { Line 2110  function writeDone() {
                 );                  );
                 return OK;                  return OK;
             }              }
               if ($env{'form.action'} eq 'archive') {
                   $r->print('<p>'.&mt('Location').': '.&display($fn).'</p>'."\n".
                             '<p class="LC_error">'.
                             &mt('Export to an archive file is not permitted in Course Authoring Space').
                             '</p>'."\n".
                             &Apache::loncommon::end_page());
                   return OK; 
               }
           } elsif ($env{'form.action'} eq 'archive') {
               if ($env{'environment.canarchive'}) {
                   if ($archive_earlyout) {
                       my $fname = &url($fn);
                       my $title = $action{$env{'form.action'}};
                       &cancel_archive_form($r,$title,$fname,$archive_earlyout,$archive_idnum);
                       &CloseForm1($r,$fn);
                       $r->print(&Apache::loncommon::end_page());
                       return OK;
                   }
               } else {
                   $r->print('<p>'.&mt('Location').': '.&display($fn).'</p>'."\n".
                             '<p class="LC_error">'.
                             &mt('You do not have permission to export to an archive file in this Authoring Space').
                             '</p>'."\n".
                             &Apache::loncommon::end_page());
                   return OK;
               }
         }          }
         $r->print('<h2>'.$action{$env{'form.action'}}.'</h2>');          $r->print('<h2>'.$action{$env{'form.action'}}.'</h2>'."\n");
     } else {      } else {
         $r->print('<p class="LC_error">'          $r->print('<p class="LC_error">'
                  .&mt('Unknown Action: [_1]',$env{'form.action'})                   .&mt('Unknown Action: [_1]',$env{'form.action'})
Line 1617  function writeDone() { Line 2149  function writeDone() {
   
     if ($env{'form.phase'} eq 'two') {      if ($env{'form.phase'} eq 'two') {
  &Debug($r, "loncfile::handler  entering phase2");   &Debug($r, "loncfile::handler  entering phase2");
  &phasetwo($r,$fn,$uname,$udom);   &phasetwo($r,$fn,$uname,$udom,$identifier);
     } else {      } else {
  &Debug($r, "loncfile::handler  entering phase1");   &Debug($r, "loncfile::handler  entering phase1");
  &phaseone($r,$fn,$uname,$udom);   &phaseone($r,$fn,$uname,$udom);

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


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