[LON-CAPA-cvs] cvs: loncom /interface lonbulletin.pm londocs.pm lonsimplepage.pm /lonnet/perl lonnet.pm
raeburn
raeburn@source.lon-capa.org
Wed, 27 Oct 2010 01:00:44 -0000
This is a MIME encoded message
--raeburn1288141244
Content-Type: text/plain
raeburn Wed Oct 27 01:00:44 2010 EDT
Modified files:
/loncom/interface lonbulletin.pm londocs.pm lonsimplepage.pm
/loncom/lonnet/perl lonnet.pm
Log:
- Second arg in lonnet::userfileupload() changed from boolean (coursedoc) to
$context
(possible values: coursedoc, existingfile, overwrite, canceloverwrite, or '').
- To facilitate overwriting of existing files when uploading to portfolio
--raeburn1288141244
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20101027010044.txt"
Index: loncom/interface/lonbulletin.pm
diff -u loncom/interface/lonbulletin.pm:1.61 loncom/interface/lonbulletin.pm:1.62
--- loncom/interface/lonbulletin.pm:1.61 Sat Aug 7 19:23:50 2010
+++ loncom/interface/lonbulletin.pm Wed Oct 27 01:00:38 2010
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Bulletin Board Handler
#
-# $Id: lonbulletin.pm,v 1.61 2010/08/07 19:23:50 raeburn Exp $
+# $Id: lonbulletin.pm,v 1.62 2010/10/27 01:00:38 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -218,11 +218,11 @@
}
if ($group ne '') {
$syllabus{'uploaded.photourl'}=
- &Apache::lonnet::userfileupload('uploaddoc',1,
+ &Apache::lonnet::userfileupload('uploaddoc','coursedoc',
'bulletin/'.$group.'/'.$marker);
} else {
$syllabus{'uploaded.photourl'}=
- &Apache::lonnet::userfileupload('uploaddoc',1,
+ &Apache::lonnet::userfileupload('uploaddoc','coursedoc',
'bulletin/'.$marker);
}
}
Index: loncom/interface/londocs.pm
diff -u loncom/interface/londocs.pm:1.438 loncom/interface/londocs.pm:1.439
--- loncom/interface/londocs.pm:1.438 Thu Sep 23 21:25:43 2010
+++ loncom/interface/londocs.pm Wed Oct 27 01:00:38 2010
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Documents
#
-# $Id: londocs.pm,v 1.438 2010/09/23 21:25:43 www Exp $
+# $Id: londocs.pm,v 1.439 2010/10/27 01:00:38 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1720,7 +1720,7 @@
# probably the only place in the system where this should be "1"
my $newidx=&LONCAPA::map::getresidx();
$destination .= $newidx;
- my $url=&Apache::lonnet::userfileupload('uploaddoc',1,$destination,
+ my $url=&Apache::lonnet::userfileupload('uploaddoc','coursedoc',$destination,
$parseaction,$allfiles,
$codebase);
my $ext='false';
@@ -1781,7 +1781,7 @@
}
$destination .= $newidx;
my ($url,$filename);
- $url=&Apache::lonnet::userfileupload($formname.$num,1,$destination);
+ $url=&Apache::lonnet::userfileupload($formname.$num,'coursedoc',$destination);
($filename) = ($url =~ m{^/uploaded/\Q$coursedom\E/\Q$coursenum\E/\Q$destination\E/(.+)$});
return $filename;
}
Index: loncom/interface/lonsimplepage.pm
diff -u loncom/interface/lonsimplepage.pm:1.96 loncom/interface/lonsimplepage.pm:1.97
--- loncom/interface/lonsimplepage.pm:1.96 Sat Aug 7 19:23:51 2010
+++ loncom/interface/lonsimplepage.pm Wed Oct 27 01:00:38 2010
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Simple Page Editor
#
-# $Id: lonsimplepage.pm,v 1.96 2010/08/07 19:23:51 raeburn Exp $
+# $Id: lonsimplepage.pm,v 1.97 2010/10/27 01:00:38 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -225,10 +225,10 @@
}
if ($group ne '') {
$syllabus{'uploaded.photourl'}=&Apache::lonnet::userfileupload(
- 'uploaddoc',1,"grouppage/$group");
+ 'uploaddoc','coursedoc',"grouppage/$group");
} else {
$syllabus{'uploaded.photourl'}=
- &Apache::lonnet::userfileupload('uploaddoc',1,'simplepage');
+ &Apache::lonnet::userfileupload('uploaddoc','coursedoc','simplepage');
}
}
$syllabus{'uploaded.lastmodified'}=time;
Index: loncom/lonnet/perl/lonnet.pm
diff -u loncom/lonnet/perl/lonnet.pm:1.1089 loncom/lonnet/perl/lonnet.pm:1.1090
--- loncom/lonnet/perl/lonnet.pm:1.1089 Fri Oct 1 16:37:35 2010
+++ loncom/lonnet/perl/lonnet.pm Wed Oct 27 01:00:44 2010
@@ -1,7 +1,7 @@
# The LearningOnline Network
# TCP networking package
#
-# $Id: lonnet.pm,v 1.1089 2010/10/01 16:37:35 raeburn Exp $
+# $Id: lonnet.pm,v 1.1090 2010/10/27 01:00:44 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -95,6 +95,7 @@
use File::MMagic;
use LONCAPA qw(:DEFAULT :match);
use LONCAPA::Configuration;
+use File::Copy;
my $readit;
my $max_connection_retries = 10; # Or some such value.
@@ -2352,8 +2353,12 @@
# --------------- Take an uploaded file and put it into the userfiles directory
# input: $formname - the contents of the file are in $env{"form.$formname"}
# the desired filenam is in $env{"form.$formname.filename"}
-# $coursedoc - if true up to the current course
-# if false
+# $context - possible values: coursedoc, existingfile, overwrite,
+# canceloverwrite, or ''.
+# if 'coursedoc': upload to the current course
+# if 'existingfile': write file to tmp/overwrites directory
+# if 'canceloverwrite': delete file written to tmp/overwrites directory
+# $context is passed as argument to &finishuserfileupload
# $subdir - directory in userfile to store the file into
# $parser - instruction to parse file for objects ($parser = parse)
# $allfiles - reference to hash for embedded objects
@@ -2369,32 +2374,54 @@
# or /adm/notfound.html if failure to upload occurse
sub userfileupload {
- my ($formname,$coursedoc,$subdir,$parser,$allfiles,$codebase,$destuname,
+ my ($formname,$context,$subdir,$parser,$allfiles,$codebase,$destuname,
$destudom,$thumbwidth,$thumbheight,$resizewidth,$resizeheight)=@_;
if (!defined($subdir)) { $subdir='unknown'; }
my $fname=$env{'form.'.$formname.'.filename'};
$fname=&clean_filename($fname);
-# See if there is anything left
+ # See if there is anything left
unless ($fname) { return 'error: no uploaded file'; }
chop($env{'form.'.$formname});
- if (($formname eq 'screenshot') && ($subdir eq 'helprequests')) { #files uploaded to help request form are handled differently
+ # Files uploaded to help request form, or uploaded to "create course" page are handled differently
+ if ((($formname eq 'screenshot') && ($subdir eq 'helprequests')) ||
+ (($formname eq 'coursecreatorxml') && ($subdir eq 'batchupload')) ||
+ ($context eq 'existingfile') || ($context eq 'canceloverwrite')) {
my $now = time;
- my $filepath = 'tmp/helprequests/'.$now;
- my @parts=split(/\//,$filepath);
- my $fullpath = $perlvar{'lonDaemons'};
- for (my $i=0;$i<@parts;$i++) {
- $fullpath .= '/'.$parts[$i];
- if ((-e $fullpath)!=1) {
- mkdir($fullpath,0777);
+ my $filepath;
+ if (($formname eq 'screenshot') && ($subdir eq 'helprequests')) {
+ $filepath = 'tmp/helprequests/'.$now;
+ } elsif (($formname eq 'coursecreatorxml') && ($subdir eq 'batchupload')) {
+ $filepath = 'tmp/addcourse/'.$destudom.'/web/'.$env{'user.name'}.
+ '_'.$env{'user.domain'}.'/pending';
+ } elsif (($context eq 'existingfile') || ($context eq 'canceloverwrite')) {
+ my ($docuname,$docudom);
+ if ($destudom) {
+ $docudom = $destudom;
+ } else {
+ $docudom = $env{'user.domain'};
+ }
+ if ($destuname) {
+ $docuname = $destuname;
+ } else {
+ $docuname = $env{'user.name'};
+ }
+ if (exists($env{'form.group'})) {
+ $docuname=$env{'course.'.$env{'request.course.id'}.'.num'};
+ $docudom=$env{'course.'.$env{'request.course.id'}.'.domain'};
+ }
+ $filepath = 'tmp/overwrites/'.$docudom.'/'.$docuname.'/'.$subdir;
+ if ($context eq 'canceloverwrite') {
+ my $tempfile = $perlvar{'lonDaemons'}.'/'.$filepath.'/'.$fname;
+ if (-e $tempfile) {
+ my @info = stat($tempfile);
+ if ($info[9] eq $env{'form.timestamp'}) {
+ unlink($tempfile);
+ }
+ }
+ return;
}
}
- open(my $fh,'>'.$fullpath.'/'.$fname);
- print $fh $env{'form.'.$formname};
- close($fh);
- return $fullpath.'/'.$fname;
- } elsif (($formname eq 'coursecreatorxml') && ($subdir eq 'batchupload')) { #files uploaded to create course page are handled differently
- my $filepath = 'tmp/addcourse/'.$destudom.'/web/'.$env{'user.name'}.
- '_'.$env{'user.domain'}.'/pending';
+ # Create the directory if not present
my @parts=split(/\//,$filepath);
my $fullpath = $perlvar{'lonDaemons'};
for (my $i=0;$i<@parts;$i++) {
@@ -2406,22 +2433,26 @@
open(my $fh,'>'.$fullpath.'/'.$fname);
print $fh $env{'form.'.$formname};
close($fh);
- return $fullpath.'/'.$fname;
+ if ($context eq 'existingfile') {
+ my @info = stat($fullpath.'/'.$fname);
+ return ($fullpath.'/'.$fname,$info[9]);
+ } else {
+ return $fullpath.'/'.$fname;
+ }
}
if ($subdir eq 'scantron') {
$fname = 'scantron_orig_'.$fname;
} else {
-# Create the directory if not present
$fname="$subdir/$fname";
}
- if ($coursedoc) {
+ if ($context eq 'coursedoc') {
my $docuname=$env{'course.'.$env{'request.course.id'}.'.num'};
my $docudom=$env{'course.'.$env{'request.course.id'}.'.domain'};
if ($env{'form.folder'} =~ m/^(default|supplemental)/) {
return &finishuserfileupload($docuname,$docudom,
$formname,$fname,$parser,$allfiles,
$codebase,$thumbwidth,$thumbheight,
- $resizewidth,$resizeheight);
+ $resizewidth,$resizeheight,$context);
} else {
$fname=$env{'form.folder'}.'/'.$fname;
return &process_coursefile('uploaddoc',$docuname,$docudom,
@@ -2434,8 +2465,7 @@
return &finishuserfileupload($docuname,$docudom,$formname,$fname,
$parser,$allfiles,$codebase,
$thumbwidth,$thumbheight,
- $resizewidth,$resizeheight);
-
+ $resizewidth,$resizeheight,$context);
} else {
my $docuname=$env{'user.name'};
my $docudom=$env{'user.domain'};
@@ -2446,13 +2476,13 @@
return &finishuserfileupload($docuname,$docudom,$formname,$fname,
$parser,$allfiles,$codebase,
$thumbwidth,$thumbheight,
- $resizewidth,$resizeheight);
+ $resizewidth,$resizeheight,$context);
}
}
sub finishuserfileupload {
my ($docuname,$docudom,$formname,$fname,$parser,$allfiles,$codebase,
- $thumbwidth,$thumbheight,$resizewidth,$resizeheight) = @_;
+ $thumbwidth,$thumbheight,$resizewidth,$resizeheight,$context) = @_;
my $path=$docudom.'/'.$docuname.'/';
my $filepath=$perlvar{'lonDocRoot'};
@@ -2478,7 +2508,23 @@
print STDERR ('Failed to create '.$filepath.'/'.$file."\n");
return '/adm/notfound.html';
}
- if (!print FH ($env{'form.'.$formname})) {
+ if ($context eq 'overwrite') {
+ my $source = $perlvar{'lonDaemons'}.'/tmp/overwrites/'.$docudom.'/'.$docuname.'/'.$fname;
+ my $target = $filepath.'/'.$file;
+ if (-e $source) {
+ my @info = stat($source);
+ if ($info[9] eq $env{'form.timestamp'}) {
+ unless (&File::Copy::move($source,$target)) {
+ &logthis('Failed to overwrite '.$filepath.'/'.$file);
+ return "Moving from $source failed";
+ }
+ } else {
+ return "Temporary file: $source had unexpected date/time for last modification";
+ }
+ } else {
+ return "Temporary file: $source missing";
+ }
+ } elsif (!print FH ($env{'form.'.$formname})) {
&logthis('Failed to write to '.$filepath.'/'.$file);
print STDERR ('Failed to write to '.$filepath.'/'.$file."\n");
return '/adm/notfound.html';
@@ -11350,8 +11396,10 @@
filename, and the contents of the file to create/modifed exist
the filename is in $env{'form.'.$formname.'.filename'} and the
contents of the file is located in $env{'form.'.$formname}
- coursedoc - if true, store the file in the course of the active role
- of the current user
+ context - if coursedoc, store the file in the course of the active role
+ of the current user;
+ if 'existingfile': store in 'overwrites' in /home/httpd/perl/tmp
+ if 'canceloverwrite': delete file in tmp/overwrites directory
subdir - required - subdirectory to put the file in under ../userfiles/
if undefined, it will be placed in "unknown"
@@ -11373,16 +11421,27 @@
=item *
-finishuserfileupload(): routine that creaes and sends the file to
+finishuserfileupload(): routine that creates and sends the file to
userspace, probably shouldn't be called directly
docuname: username or courseid of destination for the file
docudom: domain of user/course of destination for the file
formname: same as for userfileupload()
- fname: filename (inculding subdirectories) for the file
+ fname: filename (including subdirectories) for the file
+ parser: if 'parse', will parse (html) file to extract references to objects, links etc.
+ allfiles: reference to hash used to store objects found by parser
+ codebase: reference to hash used for codebases of java objects found by parser
+ thumbwidth: width (pixels) of thumbnail to be created for uploaded image
+ thumbheight: height (pixels) of thumbnail to be created for uploaded image
+ resizewidth: width to be used to resize image using resizeImage from ImageMagick
+ resizeheight: height to be used to resize image using resizeImage from ImageMagick
+ context: if 'overwrite', will move the uploaded file from its temporary location to
+ userfiles to facilitate overwriting a previously uploaded file with same name.
returns either the url of the uploaded file (/uploaded/....) if successful
- and /adm/notfound.html if unsuccessful
+ and /adm/notfound.html if unsuccessful (or an error message if context
+ was 'overwrite').
+
=item *
--raeburn1288141244--