Diff for /loncom/publisher/lonupload.pm between versions 1.50 and 1.55

version 1.50, 2010/10/27 01:04:15 version 1.55, 2011/10/26 22:38:49
Line 70  Start page output Line 70  Start page output
   
 =item *  =item *
   
 output relevant interface phase (phaseone or phasetwo or phasethree)  output relevant interface phase (phaseone, phasetwo, phasethree or phasefour)
   
 =item *  =item *
   
Line 99  as overwriting an existing file). Line 99  as overwriting an existing file).
 Interface for handling secondary uploads of embedded objects  Interface for handling secondary uploads of embedded objects
 in an html file.  in an html file.
   
   =item phasefour()
   
   Interface for handling optional renaming of links to embedded
   objects. 
   
 =item upfile_store()  =item upfile_store()
   
 Store contents of uploaded file into temporary space.  Invoked  Store contents of uploaded file into temporary space.  Invoked
Line 174  sub phaseone { Line 179  sub phaseone {
         return;          return;
     }      }
   
     $fn=~s/\/[^\/]+$//;      # Append the name of the uploaded file
     $fn=~s/([^\/])$/$1\//;  
     $fn.=$env{'form.upfile.filename'};      $fn.=$env{'form.upfile.filename'};
     $fn=~s/^\///;  
     $fn=~s/(\/)+/\//g;      $fn=~s/(\/)+/\//g;
     #    Fn is the full path to the destination filename.  
   
     # Check for illegal filename      # Check for illegal filename
     &Debug($r, "Filename for upload: $fn");      &Debug($r, "Filename for upload: $fn");
