--- loncom/publisher/lonupload.pm 2008/12/12 02:32:27 1.42 +++ loncom/publisher/lonupload.pm 2010/12/26 03:09:11 1.53 @@ -2,7 +2,7 @@ # The LearningOnline Network with CAPA # Handler to upload files into construction space # -# $Id: lonupload.pm,v 1.42 2008/12/12 02:32:27 raeburn Exp $ +# $Id: lonupload.pm,v 1.53 2010/12/26 03:09:11 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -70,7 +70,7 @@ Start page output =item * -output relevant interface phase (phaseone or phasetwo or phasethree) +output relevant interface phase (phaseone, phasetwo, phasethree or phasefour) =item * @@ -99,6 +99,11 @@ as overwriting an existing file). Interface for handling secondary uploads of embedded objects in an html file. +=item phasefour() + +Interface for handling optional renaming of links to embedded +objects. + =item upfile_store() Store contents of uploaded file into temporary space. Invoked @@ -165,59 +170,74 @@ sub phaseone { } elsif ($mode eq 'imsimport') { $action = '/adm/imsimport'; } + + # Check for file to be uploaded $env{'form.upfile.filename'}=~s/\\/\//g; $env{'form.upfile.filename'}=~s/^.*\/([^\/]+)$/$1/; - if ($env{'form.upfile.filename'}) { - $fn=~s/\/[^\/]+$//; - $fn=~s/([^\/])$/$1\//; - $fn.=$env{'form.upfile.filename'}; - $fn=~s/^\///; - $fn=~s/(\/)+/\//g; - -# Fn is the full path to the destination filename. -# + if (!$env{'form.upfile.filename'}) { + $r->print('
'.&mt('No upload file specified.').'
'); + return; + } + + $fn=~s/\/[^\/]+$//; + $fn=~s/([^\/])$/$1\//; + $fn.=$env{'form.upfile.filename'}; + $fn=~s/^\///; + $fn=~s/(\/)+/\//g; + # Fn is the full path to the destination filename. + + # Check for illegal filename + &Debug($r, "Filename for upload: $fn"); + if (!(($fn) && ($fn!~/\/$/))) { + $r->print(''.&mt('Illegal filename.').'
'); + return; + } + + # Display additional options for upload + # and upload button + $r->print( + '' + ); - &Debug($r, "Filename for upload: $fn"); - if (($fn) && ($fn!~/\/$/)) { - $r->print(''); - # Check for bad extension and warn user - if ($fn=~/\.(\w+)$/ && - (&Apache::loncommon::fileembstyle($1) eq 'hdn')) { + # Check for bad extension and warn user + if ($fn=~/\.(\w+)$/ && + (&Apache::loncommon::fileembstyle($1) eq 'hdn')) { $r->print(''
- .&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.',
+ ''.$1.'')
.'
'.&mt('Please change the extension.')
.'
'
- .&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.',
+ ''.$1.'')
.'
'.&mt('Please change the extension.')
.'
'.&mt('Upload cancelled.').'
' + .''. + &mt('Back to Directory').'
'; + } elsif ((-e $target) && (!$env{'form.override'})) { + $output .= ''; } else { my $source=$r->dir_config('lonDaemons').'/tmp/'.$datatoken.'.tmp'; my $dirpath=$path.'/'; @@ -289,31 +314,39 @@ sub check_extension { # Check for bad extension and disallow upload if ($fn=~/\.(\w+)$/ && (&Apache::loncommon::fileembstyle($1) eq 'hdn')) { - $result .= &mt('File [_1] could not be copied.', - ''.$fn.' '). - ''. - &mt('The extension on this file is reserved internally by LON-CAPA.'). - '
'; + $result .= ''.
+ &mt('File [_1] could not be copied.',
+ ''.$fn.' ').
+ '
'.
+ &mt('The extension on this file is reserved internally by LON-CAPA.').
+ '
'. - &mt('The extension on this file is not recognized by LON-CAPA.'). - '
'; + $result .= ''.
+ &mt('File [_1] could not be copied.',
+ ''.$fn.' ').
+ '
'.
+ &mt('The extension on this file is not recognized by LON-CAPA.').
+ '
'. - &mt('The target is an existing directory.'). - '
'; + $result .= ''.
+ &mt('File [_1] could not be copied.',
+ ''.$fn.'').
+ '
'.
+ &mt('The target is an existing directory.').
+ '
' + .&mt('Your file - [_1] - was uploaded successfully.', + ''.$fn.'') + .'
'; } else { - $result .= &mt('File copied.').'' + .&mt('File copied.') + .'
'; } # Check for embedded objects. my (%allfiles,%codebase); @@ -322,53 +355,105 @@ sub check_extension { my (%allfiles,%codebase); &Apache::lonnet::extract_embedded_items($target,\%allfiles,\%codebase); if (keys(%allfiles) > 0) { - my $state = <".&mt("Completed upload of the file. This file contained references to other files.")."
". - "".&mt("Please select the locations from which the referenced files are to be uploaded.")."
". - &Apache::loncommon::ask_for_embedded_content($action,$state,\%allfiles,\%codebase, - {'error_on_invalid_names' => 1, - 'ignore_remote_references' => 1,}); - if ($mode eq 'testbank') { - $returnflag = 'embedded'; - $result .= ''.&mt('Or [_1]continue[_2] the testbank import without these files','','').'
'; + my ($currentpath) = ($url =~ m{^(.+)/[^/]+$}); + my $state = &embedded_form_elems('upload_embedded',$url,$mode); + my ($embedded,$num,$pathchg) = + &Apache::loncommon::ask_for_embedded_content($action,$state,\%allfiles, + \%codebase, + {'error_on_invalid_names' => 1, + 'ignore_remote_references' => 1, + 'current_path' => $currentpath}); + if ($embedded) { + $result .= ''.&mt('Completed upload of the file.').' '.&mt('This file contained references to other files.').'
'. + ''.&mt('Please select the locations from which the referenced files are to be uploaded.').'
'. + $embedded; + if ($mode eq 'testbank') { + $returnflag = 'embedded'; + $result .= ''.&mt('Or [_1]continue[_2] the testbank import without these files.','','').'
'; + } + } else { + $result .= ''.&mt('Completed upload of the file.').'
'.$embedded; + if ($pathchg) { + if ($mode eq 'testbank') { + $returnflag = 'embedded'; + $result .= ''.&mt('Or [_1]continue[_2] the testbank import without modifying the references(s).','','').'
'; + } + } + } } } } if (($mode ne 'imsimport') && ($mode ne 'testbank')) { - $result .= '' + .&mt('Co-Author [_1]',$uname.':'.$udom) + .'
' + ); } - - if ($env{'form.phase'} eq 'three') { - my $output = &phasethree($r,$fn,$uname,$udom,'author'); + if ($env{'form.phase'} eq 'four') { + my $output = &phasefour($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); } elsif ($env{'form.phase'} eq 'two') { my ($output,$returnflag) = &phasetwo($r,$fn,$uname,$udom);