[LON-CAPA-cvs] cvs: loncom /lonnet/perl lonnet.pm
raeburn
raeburn at source.lon-capa.org
Fri Apr 13 20:52:16 EDT 2012
raeburn Sat Apr 14 00:52:16 2012 EDT
Modified files:
/loncom/lonnet/perl lonnet.pm
Log:
- &extract_embedded_items() can now detect dependencies in a Camtasia
index.html.
- early out for &repcopy_userfile() and &repcopy() when file is within
/home/httpd/lonUsers, i.e., file is a file uploaded to a course,
and current server is course's homesever, so replication is not needed.
- replaces regexp for non-existent /home/httpd/html/lonUsers (first
appeared in rev 1.538).
Index: loncom/lonnet/perl/lonnet.pm
diff -u loncom/lonnet/perl/lonnet.pm:1.1163 loncom/lonnet/perl/lonnet.pm:1.1164
--- loncom/lonnet/perl/lonnet.pm:1.1163 Sun Apr 1 16:19:20 2012
+++ loncom/lonnet/perl/lonnet.pm Sat Apr 14 00:52:16 2012
@@ -1,7 +1,7 @@
# The LearningOnline Network
# TCP networking package
#
-# $Id: lonnet.pm,v 1.1163 2012/04/01 16:19:20 raeburn Exp $
+# $Id: lonnet.pm,v 1.1164 2012/04/14 00:52:16 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -2443,7 +2443,7 @@
$filename=~s/\/+/\//g;
my $londocroot = $perlvar{'lonDocRoot'};
if ($filename=~m{^\Q$londocroot/adm/\E}) { return 'ok'; }
- if ($filename=~m{^\Q$londocroot/lonUsers/\E}) { return 'ok'; }
+ if ($filename=~m{^\Q/home/httpd/lonUsers/\E}) { return 'ok'; }
if ($filename=~m{^\Q$londocroot/userfiles/\E} or
$filename=~m{^/*(uploaded|editupload)/}) {
return &repcopy_userfile($filename);
@@ -3033,6 +3033,7 @@
sub extract_embedded_items {
my ($fullpath,$allfiles,$codebase,$content) = @_;
my @state = ();
+ my (%lastids,%related,%shockwave,%flashvars);
my %javafiles = (
codebase => '',
code => '',
@@ -3062,10 +3063,30 @@
&add_filetype($allfiles,$attr->{'href'},'href');
}
if (lc($tagname) eq 'script') {
+ my $src;
if ($attr->{'archive'} =~ /\.jar$/i) {
&add_filetype($allfiles,$attr->{'archive'},'archive');
} else {
- &add_filetype($allfiles,$attr->{'src'},'src');
+ if ($attr->{'src'} ne '') {
+ $src = $attr->{'src'};
+ &add_filetype($allfiles,$src,'src');
+ }
+ }
+ my $text = $p->get_trimmed_text();
+ if ($text =~ /\Qswfobject.registerObject(\E([^\)]+)\)/) {
+ my @swfargs = split(/,/,$1);
+ foreach my $item (@swfargs) {
+ $item =~ s/["']//g;
+ $item =~ s/^\s+//;
+ $item =~ s/\s+$//;
+ }
+ if (($swfargs[0] ne'') && ($swfargs[2] ne '')) {
+ if (ref($related{$swfargs[0]}) eq 'ARRAY') {
+ push(@{$related{$swfargs[0]}},$swfargs[2]);
+ } else {
+ $related{$swfargs[0]} = [$swfargs[2]];
+ }
+ }
}
}
if (lc($tagname) eq 'link') {
@@ -3078,6 +3099,9 @@
foreach my $item (keys(%javafiles)) {
$javafiles{$item} = '';
}
+ if ((lc($tagname) eq 'object') && (lc($state[-2]) ne 'object')) {
+ $lastids{lc($tagname)} = $attr->{'id'};
+ }
}
if (lc($state[-2]) eq 'object' && lc($tagname) eq 'param') {
my $name = lc($attr->{'name'});
@@ -3087,12 +3111,22 @@
last;
}
}
+ my $pathfrom;
foreach my $item (keys(%mediafiles)) {
if ($name eq $item) {
- &add_filetype($allfiles, $attr->{'value'}, 'value');
+ $pathfrom = $attr->{'value'};
+ $shockwave{$lastids{lc($state[-2])}} = $pathfrom;
+ &add_filetype($allfiles,$pathfrom,$name);
last;
}
}
+ if ($name eq 'flashvars') {
+ $flashvars{$lastids{lc($state[-2])}} = $attr->{'value'};
+ }
+ if ($pathfrom ne '') {
+ &embedded_dependency($allfiles,\%related,$lastids{lc($state[-2])},
+ $pathfrom);
+ }
}
if (lc($tagname) eq 'embed' || lc($tagname) eq 'applet') {
foreach my $item (keys(%javafiles)) {
@@ -3107,7 +3141,16 @@
last;
}
}
+ if (lc($tagname) eq 'embed') {
+ if (($attr->{'name'} ne '') && ($attr->{'src'} ne '')) {
+ &embedded_dependency($allfiles,\%related,$attr->{'name'},
+ $attr->{'src'});
+ }
+ }
}
+ if ($t->[4] =~ m{/>$}) {
+ pop(@state);
+ }
} elsif ($t->[0] eq 'E') {
my ($tagname) = ($t->[1]);
if ($javafiles{'codebase'} ne '') {
@@ -3127,6 +3170,23 @@
pop @state;
}
}
+ foreach my $id (sort(keys(%flashvars))) {
+ if ($shockwave{$id} ne '') {
+ my @pairs = split(/\&/,$flashvars{$id});
+ foreach my $pair (@pairs) {
+ my ($key,$value) = split(/\=/,$pair);
+ if ($key eq 'thumb') {
+ &add_filetype($allfiles,$value,$key);
+ } elsif ($key eq 'content') {
+ my ($path) = ($shockwave{$id} =~ m{^(.+/)[^/]+$});
+ my ($ext) = ($value =~ /\.([^.]+)$/);
+ if ($ext ne '') {
+ &add_filetype($allfiles,$path.$value,$ext);
+ }
+ }
+ }
+ }
+ }
return 'ok';
}
@@ -3141,6 +3201,21 @@
}
}
+sub embedded_dependency {
+ my ($allfiles,$related,$identifier,$pathfrom) = @_;
+ if ((ref($allfiles) eq 'HASH') && (ref($related) eq 'HASH')) {
+ if (($identifier ne '') &&
+ (ref($related->{$identifier}) eq 'ARRAY') &&
+ ($pathfrom ne '')) {
+ my ($path) = ($pathfrom =~ m{^(.+/)[^/]+$});
+ foreach my $dep (@{$related->{$identifier}}) {
+ &add_filetype($allfiles,$path.$dep,'object');
+ }
+ }
+ }
+ return;
+}
+
sub removeuploadedurl {
my ($url)=@_;
my (undef,undef,$udom,$uname,$fname)=split('/',$url,5);
@@ -10440,7 +10515,7 @@
my ($file)=@_;
my $londocroot = $perlvar{'lonDocRoot'};
if ($file =~ m{^/*(uploaded|editupload)/}) { $file=&filelocation("",$file); }
- if ($file =~ m{^\Q$londocroot/lonUsers/\E}) { return 'ok'; }
+ if ($file =~ m{^\Q/home/httpd/lonUsers/\E}) { return 'ok'; }
my ($cdom,$cnum,$filename) =
($file=~m|^\Q$perlvar{'lonDocRoot'}\E/+userfiles/+($match_domain)/+($match_name)/+(.*)|);
my $uri="/uploaded/$cdom/$cnum/$filename";
More information about the LON-CAPA-cvs
mailing list