[LON-CAPA-cvs] cvs: loncom /lonnet/perl lonnet.pm
raeburn
raeburn@source.lon-capa.org
Sat, 27 Nov 2010 23:32:09 -0000
raeburn Sat Nov 27 23:32:09 2010 EDT
Modified files:
/loncom/lonnet/perl lonnet.pm
Log:
- mime-type from checking with File::MMagic in &finishuserfileupload()
or &process_coursefile() now stored in scalar ref (additional arg in
&userfileupload().
Index: loncom/lonnet/perl/lonnet.pm
diff -u loncom/lonnet/perl/lonnet.pm:1.1094 loncom/lonnet/perl/lonnet.pm:1.1095
--- loncom/lonnet/perl/lonnet.pm:1.1094 Sat Nov 27 16:55:57 2010
+++ loncom/lonnet/perl/lonnet.pm Sat Nov 27 23:32:08 2010
@@ -1,7 +1,7 @@
# The LearningOnline Network
# TCP networking package
#
-# $Id: lonnet.pm,v 1.1094 2010/11/27 16:55:57 raeburn Exp $
+# $Id: lonnet.pm,v 1.1095 2010/11/27 23:32:08 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -2176,6 +2176,8 @@
# path to file, source of file, instruction to parse file for objects,
# ref to hash for embedded objects,
# ref to hash for codebase of java objects.
+# reference to scalar to accommodate mime type determined
+# from File::MMagic if $parser = parse.
#
# output: url to file (if action was uploaddoc),
# ok if successful, or diagnostic message otherwise (if action was propagate or copy)
@@ -2202,7 +2204,8 @@
#
sub process_coursefile {
- my ($action,$docuname,$docudom,$file,$source,$parser,$allfiles,$codebase)=@_;
+ my ($action,$docuname,$docudom,$file,$source,$parser,$allfiles,$codebase,
+ $mimetype)=@_;
my $fetchresult;
my $home=&homeserver($docuname,$docudom);
if ($action eq 'propagate') {
@@ -2230,13 +2233,16 @@
close($fh);
if ($parser eq 'parse') {
my $mm = new File::MMagic;
- my $mime_type = $mm->checktype_filename($filepath.'/'.$fname);
- if ($mime_type eq 'text/html') {
+ my $type = $mm->checktype_filename($filepath.'/'.$fname);
+ if ($type eq 'text/html') {
my $parse_result = &extract_embedded_items($filepath.'/'.$fname,$allfiles,$codebase);
unless ($parse_result eq 'ok') {
&logthis('Failed to parse '.$filepath.'/'.$fname.' for embedded media: '.$parse_result);
}
}
+ if (ref($mimetype)) {
+ $$mimetype = $type;
+ }
}
$fetchresult= &reply('fetchuserfile:'.$docudom.'/'.$docuname.'/'.$file,
$home);
@@ -2369,13 +2375,15 @@
# $thumbheight - height (pixels) of thumbnail to make for uploaded image
# $resizewidth - width (pixels) to which to resize uploaded image
# $resizeheight - height (pixels) to which to resize uploaded image
+# $mimetype - reference to scalar to accommodate mime type determined
+# from File::MMagic if $parser = parse.
#
# output: url of file in userspace, or error: <message>
# or /adm/notfound.html if failure to upload occurse
sub userfileupload {
my ($formname,$context,$subdir,$parser,$allfiles,$codebase,$destuname,
- $destudom,$thumbwidth,$thumbheight,$resizewidth,$resizeheight)=@_;
+ $destudom,$thumbwidth,$thumbheight,$resizewidth,$resizeheight,$mimetype)=@_;
if (!defined($subdir)) { $subdir='unknown'; }
my $fname=$env{'form.'.$formname.'.filename'};
$fname=&clean_filename($fname);
@@ -2387,7 +2395,7 @@
($context eq 'existingfile') || ($context eq 'canceloverwrite')) {
my $now = time;
my $filepath;
- if (($formname eq 'screenshot') && ($subdir eq 'helprequests')) {
+ 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'}.
@@ -2451,12 +2459,12 @@
return &finishuserfileupload($docuname,$docudom,
$formname,$fname,$parser,$allfiles,
$codebase,$thumbwidth,$thumbheight,
- $resizewidth,$resizeheight,$context);
+ $resizewidth,$resizeheight,$context,$mimetype);
} else {
$fname=$env{'form.folder'}.'/'.$fname;
return &process_coursefile('uploaddoc',$docuname,$docudom,
$fname,$formname,$parser,
- $allfiles,$codebase);
+ $allfiles,$codebase,$mimetype);
}
} elsif (defined($destuname)) {
my $docuname=$destuname;
@@ -2464,7 +2472,7 @@
return &finishuserfileupload($docuname,$docudom,$formname,$fname,
$parser,$allfiles,$codebase,
$thumbwidth,$thumbheight,
- $resizewidth,$resizeheight,$context);
+ $resizewidth,$resizeheight,$context,$mimetype);
} else {
my $docuname=$env{'user.name'};
my $docudom=$env{'user.domain'};
@@ -2475,13 +2483,13 @@
return &finishuserfileupload($docuname,$docudom,$formname,$fname,
$parser,$allfiles,$codebase,
$thumbwidth,$thumbheight,
- $resizewidth,$resizeheight,$context);
+ $resizewidth,$resizeheight,$context,$mimetype);
}
}
sub finishuserfileupload {
my ($docuname,$docudom,$formname,$fname,$parser,$allfiles,$codebase,
- $thumbwidth,$thumbheight,$resizewidth,$resizeheight,$context) = @_;
+ $thumbwidth,$thumbheight,$resizewidth,$resizeheight,$context,$mimetype) = @_;
my $path=$docudom.'/'.$docuname.'/';
my $filepath=$perlvar{'lonDocRoot'};
@@ -2539,8 +2547,8 @@
}
if ($parser eq 'parse') {
my $mm = new File::MMagic;
- my $mime_type = $mm->checktype_filename($filepath.'/'.$file);
- if ($mime_type eq 'text/html') {
+ my $type = $mm->checktype_filename($filepath.'/'.$file);
+ if ($type eq 'text/html') {
my $parse_result = &extract_embedded_items($filepath.'/'.$file,
$allfiles,$codebase);
unless ($parse_result eq 'ok') {
@@ -2548,6 +2556,9 @@
' for embedded media: '.$parse_result);
}
}
+ if (ref($mimetype)) {
+ $$mimetype = $type;
+ }
}
if (($thumbwidth =~ /^\d+$/) && ($thumbheight =~ /^\d+$/)) {
my $input = $filepath.'/'.$file;
@@ -11437,6 +11448,8 @@
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.
+ mimetype: reference to scalar to accommodate mime type determined
+ from File::MMagic if $parser = parse.
returns either the url of the uploaded file (/uploaded/....) if successful
and /adm/notfound.html if unsuccessful (or an error message if context