--- loncom/interface/portfolio.pm 2010/10/23 19:28:12 1.225
+++ loncom/interface/portfolio.pm 2010/10/29 23:19:54 1.228
@@ -1,7 +1,7 @@
# The LearningOnline Network
# portfolio browser
#
-# $Id: portfolio.pm,v 1.225 2010/10/23 19:28:12 raeburn Exp $
+# $Id: portfolio.pm,v 1.228 2010/10/29 23:19:54 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1915,60 +1915,197 @@ ENDSMP
sub upload {
my ($r,$url,$group)=@_;
- my $fname=&Apache::lonnet::clean_filename($env{'form.uploaddoc.filename'});
+ my $formname = 'uploaddoc';
+ my $fname = &Apache::lonnet::clean_filename($env{'form.'.$formname.'.filename'});
+ my ($state,$msg);
+ if ($fname eq '') {
+ my $msg = &mt('Invalid filename: [_1]; the name of the uploaded file did not contain any letters, '.
+ 'so after eliminating special characters there was nothing left.',
+ ''.$env{'form.uploaddoc.filename'}.'');
+ $r->print($msg.&done('Back',$url));
+ return;
+ }
my $disk_quota = &get_quota($group);
my $portfolio_root = &get_portfolio_root();
my $port_path = &get_port_path();
my ($uname,$udom) = &get_name_dom($group);
my $getpropath = 1;
my $current_disk_usage = &Apache::lonnet::diskusage($udom,$uname,$portfolio_root,$getpropath);
- my ($state,$msg) =
+ ($state,$msg) =
&Apache::loncommon::check_for_upload($env{'form.currentpath'},$fname,
- $group,'uploaddoc',$portfolio_root,
+ $group,$formname,$portfolio_root,
$port_path,$disk_quota,
$current_disk_usage,$uname,$udom);
if ($state eq 'will_exceed_quota'
|| $state eq 'file_locked'
- || $state eq 'file_exists' ) {
+ || $state eq 'zero_bytes') {
$r->print($msg.&done('Back',$url));
return;
}
my (%allfiles,%codebase,$mode);
- if ($env{'form.uploaddoc.filename'} =~ m/(\.htm|\.html|\.shtml)$/i) {
+ if ($env{'form.'.$formname.'.filename'} =~ m/(\.htm|\.html|\.shtml)$/i) {
if ($env{'form.parserflag'}) {
$mode = 'parse';
}
}
- my $result=
- &Apache::lonnet::userfileupload('uploaddoc','',
+ my $context;
+ if ($state eq 'existingfile') {
+ $context = $state;
+ }
+ my ($result,$timestamp) =
+ &Apache::lonnet::userfileupload($formname,$context,
$port_path.$env{'form.currentpath'},
$mode,\%allfiles,\%codebase);
- if ($result !~ m|^/uploaded/|) {
+ if ($state eq 'existingfile') {
+ my $group_elem;
+ my $rootdir = $r->dir_config('lonDaemons').'/tmp/overwrites';
+ if ($group eq '') {
+ $rootdir .= '/'.$env{'user.domain'}.'/'.$env{'user.name'};
+ } else {
+ $rootdir .= '/'.$env{'course.'.$env{'request.course.id'}.'.domain'}.
+ '/'.$env{'course.'.$env{'request.course.id'}.'.num'};
+ $group_elem = '';
+ }
+ if (($result eq $rootdir.'/'.$port_path.$env{'form.currentpath'}.$fname) && ($timestamp =~ /^\d+$/)) {
+ my $showfname = &HTML::Entities::encode($fname,'&<>"');
+ my %lt = &Apache::lonlocal::texthash (
+ over => 'Overwrite existing file?',
+ yes => 'Yes',
+ no => 'No',
+ undo => 'This action can not be undone.',
+ conf => 'Are you sure you want to overwrite an existing file?',
+ cont => 'Continue',
+ );
+ $r->print(<<"END");
+
+$msg
+
".&mt("Completed upload of the file. This file contained references to other files. You must upload the referenced files or else the uploaded file may not work properly.")."
"); - $r->print("".&mt("Please select the locations from which the referenced files are to be uploaded.")."
"); - $r->print(&Apache::loncommon::ask_for_embedded_content('/adm/portfolio',$state,\%allfiles,\%codebase, - {'error_on_invalid_names' => 1, - 'ignore_remote_references' => 1,})); - $r->print('Or '.&done('Return to directory',$url).'
'); + if ($env{'form.group'} ne '') { + $state .= ''."\n"; + } + my $embedded = &Apache::loncommon::ask_for_embedded_content($url,$state,$allfiles,$codebase, + {'error_on_invalid_names' => 1, + 'ignore_remote_references' => 1,}); + if ($embedded) { + $r->print(''.&mt("Completed upload of the file. This file contained references to other files. You must upload the referenced files or else the uploaded file may not work properly.").'
'. + ''.&mt("Please select the locations from which the referenced files are to be uploaded.").'
'. + $embedded. + 'Or '.&done('Return to directory',$url).'
'); + } else { + $r->print(&done(undef,$url)); + } + return; +} + +sub overwrite { + my ($r,$url,$group)=@_; + my $formname = 'existingfile'; + my $port_path = &get_port_path(); + my $fname = &Apache::lonnet::clean_filename($env{'form.filename'}); + my (%allfiles,%codebase,$mode); + $mode = $env{'form.mode'}; + if ($mode eq 'parse') { + if ($fname !~ /\.s?html?$/i) { + undef($mode); + } + } + if ($fname eq '') { + my $msg = &mt('Invalid filename: [_1]; the name of the uploaded file did not contain any letters, '. + 'so after eliminating special characters there was nothing left.', + ''.$env{'form.filename'}.''); + $r->print($msg.&done('Back',$url)); + return; + } + $env{'form.'.$formname.'.filename'} = $fname; + my $result= + &Apache::lonnet::userfileupload($formname,'overwrite', + $port_path.$env{'form.currentpath'}, + $mode,\%allfiles,\%codebase); + if ($result !~ m|^/uploaded/|) { + $r->print(''.&mt('An error occurred ([_1]) while trying to overwrite [_2].' + ,$result,&display_file(undef,$fname)).'