Line 187  sub phaseone { Line 189  sub phaseone {
         $r->print('<p class="LC_warning">'.&mt('Illegal filename.').'</p>');          $r->print('<p class="LC_warning">'.&mt('Illegal filename.').'</p>');
         return;          return;
     }      }
   # Split part that I can change from the part that I cannot change
       my ($fn1,$fn2)=($fn=~/^(\/priv\/[^\/]+\/[^\/]+\/)(.*)$/);
     # Display additional options for upload      # Display additional options for upload
     # and upload button      # and upload button
     $r->print(      $r->print(
         '<form action="'.$action.'" method="post" name="fileupload">'          '<form action="'.$action.'" method="post" name="fileupload">'
        .'<input type="hidden" name="phase" value="two" />'         .'<input type="hidden" name="phase" value="two" />'
        .'<input type="hidden" name="datatoken" value="'.&upfile_store.'" />'         .'<input type="hidden" name="datatoken" value="'.&upfile_store.'" />'
        .'<input type="hidden" name="uploaduname" value="'.$uname.'" />'  
     );      );
     $r->print(      $r->print(
         &Apache::lonhtmlcommon::start_pick_box()          &Apache::lonhtmlcommon::start_pick_box()
        .&Apache::lonhtmlcommon::row_title(&mt('Save uploaded file as'))         .&Apache::lonhtmlcommon::row_title(&mt('Save uploaded file as'))
        .'<span class="LC_filename">/priv/'.$uname.'/</span>'         .'<span class="LC_filename">'.$fn1.'</span>'
        .'<input type="text" size="50" name="filename" value="'.$fn.'" />'         .'<input type="hidden" name="filename1" value="'.$fn1.'" />'
          .'<input type="text" size="50" name="filename2" value="'.$fn2.'" />'
        .&Apache::lonhtmlcommon::row_closure()         .&Apache::lonhtmlcommon::row_closure()
        .&Apache::lonhtmlcommon::row_title(&mt('File Type'))         .&Apache::lonhtmlcommon::row_title(&mt('File Type'))
        .'<select name="filetype">'         .'<select name="filetype">'
Line 237  sub phaseone { Line 240  sub phaseone {
 }  }
   
 sub phasetwo {  sub phasetwo {
     my ($r,$tfn,$uname,$udom,$mode)=@_;      my ($r,$fn,$uname,$udom,$mode)=@_;
   
     my $output;      my $output;
     my $action = '/adm/upload';      my $action = '/adm/upload';
     my $returnflag = '';      my $returnflag = '';
Line 246  sub phasetwo { Line 250  sub phasetwo {
     } elsif ($mode eq 'imsimport') {      } elsif ($mode eq 'imsimport') {
         $action = '/adm/imsimport';          $action = '/adm/imsimport';
     }      }
     my $fn='/priv/'.$uname.'/'.$tfn;  
     $fn=~s/\/+/\//g;      $fn=~s/\/+/\//g;
     &Debug($r, "Filename is ".$tfn);      if ($fn) {
     if ($tfn) {   my $target='/home/httpd/html/'.$fn;
  &Debug($r, "Filename for tfn = ".$tfn);  
  my $target='/home/'.$uname.'/public_html'.$tfn;  
  &Debug($r, "target -> ".$target);   &Debug($r, "target -> ".$target);
 #     target is the full filesystem path of the destination file.  #     target is the full filesystem path of the destination file.
  my $base = &File::Basename::basename($fn);   my $base = &File::Basename::basename($fn);
Line 351  sub check_extension { Line 352  sub check_extension {
             &Apache::lonnet::extract_embedded_items($target,\%allfiles,\%codebase);              &Apache::lonnet::extract_embedded_items($target,\%allfiles,\%codebase);
             if (keys(%allfiles) > 0) {              if (keys(%allfiles) > 0) {
                 my ($currentpath) = ($url =~ m{^(.+)/[^/]+$});                  my ($currentpath) = ($url =~ m{^(.+)/[^/]+$});
                 my $state = <<STATE;                  my $state = &embedded_form_elems('upload_embedded',$url,$mode);
     <input type="hidden" name="action"      value="upload_embedded" />                  my ($embedded,$num,$pathchg) = 
     <input type="hidden" name="mode"        value="$mode" />                      &Apache::loncommon::ask_for_embedded_content($action,$state,\%allfiles,
     <input type="hidden" name="phase"       value="three" />                                                                   \%codebase,
     <input type="hidden" name="filename" value="$url" />                                                                   {'error_on_invalid_names'   => 1,
 STATE                                                                    'ignore_remote_references' => 1,
                 my $embedded = &Apache::loncommon::ask_for_embedded_content($action,$state,\%allfiles,\%codebase,                                                                    'current_path'             => $currentpath});
                                       {'error_on_invalid_names'   => 1,  
                                        'ignore_remote_references' => 1,  
                                        'current_path'             => $currentpath});  
                 if ($embedded) {                  if ($embedded) {
                     $result .= '<h3>'.&mt('Reference Warning').'</h3>'.                      $result .= '<h3>'.&mt('Reference Warning').'</h3>';
                                '<p>'.&mt('Completed upload of the file. This file contained references to other files.').'</p>'.                      if ($num) {
                                '<p>'.&mt('Please select the locations from which the referenced files are to be uploaded.').'</p>'.                          $result .= '<p>'.&mt('Completed upload of the file.').' '.&mt('This file contained references to other files.').'</p>'.
                                $embedded;                                     '<p>'.&mt('Please select the locations from which the referenced files are to be uploaded.').'</p>'.
                 }                                     $embedded;
                 if ($mode eq 'testbank') {                          if ($mode eq 'testbank') {
                     $returnflag = 'embedded';                              $returnflag = 'embedded';
                     $result .=  '<p>'.&mt('Or [_1]continue[_2] the testbank import without these files','<a href="javascript:document.testbankForm.submit();">','</a>').'</p>';                              $result .=  '<p>'.&mt('Or [_1]continue[_2] the testbank import without these files.','<a href="javascript:document.testbankForm.submit();">','</a>').'</p>';
                           }
                       } else {
                           $result .= '<p>'.&mt('Completed upload of the file.').'</p>'.$embedded;
                           if ($pathchg) {
                               if ($mode eq 'testbank') {
                                   $returnflag = 'embedded';
                                   $result .=  '<p>'.&mt('Or [_1]continue[_2] the testbank import without modifying the references(s).','<a href="javascript:document.testbankForm.submit();">','</a>').'</p>';
                               }
                           }
                       }
                 }                  }
             }              }
         }          }
Line 389  STATE Line 397  STATE
   
 sub phasethree {  sub phasethree {
     my ($r,$fn,$uname,$udom,$mode) = @_;      my ($r,$fn,$uname,$udom,$mode) = @_;
   
       my $action = '/adm/upload'; 
       if ($mode eq 'testbank') {
           $action = '/adm/testbank';
       } elsif ($mode eq 'imsimport') {
           $action = '/adm/imsimport';
       }
       my $dir_root = '/home/httpd/html/priv/'.$udom.'/'.$uname;
       my $url_root = '/priv/'.$udom.'/'.$uname;
       my $path = &File::Basename::dirname($fn);
       my $filename = &HTML::Entities::encode($env{'form.filename'},'<>&"');
       my $state = &embedded_form_elems('modify_orightml',$filename,$mode).
                   '<input type="hidden" name="phase" value="four" />';
       my ($result,$returnflag) = 
           &Apache::loncommon::upload_embedded($mode,$path,$uname,$udom,
                                               $dir_root,$url_root,undef,
                                               undef,undef,$state,$action);
       if ($mode ne 'imsimport' && $mode ne 'testbank') {
           $result .= '<br /><h3><a href="'.$url_root.$fn.'">'.
                     &mt('View main file').'</a></h3>'.
                     '<h3><a href="'.$url_root.$path.'">'.
                     &mt('Back to Directory').'</a></h3><br />';
       }
       return ($result,$returnflag);
   }
   
   sub embedded_form_elems {
       my ($action,$filename,$mode) = @_;
       return <<STATE;
       <input type="hidden" name="action" value="$action" />
       <input type="hidden" name="mode" value="$mode" />
       <input type="hidden" name="filename" value="$filename" />
   STATE
   }
   
   sub phasefour {
       my ($r,$fn,$uname,$udom,$mode) = @_;
   
       my $action = '/adm/upload';
       if ($mode eq 'testbank') {
           $action = '/adm/testbank';
       } elsif ($mode eq 'imsimport') {
           $action = '/adm/imsimport';
       }
     my $result;      my $result;
     my $dir_root = '/home/'.$uname.'/public_html';      my $dir_root = '/home/httpd/html/priv/'.$udom.'/'.$uname;
     my $url_root = '/priv/'.$uname;      my $url_root = '/priv/'.$udom.'/'.$uname;
     my $base = &File::Basename::basename($fn);  
     my $path = &File::Basename::dirname($fn);      my $path = &File::Basename::dirname($fn);
     $result = &Apache::loncommon::upload_embedded($mode,$path,$uname,$udom,      $result .= &Apache::loncommon::modify_html_refs($mode,$path,
                                                   $dir_root,$url_root);                                $uname,$udom,$dir_root);
     if ($mode ne 'imsimport' && $mode ne 'testbank') {      if ($mode ne 'imsimport' && $mode ne 'testbank') {
         $result = '<br /><font size="+2"><a href="'.$url_root.$fn.'">'.          $result .= '<br /><h3><a href="'.$url_root.$fn.'">'.
                   &mt('View main file').'</a></font>'.                    &mt('View main file').'</a></h3>'.
                   '<br /><font size="+2"><a href="'.$url_root.$path.'">'.                    '<h3><a href="'.$url_root.$path.'">'.
                   &mt('Back to Directory').'</a></font><br />';                    &mt('Back to Directory').'</a></h3><br />';
     }      }
     return $result;      return $result;
 }  }
Line 413  sub handler { Line 464  sub handler {
     my $uname;      my $uname;
     my $udom;      my $udom;
     my $javascript = '';      my $javascript = '';
 #  
 # phase two: re-attach user      my $fn=$env{'form.filename'};
 #  
     if ($env{'form.uploaduname'}) {      if ($env{'form.filename1'}) {
  $env{'form.filename'}='/priv/'.$env{'form.uploaduname'}.'/'.         $fn=$env{'form.filename1'}.$env{'form.filename2'};
     $env{'form.filename'};      }
       $fn=~s/\/+/\//g;
   
       unless ($fn) {
           $r->log_reason($env{'user.name'}.' at '.$env{'user.domain'}.
                          ' unspecified filename for upload', $r->filename);
           return HTTP_NOT_FOUND;
     }      }
   
     unless ($env{'form.phase'} eq 'two') {      unless ($env{'form.phase'} eq 'two') {
Line 438  function verifyForm() { Line 495  function verifyForm() {
 }  }
  |;   |;
     }      }
     ($uname,$udom)=      ($uname,$udom)=&Apache::loncacc::constructaccess($fn);
  &Apache::loncacc::constructaccess($env{'form.filename'},  
   $r->dir_config('lonDefDomain'));  
   
     unless (($uname) && ($udom)) {      unless (($uname) && ($udom)) {
  $r->log_reason($uname.' at '.$udom.   $r->log_reason($uname.' at '.$udom.
Line 450  function verifyForm() { Line 505  function verifyForm() {
  return HTTP_NOT_ACCEPTABLE;   return HTTP_NOT_ACCEPTABLE;
     }      }
           
     my $fn;  
     if ($env{'form.filename'}) {  
  $fn=$env{'form.filename'};  
  $fn=~s/^https?\:\/\/[^\/]+\///;  
  $fn=~s/^\///;  
  $fn=~s{(~|priv/)($LONCAPA::username_re)}{};  
  $fn=~s/\/+/\//g;  
     } else {  
  $r->log_reason($env{'user.name'}.' at '.$env{'user.domain'}.  
        ' unspecified filename for upload', $r->filename);   
  return HTTP_NOT_FOUND;  
     }  
   
 # ----------------------------------------------------------- Start page output  # ----------------------------------------------------------- Start page output
   
   
Line 485  function verifyForm() { Line 527  function verifyForm() {
     );      );
       
     if (($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) {      if (($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) {
         $r->print('<p class="LC_warning">'          $r->print('<p class="LC_info">'
                  .&mt('Co-Author [_1]',$uname.':'.$udom)                   .&mt('Co-Author [_1]',$uname.':'.$udom)
                  .'</p>'                   .'</p>'
         );          );
     }      }
       if ($env{'form.phase'} eq 'four') {
     if ($env{'form.phase'} eq 'three') {          my $output = &phasefour($r,$fn,$uname,$udom,'author');
         my $output = &phasethree($r,$fn,$uname,$udom,'author');          $r->print($output);
       } elsif ($env{'form.phase'} eq 'three') {
           my ($output,$rtnflag) = &phasethree($r,$fn,$uname,$udom,'author');
         $r->print($output);          $r->print($output);
     } elsif ($env{'form.phase'} eq 'two') {      } elsif ($env{'form.phase'} eq 'two') {
  my ($output,$returnflag) = &phasetwo($r,$fn,$uname,$udom);   my ($output,$returnflag) = &phasetwo($r,$fn,$uname,$udom);

Removed from v.1.50  
changed lines
  Added in v.1.55


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