[LON-CAPA-cvs] cvs: loncom(version_2_10_X) /interface loncommon.pm
raeburn
raeburn@source.lon-capa.org
Tue, 09 Nov 2010 21:18:16 -0000
This is a MIME encoded message
--raeburn1289337496
Content-Type: text/plain
raeburn Tue Nov 9 21:18:16 2010 EDT
Modified files: (Branch: version_2_10_X)
/loncom/interface loncommon.pm
Log:
- Backport 1.983, 1.984, 1.985.
--raeburn1289337496
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20101109211816.txt"
Index: loncom/interface/loncommon.pm
diff -u loncom/interface/loncommon.pm:1.948.2.11 loncom/interface/loncommon.pm:1.948.2.12
--- loncom/interface/loncommon.pm:1.948.2.11 Mon Sep 27 01:16:22 2010
+++ loncom/interface/loncommon.pm Tue Nov 9 21:18:16 2010
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# a pile of common routines
#
-# $Id: loncommon.pm,v 1.948.2.11 2010/09/27 01:16:22 raeburn Exp $
+# $Id: loncommon.pm,v 1.948.2.12 2010/11/09 21:18:16 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -6809,7 +6809,7 @@
should it have jsmath forced on by the
current page
bread_crumbs -> Array containing breadcrumbs
- bread_crumbs_components -> if exists show it as headline else show only the breadcrumbs
+ bread_crumbs_component -> if exists show it as headline else show only the breadcrumbs
=back
@@ -8437,14 +8437,83 @@
sub ask_for_embedded_content {
my ($actionurl,$state,$allfiles,$codebase,$args)=@_;
- my $upload_output = '
- <form name="upload_embedded" action="'.$actionurl.'"
- method="post" enctype="multipart/form-data">';
- $upload_output .= $state;
- $upload_output .= '<b>Upload embedded files</b>:<br />'.&start_data_table();
-
+ my (%subdependencies,%dependencies,%newfiles);
my $num = 0;
- foreach my $embed_file (sort {lc($a) cmp lc($b)} keys(%{$allfiles})) {
+ my $upload_output;
+ foreach my $embed_file (keys(%{$allfiles})) {
+ unless ($embed_file =~ m{^\w+://} || $embed_file =~ m{^/}) {
+ my ($relpath,$fname);
+ if ($embed_file =~ m{/}) {
+ my ($path,$fname) = ($embed_file =~ m{^(.+)/([^/]*)$});
+ $subdependencies{$path}{$fname} = 1;
+ } else {
+ $dependencies{$embed_file} = 1;
+ }
+ }
+ }
+ my ($url,$udom,$uname,$getpropath);
+ if (($actionurl eq '/adm/portfolio') || ($actionurl eq '/adm/coursegrp_portfolio')) {
+ my $current_path='/';
+ if ($env{'form.currentpath'}) {
+ $current_path = $env{'form.currentpath'};
+ }
+ if ($actionurl eq '/adm/coursegrp_portfolio') {
+ $udom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+ $uname = $env{'course.'.$env{'request.course.id'}.'.num'};
+ $url = '/userfiles/groups/'.$env{'form.group'}.'/portfolio';
+ } else {
+ $udom = $env{'user.domain'};
+ $uname = $env{'user.name'};
+ $url = '/userfiles/portfolio';
+ }
+ $url .= $current_path;
+ $getpropath = 1;
+ } elsif ($actionurl eq '/adm/upload') {
+ ($uname,my $rest) = ($args->{'current_path'} =~ m{/priv/($match_username)/?(.*)$});
+ $url = '/home/'.$uname.'/public_html';
+ if ($rest ne '') {
+ $url .= '/'.$rest;
+ }
+ }
+ foreach my $path (keys(%subdependencies)) {
+ my %currsubfile;
+ if (($actionurl eq '/adm/portfolio') || ($actionurl eq '/adm/coursegrp_portfolio')) {
+ my @subdir_list = &Apache::lonnet::dirlist($url.$path,$udom,$uname,$getpropath);
+ foreach my $line (@subdir_list) {
+ my ($file_name,$rest) = split(/\&/,$line,2);
+ $currsubfile{$file_name} = 1;
+ }
+ } elsif ($actionurl eq '/adm/upload') {
+ if (opendir(my $dir,$url.'/'.$path)) {
+ my @subdir_list = grep(!/^\./,readdir($dir));
+ map {$currsubfile{$_} = 1;} @subdir_list;
+ }
+ }
+ foreach my $file (keys(%{$subdependencies{$path}})) {
+ unless ($currsubfile{$file}) {
+ $newfiles{$path.'/'.$file} = 1;
+ }
+ }
+ }
+ my (@dir_list,%currfile);
+ if (($actionurl eq '/adm/portfolio') || ($actionurl eq '/adm/coursegrp_portfolio')) {
+ my @dir_list = &Apache::lonnet::dirlist($url,$udom,$uname,$getpropath);
+ foreach my $line (@dir_list) {
+ my ($file_name,$rest) = split(/\&/,$line,2);
+ $currfile{$file_name} = 1;
+ }
+ } elsif ($actionurl eq '/adm/upload') {
+ if (opendir(my $dir,$url)) {
+ @dir_list = grep(!/^\./,readdir($dir));
+ map {$currfile{$_} = 1;} @dir_list;
+ }
+ }
+ foreach my $file (keys(%dependencies)) {
+ unless ($currfile{$file}) {
+ $newfiles{$file} = 1;
+ }
+ }
+ foreach my $embed_file (sort {lc($a) cmp lc($b)} keys(%newfiles)) {
$upload_output .= &start_data_table_row().
'<td>'.$embed_file.'</td><td>';
if ($args->{'ignore_remote_references'}
@@ -8471,14 +8540,21 @@
&escape($$codebase{$embed_file}).'" />';
}
}
- $upload_output .= '</td>'.&Apache::loncommon::end_data_table_row();
+ $upload_output .= '</td>'.&Apache::loncommon::end_data_table_row()."\n";
$num++;
}
- $upload_output .= &Apache::loncommon::end_data_table().'<br />
- <input type ="hidden" name="number_embedded_items" value="'.$num.'" />
- <input type ="submit" value="'.&mt('Upload Listed Files').'" />
- '.&mt('(only files for which a location has been provided will be uploaded)').'
- </form>';
+ if ($num) {
+ $upload_output = '<form name="upload_embedded" action="'.$actionurl.'"'.
+ ' method="post" enctype="multipart/form-data">'."\n".
+ $state.
+ '<b>Upload embedded files</b>:<br />'.&start_data_table().
+ $upload_output.
+ &Apache::loncommon::end_data_table().'<br />'."\n".
+ '<input type ="hidden" name="number_embedded_items" value="'.$num.'" />'."\n".
+ '<input type ="submit" value="'.&mt('Upload Listed Files').'" />'."\n".
+ &mt('(only files for which a location has been provided will be uploaded)')."\n".
+ '</form>';
+ }
return $upload_output;
}
@@ -8514,8 +8590,7 @@
$dir_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 'file_locked') {
$output .= $msg;
next;
}
@@ -8542,18 +8617,25 @@
$env{'form.embedded_item_'.$i.'.filename'}=$fname;
if ($context eq 'portfolio') {
- my $result=
- &Apache::lonnet::userfileupload('embedded_item_'.$i,'',
- $dirpath.$path);
- if ($result !~ m|^/uploaded/|) {
- $output .= '<span class="LC_error">'
- .&mt('An error occurred ([_1]) while trying to upload [_2] for embedded element [_3].'
- ,$result,$orig_uploaded_filename,$env{'form.embedded_orig_'.$i})
- .'</span><br />';
- next;
+ my $result;
+ if ($state eq 'existingfile') {
+ $result=
+ &Apache::lonnet::userfileupload('embedded_item_'.$i,'existingfile',
+ $dirpath.$path,);
} else {
- $output .= '<p>'.&mt('Uploaded [_1]','<span class="LC_filename">'.
- $path.$fname.'</span>').'</p>';
+ $result=
+ &Apache::lonnet::userfileupload('embedded_item_'.$i,'',
+ $dirpath.$path);
+ if ($result !~ m|^/uploaded/|) {
+ $output .= '<span class="LC_error">'
+ .&mt('An error occurred ([_1]) while trying to upload [_2] for embedded element [_3].'
+ ,$result,$orig_uploaded_filename,$env{'form.embedded_orig_'.$i})
+ .'</span><br />';
+ next;
+ } else {
+ $output .= '<p>'.&mt('Uploaded [_1]','<span class="LC_filename">'.
+ $path.$fname.'</span>').'</p>';
+ }
}
} else {
# Save the file
@@ -8619,14 +8701,24 @@
sub check_for_upload {
my ($path,$fname,$group,$element,$portfolio_root,$port_path,
$disk_quota,$current_disk_usage,$uname,$udom) = @_;
- my $filesize = (length($env{'form.'.$element})) / 1000; #express in k (1024?)
+ my $filesize = length($env{'form.'.$element});
+ if (!$filesize) {
+ my $msg = '<span class="LC_error">'.
+ &mt('Unable to upload [_1]. (size = [_2] bytes)',
+ '<span class="LC_filename">'.$fname.'</span>',
+ $filesize).'<br />'.
+ &mt('Either the file you uploaded was empty, or your web browser was unable to read its contents.').'<br />';
+ '</span>';
+ return ('zero_bytes',$msg);
+ }
+ $filesize = $filesize/1000; #express in k (1024?)
my $getpropath = 1;
my @dir_list = &Apache::lonnet::dirlist($portfolio_root.$path,$udom,$uname,
$getpropath);
my $found_file = 0;
my $locked_file = 0;
foreach my $line (@dir_list) {
- my ($file_name)=split(/\&/,$line,2);
+ my ($file_name,$rest)=split(/\&/,$line,2);
if ($file_name eq $fname){
$file_name = $path.$file_name;
if ($group ne '') {
@@ -8635,6 +8727,20 @@
$found_file = 1;
if (&Apache::lonnet::is_locked($file_name,$udom,$uname) eq 'true') {
$locked_file = 1;
+ } else {
+ my @info = split(/\&/,$rest);
+ my $currsize = $info[6]/1000;
+ if ($currsize < $filesize) {
+ my $extra = $filesize - $currsize;
+ if (($current_disk_usage + $extra) > $disk_quota) {
+ my $msg = '<span class="LC_error">'.
+ &mt('Unable to upload [_1]. (size = [_2] kilobytes). Disk quota will be exceeded if existing (smaller) file with same name (size = [_3] kilobytes) is replaced.',
+ '<span class="LC_filename">'.$fname.'</span>',$filesize,$currsize).'</span>'.
+ '<br />'.&mt('Disk quota is [_1] kilobytes. Your current disk usage is [_2] kilobytes.',
+ $disk_quota,$current_disk_usage);
+ return ('will_exceed_quota',$msg);
+ }
+ }
}
}
}
@@ -8652,11 +8758,9 @@
return ('file_locked',$msg);
} else {
my $msg = '<span class="LC_error">';
- $msg .= &mt('Unable to upload [_1]. A file by that name was found in [_2].','<span class="LC_filename">'.$fname.'</span>',$port_path.$env{'form.currentpath'});
+ $msg .= &mt(' A file by that name: [_1] was found in [_2].','<span class="LC_filename">'.$fname.'</span>',$port_path.$env{'form.currentpath'});
$msg .= '</span>';
- $msg .= '<br />';
- $msg .= &mt('To upload, rename or delete existing [_1] in [_2].','<span class="LC_filename">'.$fname.'</span>', $port_path.$env{'form.currentpath'});
- return ('file_exists',$msg);
+ return ('existingfile',$msg);
}
}
}
--raeburn1289337496--