[LON-CAPA-cvs] cvs: loncom /interface portfolio.pm
banghart
lon-capa-cvs@mail.lon-capa.org
Wed, 25 Aug 2004 18:48:26 -0000
banghart Wed Aug 25 14:48:26 2004 EDT
Modified files:
/loncom/interface portfolio.pm
Log:
Does not allow overwriting existing file when uploading.
User instead receives this message:
Unable to upload $filename, a file by that name was found in $path
To upload, rename or delete existing $filename in $path.
Index: loncom/interface/portfolio.pm
diff -u loncom/interface/portfolio.pm:1.32 loncom/interface/portfolio.pm:1.33
--- loncom/interface/portfolio.pm:1.32 Wed Aug 25 13:30:49 2004
+++ loncom/interface/portfolio.pm Wed Aug 25 14:48:26 2004
@@ -266,6 +266,19 @@
$ENV{'form.currentpath'}.'" />');
}
+sub clean_filename {
+ my ($fname)=@_;
+# Replace Windows backslashes by forward slashes
+ $fname=~s/\\/\//g;
+# Get rid of everything but the actual filename
+ $fname=~s/^.*\/([^\/]+)$/$1/;
+# Replace spaces by underscores
+ $fname=~s/\s+/\_/g;
+# Replace all other weird characters by nothing
+ $fname=~s/[^\w\.\-]//g;
+ return $fname;
+}
+
sub close_form {
my ($r)=@_;
$r->print('<p><input type="submit" value="'.&mt('Continue').
@@ -377,11 +390,33 @@
my ($r)=@_;
#FIXME if the file already exists we need to do a confirmation pass
#before overwriting
- my $result=&Apache::lonnet::userfileupload('uploaddoc','',
- 'portfolio'.$ENV{'form.currentpath'});
- if ($result !~ m|^/uploaded/|) {
- $r->print('<font color="red"> An errror occured ('.$result.
- ') while trying to upload '.&display_file().'</font><br />');
+ my $fname=$ENV{'form.uploaddoc.filename'};
+ $fname=&clean_filename($fname);
+ my $portfolio_root = &Apache::loncommon::propath($ENV{'user.domain'},
+ $ENV{'user.name'}).
+ '/userfiles/portfolio';
+ my @dir_list=&Apache::lonnet::dirlist($ENV{'form.currentpath'},
+ $ENV{'user.domain'},
+ $ENV{'user.name'},$portfolio_root);
+ my $found_file = 0;
+ foreach my $line (@dir_list) {
+ #$strip holds directory/file name
+ #$dom
+ my ($filename,$dom,undef,$testdir,undef,undef,undef,undef,undef,undef,undef,undef,undef,undef,$obs,undef)=split(/\&/,$line,16);
+ if ($filename eq $fname){
+ $found_file = 1;
+ }
+ }
+ if ($found_file){
+ $r->print('<font color="red">Unable to upload <strong>'.$fname.'</strong>, a file by that name was found in <strong>'.$ENV{'form.currentpath'}.'</strong></font>'.
+ '<br />To upload, rename or delete existing '.$fname.' in '.$ENV{'form.currentpath'});
+ } else {
+ my $result=&Apache::lonnet::userfileupload('uploaddoc','',
+ 'portfolio'.$ENV{'form.currentpath'});
+ if ($result !~ m|^/uploaded/|) {
+ $r->print('<font color="red"> An errror occured ('.$result.
+ ') while trying to upload '.&display_file().'</font><br />');
+ }
}
$r->print(&done());
}
@@ -409,6 +444,9 @@
sub handler {
# this handles file management
my $r = shift;
+ my $portfolio_root = &Apache::loncommon::propath($ENV{'user.domain'},
+ $ENV{'user.name'}).
+ '/userfiles/portfolio';
&Apache::loncommon::no_cache($r);
&Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
@@ -443,10 +481,6 @@
if ($ENV{'form.currentpath'}) {
$current_path = $ENV{'form.currentpath'};
}
-
- my $portfolio_root = &Apache::loncommon::propath($ENV{'user.domain'},
- $ENV{'user.name'}).
- '/userfiles/portfolio';
my @dir_list=&Apache::lonnet::dirlist($current_path,
$ENV{'user.domain'},
$ENV{'user.name'},$portfolio_root);