--- loncom/publisher/lonupload.pm 2008/11/10 13:20:04 1.39 +++ loncom/publisher/lonupload.pm 2010/02/16 10:26:17 1.49 @@ -2,7 +2,7 @@ # The LearningOnline Network with CAPA # Handler to upload files into construction space # -# $Id: lonupload.pm,v 1.39 2008/11/10 13:20:04 jms Exp $ +# $Id: lonupload.pm,v 1.49 2010/02/16 10:26:17 bisitz Exp $ # # Copyright Michigan State University Board of Trustees # @@ -83,30 +83,30 @@ html file). =head1 OTHER SUBROUTINES -=over 4 +=over -=item * +=item phaseone() -phaseone() : Interface for specifying file to upload. +Interface for specifying file to upload. -=item * +=item phasetwo() -phasetwo() : Interface for handling post-conditions about uploading (such +Interface for handling post-conditions about uploading (such as overwriting an existing file). -=item * +=item phasethree() -phasethree() : Interface for handling secondary uploads of embedded objects +Interface for handling secondary uploads of embedded objects in an html file. -=item * +=item upfile_store() -upfile_store() : Store contents of uploaded file into temporary space. Invoked +Store contents of uploaded file into temporary space. Invoked by phaseone subroutine. -=item * +=item check_extension() -check_extension() : Checks if filename extension is permitted and checks type +Checks if filename extension is permitted and checks type of file - if html file, calls parser to check for embedded objects. Invoked by phasetwo subroutine. @@ -165,57 +165,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')) { - $r->print(''.&mt('The extension on this file,'). - ' "'.$1.'"'.&mt(', is reserved internally by LON-CAPA.'). - ''
+ .&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('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.'/'; @@ -287,31 +309,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('File [_1] could not be copied.',
+ ''.$fn.' ').
+ '
'.
+ &mt('The extension on this file is reserved internally by LON-CAPA.').
+ '
'.
+ &mt('File [_1] could not be copied.',
+ ''.$fn.' ').
+ '
'.
+ &mt('The extension on this file is not recognized by LON-CAPA.').
+ '
'.
+ &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); @@ -340,15 +370,15 @@ STATE } } if (($mode ne 'imsimport') && ($mode ne 'testbank')) { - $result .= '' + .&mt('Co-Author [_1]',$uname.':'.$udom) + .'
' + ); } if ($env{'form.phase'} eq 'three') {