Diff for /loncom/publisher/lonupload.pm between versions 1.45 and 1.60

version 1.45, 2009/05/06 16:19:50 version 1.60, 2012/04/16 19:32:04
Line 1 Line 1
   
 # The LearningOnline Network with CAPA  # The LearningOnline Network with CAPA
 # Handler to upload files into construction space  # Handler to upload files into construction space
 #  #
Line 70  Start page output Line 69  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 98  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 158  sub upfile_store { Line 162  sub upfile_store {
 }  }
   
 sub phaseone {  sub phaseone {
     my ($r,$fn,$uname,$udom,$mode)=@_;      my ($r,$fn,$mode)=@_;
     my $action = '/adm/upload';      my $action = '/adm/upload';
     if ($mode eq 'testbank') {      if ($mode eq 'testbank') {
         $action = '/adm/testbank';          $action = '/adm/testbank';
     } elsif ($mode eq 'imsimport') {      } elsif ($mode eq 'imsimport') {
         $action = '/adm/imsimport';          $action = '/adm/imsimport';
     }      }
   
       # Check for file to be uploaded
     $env{'form.upfile.filename'}=~s/\\/\//g;      $env{'form.upfile.filename'}=~s/\\/\//g;
     $env{'form.upfile.filename'}=~s/^.*\/([^\/]+)$/$1/;      $env{'form.upfile.filename'}=~s/^.*\/([^\/]+)$/$1/;
     if ($env{'form.upfile.filename'}) {      if (!$env{'form.upfile.filename'}) {
  $fn=~s/\/[^\/]+$//;          $r->print('<p class="LC_warning">'.&mt('No upload file specified.').'</p>');
  $fn=~s/([^\/])$/$1\//;          return;
  $fn.=$env{'form.upfile.filename'};      }
  $fn=~s/^\///;  
  $fn=~s/(\/)+/\//g;      # Append the name of the uploaded file
       $fn.=$env{'form.upfile.filename'};
 #    Fn is the full path to the destination filename.      $fn=~s/(\/)+/\//g;
 #      
       # Check for illegal filename
  &Debug($r, "Filename for upload: $fn");      &Debug($r, "Filename for upload: $fn");
  if (($fn) && ($fn!~/\/$/)) {      if (!(($fn) && ($fn!~/\/$/))) {
     $r->print('<form action="'.$action.'" method="post" name="fileupload">'.          $r->print('<p class="LC_warning">'.&mt('Illegal filename.').'</p>');
       '<input type="hidden" name="phase" value="two" />'.          return;
       '<input type="hidden" name="datatoken" value="'.      }
       &upfile_store.'" />'.  # Split part that I can change from the part that I cannot change
       '<input type="hidden" name="uploaduname" value="'.$uname.      my ($fn1,$fn2)=($fn=~/^(\/priv\/[^\/]+\/[^\/]+\/)(.*)$/);
       '" />'.&mt('Save uploaded file as [_1]',      # Display additional options for upload
                       "<span class='LC_filename'>/priv/$uname/</span>".      # and upload button
                       '<input type="text" size="50" name="filename" value="'.$fn.      $r->print(
                       '" />').          '<form action="'.$action.'" method="post" name="fileupload">'
                       '<br />'.         .'<input type="hidden" name="phase" value="two" />'
       '<br />'.&mt('Choose file type:').'         .'<input type="hidden" name="datatoken" value="'.&upfile_store.'" />'
 <select name="filetype">      );
  <option value="standard" selected="selected">'.&mt('Regular file').'      $r->print(
  <option value="testbank">'.&mt('Testbank file').'          &Apache::lonhtmlcommon::start_pick_box()
  <option value="imsimport">'.&mt('IMS package').'         .&Apache::lonhtmlcommon::row_title(&mt('Save uploaded file as'))
 </select>'.&Apache::loncommon::help_open_topic("Uploading_File_Options").'         .'<span class="LC_filename">'.$fn1.'</span>'
 <br />         .'<input type="hidden" name="filename1" value="'.$fn1.'" />'
 <br />         .'<input type="text" size="50" name="filename2" value="'.$fn2.'" />'
 ');         .&Apache::lonhtmlcommon::row_closure()
             $r->print('<input type="button" value="'.&mt('Save').'" onClick="javascript:verifyForm()"/></form>');         .&Apache::lonhtmlcommon::row_title(&mt('File Type'))
     # Check for bad extension and warn user         .'<select name="filetype">'
     if ($fn=~/\.(\w+)$/ &&          .'<option value="standard" selected="selected">'.&mt('Regular file').'</option>'
  (&Apache::loncommon::fileembstyle($1) eq 'hdn')) {         .'<option value="testbank">'.&mt('Testbank file').'</option>'
          .'<option value="imsimport">'.&mt('IMS package').'</option>'
          .'</select>'.&Apache::loncommon::help_open_topic("Uploading_File_Options")
          .&Apache::lonhtmlcommon::row_closure(1)
          .&Apache::lonhtmlcommon::end_pick_box()
       );
       $r->print(
           '<p>'
          .'<input type="button" value="'.&mt('Upload').'" onclick="javascript:verifyForm()"/>'
          .'</p>'
          .'</form>'
       );
   
      # Check for bad extension and warn user
       if ($fn=~/\.(\w+)$/ && 
           (&Apache::loncommon::fileembstyle($1) eq 'hdn')) {
                 $r->print('<p class="LC_error">'                  $r->print('<p class="LC_error">'
                           .&mt('The extension on this file, [_1], is reserved internally by LON-CAPA.','"'.$1.'"')                            .&mt('The extension on this file, [_1], is reserved internally by LON-CAPA.',
                                  '<span class="LC_filename">'.$1.'</span>')
                           .' <br />'.&mt('Please change the extension.')                            .' <br />'.&mt('Please change the extension.')
                           .'</p>');                            .'</p>');
     } elsif($fn=~/\.(\w+)$/ &&       } elsif($fn=~/\.(\w+)$/ && 
     !defined(&Apache::loncommon::fileembstyle($1))) {                      !defined(&Apache::loncommon::fileembstyle($1))) {
                 $r->print('<p class="LC_error">'                  $r->print('<p class="LC_error">'
                          .&mt('The extension on this file, [_1], is not recognized by LON-CAPA.','"'.$1.'"')                           .&mt('The extension on this file, [_1], is not recognized by LON-CAPA.',
                                 '<span class="LC_filename">'.$1.'</span>')
                          .' <br />'.&mt('Please change the extension.')                           .' <br />'.&mt('Please change the extension.')
                          .'</p>');                           .'</p>');
     }  
  } else {  
     $r->print('<span class="LC_error">'.&mt('Illegal filename.').'</span>');  
  }  
     } else {  
  $r->print('<span class="LC_error">'.&mt('No upload file specified.').'</span>');  
     }      }
 }  }
   
 sub phasetwo {  sub phasetwo {
     my ($r,$tfn,$uname,$udom,$mode)=@_;      my ($r,$fn,$mode)=@_;
   
     my $output;      my $output;
     my $action = '/adm/upload';      my $action = '/adm/upload';
     my $returnflag = '';      my $returnflag = '';
Line 231  sub phasetwo { Line 249  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= $r->dir_config('lonDocRoot').'/'.$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 250  sub phasetwo { Line 265  sub phasetwo {
                 my $source=$r->dir_config('lonDaemons').'/tmp/'.$datatoken.'.tmp';                  my $source=$r->dir_config('lonDaemons').'/tmp/'.$datatoken.'.tmp';
                 my $dirpath=$path.'/';                  my $dirpath=$path.'/';
                 $dirpath=~s/\/+/\//g;                  $dirpath=~s/\/+/\//g;
                 $output .= &mt('Upload cancelled.').'<br /><font size="+2"><a href="'.$dirpath.'">'.                  $output .= '<p class="LC_warning">'.&mt('Upload cancelled.').'</p>'
                           &mt('Back to Directory').'</a></font>';                            .'<p><a href="'.$dirpath.'">'.
     } elsif ((-e $target) && (!$env{'form.override'})) {                            &mt('Back to Directory').'</a></p>';
  $output .= '<form action="'.$action.'" method="post">'.              } elsif ((-e $target) && (!$env{'form.override'})) {
   &mt('File [_1] exists. Overwrite?','<span class="LC_filename">'.$fn.'</span>').                  $output .= '<form action="'.$action.'" method="post">'
   '<input type="hidden" name="phase" value="two" />'.                            .'<p class="LC_warning">'
   '<input type="hidden" name="filename" value="'.$url.'" />'.                            .&mt('File [_1] already exists.',
   '<input type="hidden" name="datatoken" value="'.$datatoken.'" />'.                                 '<span class="LC_filename">'.$fn.'</span>')
   '<input type="submit" name="override" value="'.&mt('Yes').'" />'.                           .'<input type="hidden" name="phase" value="two" />'
                           '<input type="submit" name="cancel" value="'.&mt('Cancel').'" />'.                           .'<input type="hidden" name="filename" value="'.$url.'" />'
                           '</form>';                           .'<input type="hidden" name="datatoken" value="'.$datatoken.'" />'
                            .'<p>'
                            .'<input type="submit" name="cancel" value="'.&mt('Cancel').'" />'
                            .' <input type="submit" name="override" value="'.&mt('Overwrite').'" />'
                            .'</p>'
                            .'</form>';
             } else {              } else {
  my $source=$r->dir_config('lonDaemons').'/tmp/'.$datatoken.'.tmp';   my $source=$r->dir_config('lonDaemons').'/tmp/'.$datatoken.'.tmp';
  my $dirpath=$path.'/';   my $dirpath=$path.'/';
Line 289  sub check_extension { Line 309  sub check_extension {
     # Check for bad extension and disallow upload      # Check for bad extension and disallow upload
     if ($fn=~/\.(\w+)$/ &&      if ($fn=~/\.(\w+)$/ &&
         (&Apache::loncommon::fileembstyle($1) eq 'hdn')) {          (&Apache::loncommon::fileembstyle($1) eq 'hdn')) {
         $result .= &mt('File [_1] could not be copied.',          $result .= '<p class="LC_warning">'.
                       '<span class="LC_filename">'.$fn.'</span> ').                     &mt('File [_1] could not be copied.',
                   '<p class="LC_error">'.                         '<span class="LC_filename">'.$fn.'</span> ').
                   &mt('The extension on this file is reserved internally by LON-CAPA.').                     '<br />'.
                   '</p>';                     &mt('The extension on this file is reserved internally by LON-CAPA.').
                      '</p>';
     } elsif ($fn=~/\.(\w+)$/ &&      } elsif ($fn=~/\.(\w+)$/ &&
              !defined(&Apache::loncommon::fileembstyle($1))) {               !defined(&Apache::loncommon::fileembstyle($1))) {
         $result .= &mt('File [_1] could not be copied.',          $result .= '<p class="LC_warning">'.
                       '<span class="LC_filename">'.$fn.'</span> ').                     &mt('File [_1] could not be copied.',
                   '<p class="LC_error">'.                         '<span class="LC_filename">'.$fn.'</span> ').
                   &mt('The extension on this file is not recognized by LON-CAPA.').                     '<br />'.
                   '</p>';                     &mt('The extension on this file is not recognized by LON-CAPA.').
                      '</p>';
     } elsif (-d $target) {      } elsif (-d $target) {
         $result .= &mt('File [_1] could not be copied.',          $result .= '<p class="LC_warning">'.
                       '<span class="LC_filename">'.$fn.'</span>').                     &mt('File [_1] could not be copied.',
                   '<p class="LC_error">'.                         '<span class="LC_filename">'.$fn.'</span>').
                   &mt('The target is an existing directory.').                     '<br />'.
                   '</p>';                     &mt('The target is an existing directory.').
                      '</p>';
     } elsif (copy($source,$target)) {      } elsif (copy($source,$target)) {
         chmod(0660, $target); # Set permissions to rw-rw---.          chmod(0660, $target); # Set permissions to rw-rw---.
         if ($mode eq 'testbank' || $mode eq 'imsimport') {          if ($mode eq 'testbank' || $mode eq 'imsimport') {
             $returnflag = 'ok';              $returnflag = 'ok';
             $result .= &mt('Your file - [_1] - was uploaded successfully',$fn).'<br /><br />';              $result .= '<p class="LC_success">'
                         .&mt('Your file - [_1] - was uploaded successfully.',
                              '<span class="LC_filename">'.$fn.'<span>')
                         .'</p>';
         } else {          } else {
             $result .= &mt('File copied.').'<br />';              $result .= '<p class="LC_success">'
                         .&mt('File copied.')  
                         .'</p>';
         }          }
         # Check for embedded objects.          # Check for embedded objects.
         my (%allfiles,%codebase);          my (%allfiles,%codebase);
Line 322  sub check_extension { Line 350  sub check_extension {
             my (%allfiles,%codebase);              my (%allfiles,%codebase);
             &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 $state = <<STATE;                  my ($currentpath) = ($url =~ m{^(.+)/[^/]+$});
     <input type="hidden" name="action"      value="upload_embedded" />                  my $state = &embedded_form_elems('upload_embedded',$url,$mode);
     <input type="hidden" name="currentpath" value="$env{'form.currentpath'}" />                  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,
                 $result .= "<h3>".&mt("Reference Warning")."</h3>".                                                                    'current_path'             => $currentpath});
                            "<p>".&mt("Completed upload of the file. This file contained references to other files.")."</p>".                  if ($embedded) {
                           "<p>".&mt("Please select the locations from which the referenced files are to be uploaded.")."</p>".                      $result .= '<h3>'.&mt('Reference Warning').'</h3>';
                           &Apache::loncommon::ask_for_embedded_content($action,$state,\%allfiles,\%codebase,                      if ($num) {
                                       {'error_on_invalid_names'   => 1,                          $result .= '<p>'.&mt('Completed upload of the file.').' '.&mt('This file contained references to other files.').'</p>'.
                                        'ignore_remote_references' => 1,});                                     '<p>'.&mt('Please select the locations from which the referenced files are to be uploaded.').'</p>'.
                 if ($mode eq 'testbank') {                                     $embedded;
                     $returnflag = 'embedded';                          if ($mode eq 'testbank') {
                     $result .=  '<p>'.&mt('Or [_1]continue[_2] the testbank import without these files','<a href="javascript:document.testbankForm.submit();">','</a>').'</p>';                              $returnflag = 'embedded';
                               $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>';
                               }
                           }
                       }
                 }                  }
             }              }
         }          }
         if (($mode ne 'imsimport') && ($mode ne 'testbank')) {          if (($mode ne 'imsimport') && ($mode ne 'testbank')) {
             $result .= '<br /><font size="+2"><a href="'.$url.'">'.              $result .= '<br /><a href="'.$url.'">'.
                         &mt('View file').'</a></font>';                          &mt('View file').'</a>';
         }          }
     } else {      } else {
         $result .= &mt('Failed to copy: [_1].',$!);          $result .= &mt('Failed to copy: [_1].',$!);
     }      }
     if ($mode ne 'imsimport' && $mode ne 'testbank') {      if ($mode ne 'imsimport' && $mode ne 'testbank') {
         $result .= '<br /><font size="+2"><a href="'.$dirpath.'">'.          $result .= '<br /><a href="'.$dirpath.'">'.
                    &mt('Back to Directory').'</a></font><br />';                     &mt('Back to Directory').'</a><br />';
     }      }
     return ($result,$returnflag);      return ($result,$returnflag);
 }  }
   
 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 $url_root = "/priv/$udom/$uname";
       my $dir_root = $r->dir_config('lonDocRoot').$url_root;
       my $path = &File::Basename::dirname($fn);
       $path =~ s{^\Q$url_root\E}{};
       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="'.$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 $url_root = "/priv/$udom/$uname";
     my $url_root = '/priv/'.$uname;      my $dir_root = $r->dir_config('lonDocRoot').$url_root;
     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,      $path =~ s{^\Q$url_root\E}{};
                                                   $dir_root,$url_root);      my $outcome = 
           &Apache::loncommon::modify_html_refs($mode,$path,$uname,$udom,$dir_root);
       $result .= $outcome;
     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="'.$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 377  sub phasethree { Line 462  sub phasethree {
 sub handler {  sub handler {
   
     my $r=shift;      my $r=shift;
   
     my $uname;  
     my $udom;  
     my $javascript = '';      my $javascript = '';
 #      my $fn=$env{'form.filename'};
 # phase two: re-attach user  
 #      if ($env{'form.filename1'}) {
     if ($env{'form.uploaduname'}) {         $fn=$env{'form.filename1'}.$env{'form.filename2'};
  $env{'form.filename'}='/priv/'.$env{'form.uploaduname'}.'/'.      }
     $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;
     }      }
   
       my ($uname,$udom)=&Apache::loncacc::constructaccess($fn);
   
       unless (($uname) && ($udom)) {
           $r->log_reason($uname.' at '.$udom.
                          ' trying to publish file '.$env{'form.filename'}.
                          ' - not authorized',
                          $r->filename);
           return HTTP_NOT_ACCEPTABLE;
       }
   
   # ----------------------------------------------------------- Start page output
   
       &Apache::loncommon::content_type($r,'text/html');
       $r->send_http_header;
   
     unless ($env{'form.phase'} eq 'two') {      unless ($env{'form.phase'} eq 'two') {
         $javascript = qq|          $javascript = <<"ENDJS";
   <script type="text/javascript">
   // <![CDATA[
 function verifyForm() {  function verifyForm() {
     var mode = document.fileupload.filetype.options[document.fileupload.filetype.selectedIndex].value      var mode = document.fileupload.filetype.options[document.fileupload.filetype.selectedIndex].value
     if (mode == "testbank") {      if (mode == "testbank") {
Line 404  function verifyForm() { Line 508  function verifyForm() {
     }      }
     document.fileupload.submit();      document.fileupload.submit();
 }  }
  |;  // ]]>
     }  </script>
     ($uname,$udom)=  ENDJS
  &Apache::loncacc::constructaccess($env{'form.filename'},  
   $r->dir_config('lonDefDomain'));  
   
     unless (($uname) && ($udom)) {  
  $r->log_reason($uname.' at '.$udom.  
        ' trying to publish file '.$env{'form.filename'}.  
        ' - not authorized',   
        $r->filename);   
  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  
   
   
     &Apache::loncommon::content_type($r,'text/html');  
     $r->send_http_header;  
   
    $javascript = "<script type=\"text/javascript\">\n//<!--\n".  
  $javascript."\n// --></script>\n";  
   
       my $londocroot = $r->dir_config('lonDocRoot');
       my $trailfile = $fn;
       $trailfile =~ s{^/(priv/)}{$londocroot/$1};
   
       # Breadcrumbs
       my $brcrum = [{'href' => &Apache::loncommon::authorspace($fn),
                      'text' => 'Construction Space'},
                     {'href' => '/adm/upload',
                      'text' => 'Upload file to Construction Space'}];
     $r->print(&Apache::loncommon::start_page('Upload file to Construction Space',      $r->print(&Apache::loncommon::start_page('Upload file to Construction Space',
      $javascript));                                               $javascript,
                                                {'bread_crumbs' => $brcrum,})
                .&Apache::loncommon::head_subbox(
                   &Apache::loncommon::CSTR_pageheader($trailfile))
       );
       
     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]:[_2]',$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);
         $r->print($output);          $r->print($output);
     } else {      } else {
  &phaseone($r,$fn,$uname,$udom);   &phaseone($r,$fn);
     }      }
   
     $r->print(&Apache::loncommon::end_page());      $r->print(&Apache::loncommon::end_page());

Removed from v.1.45  
changed lines
  Added in v.1.60


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