Diff for /loncom/publisher/loncfile.pm between versions 1.83 and 1.96

version 1.83, 2007/04/26 21:17:16 version 1.96, 2009/04/13 21:29:26
Line 109  sub Debug { Line 109  sub Debug {
     }      }
 }  }
   
   sub done {
      my ($url)=@_;
      my $done=&mt("Done");
      return(<<ENDDONE);
   <a href="$url">$done</a>
   <script type="text/javascript">
   location.href="$url";
   </script>
   ENDDONE
   }
   
 =pod  =pod
   
 =item URLToPath($url)  =item URLToPath($url)
Line 148  sub URLToPath { Line 159  sub URLToPath {
     my $Url = shift;      my $Url = shift;
     &Debug($r, "UrlToPath got: $Url");      &Debug($r, "UrlToPath got: $Url");
     $Url=~ s/\/+/\//g;      $Url=~ s/\/+/\//g;
     $Url=~ s/^http\:\/\/[^\/]+//;      $Url=~ s/^https?\:\/\/[^\/]+//;
     $Url=~ s/^\///;      $Url=~ s/^\///;
     $Url=~ s/(\~|priv\/)($match_username)\//\/home\/$2\/public_html\//;      $Url=~ s/(\~|priv\/)($match_username)\//\/home\/$2\/public_html\//;
     &Debug($r, "Returning $Url \n");      &Debug($r, "Returning $Url \n");
Line 165  sub url { Line 176  sub url {
 sub display {  sub display {
     my $fn=shift;      my $fn=shift;
     $fn=~s-^/home/($match_username)/public_html-/priv/$1-;      $fn=~s-^/home/($match_username)/public_html-/priv/$1-;
     return '<tt>'.$fn.'</tt>';      return '<span class="LC_filename">'.$fn.'</span>';
 }  }
   
   
Line 226  sub empty_directory { Line 237  sub empty_directory {
   
 =over 4  =over 4
   
 =item  $user   - string [in] - Name of the user for which to check.  =item  $user     - string [in] - Name of the user for which to check.
   
 =item  $domain - string [in] - Name of the domain in which the resource  =item  $domain   - string [in] - Name of the domain in which the resource
                           might have been published.                            might have been published.
   
 =item  $file   - string [in] - Name of the file.  =item  $file     - string [in] - Name of the file.
   
   =item  $creating - string [in] - optional, type of object being created,
                                  either 'directory' or 'file'. Defaults to
                                  'file' if unspecified.
   
 =back  =back
   
Line 251  Returns: Line 266  Returns:
 =cut  =cut
   
 sub exists {  sub exists {
     my ($user, $domain, $construct) = @_;      my ($user, $domain, $construct, $creating) = @_;
       $creating ||= 'file';
   
     my $published=$construct;      my $published=$construct;
     $published=~      $published=~
  s{^/home/$user/public_html/}{/home/httpd/html/res/$domain/$user/};   s{^/home/$user/public_html/}{/home/httpd/html/res/$domain/$user/};
Line 266  sub exists { Line 283  sub exists {
     $type = 'warning';      $type = 'warning';
     $result.='<p><span class="LC_warning">'.&mt('Warning: target file exists, and has been published!').'</span></p>';      $result.='<p><span class="LC_warning">'.&mt('Warning: target file exists, and has been published!').'</span></p>';
  } else {   } else {
     $type = 'warning';      my $published_type = (-d $published) ? 'directory' : 'file';
     $result.='<p><span class="LC_warning">'.&mt('Warning: a published file of this names exists.').'</span></p>';  
       if ($published_type eq $creating) {
    $type = 'warning';
    $result.='<p><span class="LC_warning">'.&mt("Warning: a published $published_type of this name exists.").'</span></p>';
       } else {
    $type = 'error';
    $result.='<p><span class="LC_error">'.&mt("Error: a published $published_type of this name exists.").'</span></p>';
       }
  }   }
     } elsif ( -e $construct) {      } elsif ( -e $construct) {
  $type = 'warning';   $type = 'warning';
Line 328  sub cleanDest { Line 352  sub cleanDest {
  $foundbad=1;   $foundbad=1;
  $dest=~s/\.//g;   $dest=~s/\.//g;
     }      }
       $dest =~ s/(\s+$|^\s+)//g;
     if  ($dest=~/[\#\?&%\":]/) {      if  ($dest=~/[\#\?&%\":]/) {
  $foundbad=1;   $foundbad=1;
  $dest=~s/[\#\?&%\":]//g;   $dest=~s/[\#\?&%\":]//g;
Line 336  sub cleanDest { Line 361  sub cleanDest {
  my ($newpath)=($dest=~m|(.*)/|);   my ($newpath)=($dest=~m|(.*)/|);
  $newpath=&relativeDest($fn,$newpath,$uname);   $newpath=&relativeDest($fn,$newpath,$uname);
  if (! -d "$newpath") {   if (! -d "$newpath") {
     $request->print("<p><span class=\"LC_error\">".&mt('You have requested to create file in directory [_1] which doesn\'t exist. The requested directory path has been removed from the requested file name.','"<tt>'.$newpath.'</tt>"')."</span></p>");      $request->print('<p><span class="LC_error">'
                              .&mt("You have requested to create file in directory [_1] which doesn't exist. The requested directory path has been removed from the requested file name."
                                  ,'"'.&display($newpath).'"')
                              .'</span></p>');
     $dest=~s|.*/||;      $dest=~s|.*/||;
  }   }
     }      }
       if ($dest =~ /\.(\d+)\.(\w+)$/){
    $request->print('<span class="LC_error">'
    .&mt('Bad filename [_1]','<span class="LC_filename">'.&display($dest).'</span>')
                           .'<br />'
                           .&mt('[_1](name).(number).(extension)[_2] not allowed.','<tt>','</tt>')
                           .'<br />'
                           .&mt('Removing the [_1].number.[_2] from requested filename.','<tt>','</tt>')
    .'</span>');
    $dest =~ s/\.(\d+)(\.\w+)$/$2/;
       }
     if ($foundbad) {      if ($foundbad) {
  $request->print("<p><span class=\"LC_error\">".&mt('Invalid characters in requested name have been removed.')."</span></p>");   $request->print("<p><span class=\"LC_error\">".&mt('Invalid characters in requested name have been removed.')."</span></p>");
     }      }
Line 415  Parameters: Line 453  Parameters:
   
 sub CloseForm2 {  sub CloseForm2 {
     my ($request, $user, $fn) = @_;      my ($request, $user, $fn) = @_;
     $request->print('<h3><a href="'.&url($fn).'/">'.&mt('Done').'</a></h3>');      $request->print(&done(&url($fn)));
 }  }
   
 =pod  =pod
Line 508  sub Rename1 { Line 546  sub Rename1 {
     $request->print('<input type="hidden" name="newfilename" value="'.      $request->print('<input type="hidden" name="newfilename" value="'.
     $newfilename.      $newfilename.
     '" /><p>'.$action.' '.&display($fn).      '" /><p>'.$action.' '.&display($fn).
     '</tt><br />to '.&display($newfilename).'?</p>');      '</p><br />to '.&display($newfilename).'?</p>');
     &CloseForm1($request, $fn);      &CloseForm1($request, $fn);
  } else {   } else {
     $request->print('<p>'.&mt('No new filename specified.').'</p></form>');      $request->print('<p>'.&mt('No new filename specified.').'</p></form>');
Line 550  sub Delete1 { Line 588  sub Delete1 {
   
     if( -e $fn) {      if( -e $fn) {
  $request->print('<input type="hidden" name="newfilename" value="'.   $request->print('<input type="hidden" name="newfilename" value="'.
  $fn.'"/>');   $fn.'" />');
         if (-d $fn) {          if (-d $fn) {
             unless (&empty_directory($fn,'Delete1')) {              unless (&empty_directory($fn,'Delete1')) {
                 $request->print('<h3>'.&mt('Only empty directories may be deleted.').'</h3>'.                  $request->print('<h3>'.&mt('Only empty directories may be deleted.').'</h3>'.
Line 674  causes the newdir operation to transitio Line 712  causes the newdir operation to transitio
 sub NewDir1 {  sub NewDir1 {
     my ($request, $username, $domain, $fn, $newfilename, $mode) = @_;      my ($request, $username, $domain, $fn, $newfilename, $mode) = @_;
   
     my ($type, $result)=&exists($username,$domain,$newfilename);      my ($type, $result)=&exists($username,$domain,$newfilename,'directory');
     $request->print($result);      $request->print($result);
     if ($result) {      if ($type eq 'error') {
  $request->print('</form>');   $request->print('</form>');
     } else {      } else {
  if ($mode eq 'testbank') {   if ($mode eq 'testbank') {
     $request->print('<input type="hidden" name="callingmode" value="testbank">');      $request->print('<input type="hidden" name="callingmode" value="testbank" />');
  } elsif ($mode eq 'imsimport') {   } elsif ($mode eq 'imsimport') {
     $request->print('<input type="hidden" name="callingmode" value="imsimport">');      $request->print('<input type="hidden" name="callingmode" value="imsimport" />');
  }   }
  $request->print('<input type="hidden" name="newfilename" value="'.   $request->print('<input type="hidden" name="newfilename" value="'.
  $newfilename.'" /><p>'.&mt('Make new directory').' '.   $newfilename.'" /><p>'.&mt('Make new directory').' '.
Line 695  sub NewDir1 { Line 733  sub NewDir1 {
 sub Decompress1 {  sub Decompress1 {
     my ($request, $user, $domain, $fn) = @_;      my ($request, $user, $domain, $fn) = @_;
     if( -e $fn) {      if( -e $fn) {
     $request->print('<input type="hidden" name="newfilename" value="'.$fn.'"/>');      $request->print('<input type="hidden" name="newfilename" value="'.$fn.'" />');
     $request->print('<p>'.&mt('Decompress').' '.&display($fn).'?</p>');      $request->print('<p>'.&mt('Decompress').' '.&display($fn).'?</p>');
     &CloseForm1($request, $fn);      &CloseForm1($request, $fn);
     } else {      } else {
Line 745  button which returns you to the driector Line 783  button which returns you to the driector
   
 sub NewFile1 {  sub NewFile1 {
     my ($request, $user, $domain, $fn, $newfilename) = @_;      my ($request, $user, $domain, $fn, $newfilename) = @_;
       return if (&filename_check($newfilename) ne 'ok');
   
     if ($env{'form.action'} =~ /new(.+)file/) {      if ($env{'form.action'} =~ /new(.+)file/) {
  my $extension=$1;   my $extension=$1;
   
         ##Informs User (name).(number).(extension) not allowed   
  if($newfilename =~ /\.(\d+)\.(\w+)$/){  
     $r->print('<span class="LC_error">'.$newfilename.  
       ' - '.&mt('Bad Filename').'<br />('.&mt('name').').('.&mt('number').').('.&mt('extension').') '.  
       ' '.&mt('Not Allowed').'</span>');  
     return;  
  }  
  if($newfilename =~ /(\:\:\:|\&\&\&|\_\_\_)/){  
     $r->print('<span class="LC_error">'.$newfilename.  
       ' - '.&mt('Bad Filename').'<br />('.&mt('Must not include').' '.$1.') '.  
       ' '.&mt('Not Allowed').'</span>');  
     return;  
  }  
  if ($newfilename !~ /\Q.$extension\E$/) {   if ($newfilename !~ /\Q.$extension\E$/) {
     if ($newfilename =~ m|/[^/.]*\.(?:[^/.]+)$|) {      if ($newfilename =~ m|/[^/.]*\.(?:[^/.]+)$|) {
  #already has an extension strip it and add in expected one   #already has an extension strip it and add in expected one
Line 775  sub NewFile1 { Line 800  sub NewFile1 {
     if ($type eq 'error') {      if ($type eq 'error') {
  $request->print('</form>');   $request->print('</form>');
     } else {      } else {
           my $extension;
   
           if ($newfilename =~ m{[^/.]+\.([^/.]+)$}) {
               $extension = $1;
           }
   
           my @okexts = qw(xml html xhtml htm xhtm problem page sequence rights sty library js css txt);
           if (($extension eq '') || (!grep(/^\Q$extension\E/,@okexts))) {
               my $validexts = '.'.join(', .',@okexts);
               $request->print('<p class="LC_warning">'.
                   &mt('Invalid filename: ').&display($newfilename).'</p><p>'.
                   &mt('The name of the new file needs to end with an appropriate file extension to indicate the type of file to create.').'<br />'.
                   &mt('The following are valid extensions: [_1].',$validexts).
                   '</p></form><p>'.
    '<form name="fileaction" action="/adm/cfile" method="post">'.
                   '<input type="hidden" name="qualifiedfilename" value="'.$fn.'" />'.
    '<input type="hidden" name="action" value="newfile" />'.
           '<span class ="LC_nobreak">'.&mt('Enter a file name: ').'<input type="text" name="newfilename" value="Type Name Here" onfocus="if (this.value == '."'Type Name Here') this.value=''".'" />&nbsp;<input type="submit" value="Go" />'.
                   '</span></form></p>'.
                   '<p><form action="'.&url($fn).
                   '" method="POST"><p><input type="submit" value="'.&mt('Cancel').'" /></form></p>');
               return;
           }
   
  $request->print('<p>'.&mt('Make new file').' '.&display($newfilename).'?</p>');   $request->print('<p>'.&mt('Make new file').' '.&display($newfilename).'?</p>');
  $request->print('</form>');   $request->print('</form>');
   
  $request->print('<form action="'.&url($newfilename).   $request->print('<form action="'.&url($newfilename).
  '" method="POST"><p><input type="submit" value="'.&mt('Continue').'" /></p></form>');   '" method="POST"><p><input type="submit" value="'.&mt('Continue').'" /></p></form>');
  $request->print('<form action="'.&url($fn).   $request->print('<form action="'.&url($fn).
  '" method="POST"><p><input type="submit" value="'.&mt('Cancel').'" /></p></form>');   '" method="POST"><p><input type="submit" value="'.&mt('Cancel').'" /></p></form>');
     }      }
       return;
   }
   
   sub filename_check {
       my ($newfilename) = @_;
       ##Informs User (name).(number).(extension) not allowed
       if($newfilename =~ /\.(\d+)\.(\w+)$/){
           $r->print('<span class="LC_error">'.$newfilename.
                     ' - '.&mt('Bad Filename').'<br />('.&mt('name').').('.&mt('number').').('.&mt('extension').') '.
                     ' '.&mt('Not Allowed').'</span>');
           return;
       }
       if($newfilename =~ /(\:\:\:|\&\&\&|\_\_\_)/){
           $r->print('<span class="LC_error">'.$newfilename.
                     ' - '.&mt('Bad Filename').'<br />('.&mt('Must not include').' '.$1.') '.
                     ' '.&mt('Not Allowed').'</span>');
           return;
       }
       return 'ok'; 
 }  }
   
 =pod  =pod
Line 852  sub phaseone { Line 920  sub phaseone {
       $env{'form.action'} eq 'newsequencefile' ||        $env{'form.action'} eq 'newsequencefile' ||
       $env{'form.action'} eq 'newrightsfile' ||        $env{'form.action'} eq 'newrightsfile' ||
       $env{'form.action'} eq 'newstyfile' ||        $env{'form.action'} eq 'newstyfile' ||
         $env{'form.action'} eq 'newtaskfile' ||
               $env{'form.action'} eq 'newlibraryfile' ||                $env{'form.action'} eq 'newlibraryfile' ||
       $env{'form.action'} eq 'Select Action') {        $env{'form.action'} eq 'Select Action') {
         my $empty=&mt('Type Name Here');          my $empty=&mt('Type Name Here');
Line 1107  sub NewDir2 { Line 1176  sub NewDir2 {
   
 sub decompress2 {  sub decompress2 {
     my ($r, $user, $dir, $file) = @_;      my ($r, $user, $dir, $file) = @_;
     &Apache::lonnet::appenv('cgi.file' => $file);      &Apache::lonnet::appenv({'cgi.file' => $file});
     &Apache::lonnet::appenv('cgi.dir' => $dir);      &Apache::lonnet::appenv({'cgi.dir' => $dir});
     my $result=&Apache::lonnet::ssi_body('/cgi-bin/decompress.pl');      my $result=&Apache::lonnet::ssi_body('/cgi-bin/decompress.pl');
     $r->print($result);      $r->print($result);
     &Apache::lonnet::delenv('cgi.file');      &Apache::lonnet::delenv('cgi.file');
Line 1235  sub phasetwo { Line 1304  sub phasetwo {
             $r->print('<h3><a href="'.&url($dest).'">'.&mt('Return to Directory').'</a></h3>');              $r->print('<h3><a href="'.&url($dest).'">'.&mt('Return to Directory').'</a></h3>');
             $r->print('<h3><a href="'.&url($dest_newname).'">'.$disp_newname.'</a></h3>');              $r->print('<h3><a href="'.&url($dest_newname).'">'.$disp_newname.'</a></h3>');
         } else {          } else {
     $r->print('<h3><a href="'.&url($dest).'">'.&mt('Done').'</a></h3>');      $r->print(&done(&url($dest)));
  }   }
     }      }
 }  }
Line 1309  sub handler { Line 1378  sub handler {
  $js = qq|   $js = qq|
 <script type="text/javascript">  <script type="text/javascript">
 function writeDone() {  function writeDone() {
     var winName = window.opener  
     window.focus();      window.focus();
     winName.document.dataForm.newdir.value = "$newdirname"      opener.document.info.newdir.value = "$newdirname";
     setTimeout("self.close()",10000)      setTimeout("self.close()",10000);
 }  }
   </script>    </script>
 |;  |;
Line 1326  function writeDone() { Line 1394  function writeDone() {
     $r->print('<h3>'.&mt('Location').': '.&display($fn).'</h3>');      $r->print('<h3>'.&mt('Location').': '.&display($fn).'</h3>');
       
     if (($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) {      if (($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) {
  $r->print('<h3><span class="LC_error">'.&mt('Co-Author').': '.$uname.' at '.$udom.          $r->print('<p class="LC_warning">'
   '</span></h3>');                   .&mt('Co-Author [_1]:[_2]',$uname,$udom)
                    .'</p>'
           );
     }      }
   
   
Line 1351  function writeDone() { Line 1421  function writeDone() {
      $env{'form.action'} eq 'newsequencefile' ||       $env{'form.action'} eq 'newsequencefile' ||
      $env{'form.action'} eq 'newrightsfile' ||       $env{'form.action'} eq 'newrightsfile' ||
      $env{'form.action'} eq 'newstyfile' ||       $env{'form.action'} eq 'newstyfile' ||
        $env{'form.action'} eq 'newtaskfile' ||
              $env{'form.action'} eq 'newlibraryfile' ||               $env{'form.action'} eq 'newlibraryfile' ||
      $env{'form.action'} eq 'Select Action' ) {       $env{'form.action'} eq 'Select Action' ) {
  $r->print('<h3>'.&mt('New Resource').'</h3>');   $r->print('<h3>'.&mt('New Resource').'</h3>');

Removed from v.1.83  
changed lines
  Added in v.1.96


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