--- loncom/publisher/lonupload.pm 2008/12/12 02:42:49 1.38.2.1
+++ loncom/publisher/lonupload.pm 2011/10/23 23:46:07 1.54
@@ -2,7 +2,7 @@
# The LearningOnline Network with CAPA
# Handler to upload files into construction space
#
-# $Id: lonupload.pm,v 1.38.2.1 2008/12/12 02:42:49 raeburn Exp $
+# $Id: lonupload.pm,v 1.54 2011/10/23 23:46:07 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -28,6 +28,97 @@
#
###
+=head1 NAME
+
+Apache::lonupload - upload files into construction space
+
+=head1 SYNOPSIS
+
+Invoked by /etc/httpd/conf/srm.conf:
+
+
+ PerlAccessHandler Apache::lonacc
+ SetHandler perl-script
+ PerlHandler Apache::lonupload
+ ErrorDocument 403 /adm/login
+ ErrorDocument 404 /adm/notfound.html
+ ErrorDocument 406 /adm/unauthorized.html
+ ErrorDocument 500 /adm/errorhandler
+
+
+=head1 INTRODUCTION
+
+This module uploads a file sitting on a client computer into
+library server construction space.
+
+This is part of the LearningOnline Network with CAPA project
+described at http://www.lon-capa.org.
+
+=head1 HANDLER SUBROUTINE
+
+This routine is called by Apache and mod_perl.
+
+=over 4
+
+=item *
+
+Initialize variables
+
+=item *
+
+Start page output
+
+=item *
+
+output relevant interface phase (phaseone, phasetwo, phasethree or phasefour)
+
+=item *
+
+(phase one is to specify upload file; phase two is to handle conditions
+subsequent to specification--like overwriting an existing file; phase three
+is to handle processing of secondary uploads - of embedded objects in an
+html file).
+
+=back
+
+=head1 OTHER SUBROUTINES
+
+=over
+
+=item phaseone()
+
+Interface for specifying file to upload.
+
+=item phasetwo()
+
+Interface for handling post-conditions about uploading (such
+as overwriting an existing file).
+
+=item phasethree()
+
+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
+by phaseone subroutine.
+
+=item check_extension()
+
+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.
+
+=back
+
+=cut
+
package Apache::lonupload;
use strict;
@@ -79,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')) {
- $r->print('
'
- .&mt('The extension on this file, [_1], is reserved internally by LON-CAPA.','"'.$1.'"' ).
- .' '.&mt('Please change the extension.')
+ # 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('Please change the extension.')
.'
';
}
return $result;
}
@@ -335,7 +506,7 @@ function verifyForm() {
my $fn;
if ($env{'form.filename'}) {
$fn=$env{'form.filename'};
- $fn=~s/^http\:\/\/[^\/]+\///;
+ $fn=~s/^https?\:\/\/[^\/]+\///;
$fn=~s/^\///;
$fn=~s{(~|priv/)($LONCAPA::username_re)}{};
$fn=~s/\/+/\//g;
@@ -354,16 +525,29 @@ function verifyForm() {
$javascript = "\n";
+ # Breadcrumbs
+ my $brcrum = [{'href' => &Apache::loncommon::authorspace(),
+ 'text' => 'Construction Space'},
+ {'href' => '/adm/upload',
+ 'text' => '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())
+ );
if (($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) {
- $r->print('
'.&mt('Co-Author').': '.$uname.
- &mt(' at ').$udom.'
');
+ $r->print('
'
+ .&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);
@@ -379,88 +563,4 @@ function verifyForm() {
1;
__END__
-=head1 NAME
-
-Apache::lonupload - upload files into construction space
-
-=head1 SYNOPSIS
-
-Invoked by /etc/httpd/conf/srm.conf:
-
- PerlAccessHandler Apache::lonacc
- SetHandler perl-script
- PerlHandler Apache::lonupload
- ErrorDocument 403 /adm/login
- ErrorDocument 404 /adm/notfound.html
- ErrorDocument 406 /adm/unauthorized.html
- ErrorDocument 500 /adm/errorhandler
-
-
-=head1 INTRODUCTION
-
-This module uploads a file sitting on a client computer into
-library server construction space.
-
-This is part of the LearningOnline Network with CAPA project
-described at http://www.lon-capa.org.
-
-=head1 HANDLER SUBROUTINE
-
-This routine is called by Apache and mod_perl.
-
-=over 4
-
-=item *
-
-Initialize variables
-
-=item *
-
-Start page output
-
-=item *
-
-output relevant interface phase (phaseone or phasetwo or phasethree)
-
-=item *
-
-(phase one is to specify upload file; phase two is to handle conditions
-subsequent to specification--like overwriting an existing file; phase three
-is to handle processing of secondary uploads - of embedded objects in an
-html file).
-
-=back
-
-=head1 OTHER SUBROUTINES
-
-=over 4
-
-=item *
-
-phaseone() : Interface for specifying file to upload.
-
-=item *
-
-phasetwo() : Interface for handling post-conditions about uploading (such
-as overwriting an existing file).
-
-=item *
-
-phasethree() : Interface for handling secondary uploads of embedded objects
-in an html file.
-
-=item *
-
-upfile_store() : Store contents of uploaded file into temporary space. Invoked
-by phaseone subroutine.
-
-=item *
-
-check_extension() : 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.
-
-=back
-
-=cut