version 1.51, 2012/12/18 18:54:11
|
version 1.52, 2013/07/27 22:04:49
|
Line 203 sub process_manifest {
|
Line 203 sub process_manifest {
|
|
|
sub parse_manifest { |
sub parse_manifest { |
my ($cms,$phase,$tempdir,$xmlfile,$toc,$includedres,$includeditems,$items, |
my ($cms,$phase,$tempdir,$xmlfile,$toc,$includedres,$includeditems,$items, |
$resources,$resinfo,$hrefs,$seq) = @_; |
$resources,$resinfo,$hrefs,$seq,$requirer) = @_; |
my @state = (); |
my @state = (); |
my $itm = ''; |
my $itm = ''; |
my %contents = (); |
my %contents = (); |
my $identifier = ''; |
my $identifier = ''; |
my @allidentifiers = (); |
my @allidentifiers = (); |
my $lastitem; |
my $lastitem; |
|
my $neededby; |
my $p = HTML::Parser->new |
my $p = HTML::Parser->new |
( |
( |
xml_mode => 1, |
xml_mode => 1, |
Line 308 sub parse_manifest {
|
Line 309 sub parse_manifest {
|
} |
} |
} elsif ("@state" eq "manifest resources resource file") { |
} elsif ("@state" eq "manifest resources resource file") { |
if ($$includedres{$identifier} || $phase ne 'build') { |
if ($$includedres{$identifier} || $phase ne 'build') { |
if ($cms eq 'webctvista4') { |
|
$$resources{$identifier}{file} = $attr->{href}; |
|
} |
|
if ($cms eq 'bb5' || $cms eq 'bb6' || |
if ($cms eq 'bb5' || $cms eq 'bb6' || |
$cms eq 'webctce4' || $cms eq 'webctvista4') { |
$cms eq 'webctce4' || $cms eq 'webctvista4') { |
push @{$$hrefs{$identifier}},$attr->{href}; |
|
if ($$resources{$identifier}{type} eq |
if ($$resources{$identifier}{type} eq |
'webct.manifest') { |
'webct.manifest') { |
my $manifestfile = $tempdir.'/'.$attr->{href}; |
my $manifestfile = $tempdir.'/'.$attr->{href}; |
Line 325 sub parse_manifest {
|
Line 322 sub parse_manifest {
|
&parse_manifest($cms,$phase,$tempdir,$manifestfile, |
&parse_manifest($cms,$phase,$tempdir,$manifestfile, |
$toc,$includedres,$includeditems, |
$toc,$includedres,$includeditems, |
$items,$resources,$resinfo, |
$items,$resources,$resinfo, |
$hrefs,$currseqref); |
$hrefs,$currseqref,$neededby); |
|
} else { |
|
if ($cms eq 'webctvista4') { |
|
if ($$resources{$identifier}{type} eq 'ims_qtiasiv1p2') { |
|
$neededby = $identifier; |
|
} elsif ($$resources{$identifier}{type} eq 'webcontent') { |
|
$$resources{$identifier}{usedby} = $requirer; |
|
push(@{$$hrefs{$identifier}},$attr->{href}); |
|
} |
|
$$resources{$identifier}{file} = $attr->{href}; |
|
} else { |
|
push(@{$$hrefs{$identifier}},$attr->{href}); |
|
} |
} |
} |
} elsif ($cms eq 'angel5') { |
} elsif ($cms eq 'angel5') { |
if ($attr->{href} =~ m/^_assoc\\$identifier\\(.+)$/) { |
if ($attr->{href} =~ m/^_assoc\\$identifier\\(.+)$/) { |
Line 333 sub parse_manifest {
|
Line 342 sub parse_manifest {
|
} elsif ($attr->{href} =~ m/^Icons\\icon(\w+)\.gif/) { |
} elsif ($attr->{href} =~ m/^Icons\\icon(\w+)\.gif/) { |
$$resources{$identifier}{type} = $1; |
$$resources{$identifier}{type} = $1; |
} |
} |
} |
} |
} |
} |
} elsif ("@state" eq "manifest webct:ContentObject") { |
} elsif ("@state" eq "manifest webct:ContentObject") { |
foreach my $ident (@allidentifiers) { |
foreach my $ident (@allidentifiers) { |
Line 360 sub parse_manifest {
|
Line 369 sub parse_manifest {
|
} |
} |
} |
} |
} |
} |
|
if ("@state" eq "manifest webct:ContentObject webct:Name") { |
|
if ($cms eq 'webctvista4') { |
|
$$resources{$identifier}{title} = (split(/,/,$text))[-1]; |
|
} |
|
} |
}, "dtext"], |
}, "dtext"], |
end_h => |
end_h => |
[sub { |
[sub { |
Line 405 sub get_parents {
|
Line 419 sub get_parents {
|
|
|
sub target_resources { |
sub target_resources { |
my ($resources,$oktypes,$targets) = @_; |
my ($resources,$oktypes,$targets) = @_; |
foreach my $key (keys %{$resources}) { |
foreach my $key (sort(keys(%{$resources}))) { |
if ( defined($$oktypes{$$resources{$key}{type}}) ) { |
if ( defined($$oktypes{$$resources{$key}{type}}) ) { |
push @{$targets}, $key; |
push(@{$targets},$key); |
|
} elsif (defined($$resources{$key}{usedby})) { |
|
if (defined($$oktypes{$$resources{$$resources{$key}{usedby}}{type}})) { |
|
push(@{$targets},$key); |
|
} |
} |
} |
} |
} |
return; |
return; |
} |
} |
|
|
sub copy_resources { |
sub copy_resources { |
my ($context,$cms,$hrefs,$tempdir,$targets,$url,$crs,$cdom,$destdir,$timenow,$assessmentfiles,$total) = @_; |
my ($context,$cms,$hrefs,$resources,$tempdir,$targets,$url,$crs,$cdom,$destdir,$timenow,$assessmentfiles,$total) = @_; |
if ($context eq 'DOCS') { |
if ($context eq 'DOCS') { |
foreach my $key (sort keys %{$hrefs}) { |
foreach my $key (sort keys %{$hrefs}) { |
if (grep/^$key$/,@{$targets}) { |
if (grep/^$key$/,@{$targets}) { |
Line 438 sub copy_resources {
|
Line 456 sub copy_resources {
|
$copyfile = $1; |
$copyfile = $1; |
} |
} |
} |
} |
|
if ($cms eq 'webctvista4') { |
|
if ($file =~ m{/\QX-WEBCT-VISTA-V0\E/.+([^.]+)$}) { |
|
$copyfile = $1; |
|
} |
|
if ($$resources{$key}{usedby}) { |
|
if ($$resources{$$resources{$key}{usedby}}{image} =~ /^\Q$copyfile\E/) { |
|
$copyfile = $$resources{$$resources{$key}{usedby}}{image}; |
|
} |
|
} |
|
} |
unless ((($cms eq 'webctce4') && ($copyfile =~ m/questionDB\.xml$/ || $copyfile =~ m/quiz_QIZ_\d+\.xml$/ || $copyfile =~ m/properties_QIZ_\d+\.xml$/)) || (($cms eq 'webctvista4') && (grep/^$key$/,@{$assessmentfiles}) && $file =~ /\.xml$/)) { |
unless ((($cms eq 'webctce4') && ($copyfile =~ m/questionDB\.xml$/ || $copyfile =~ m/quiz_QIZ_\d+\.xml$/ || $copyfile =~ m/properties_QIZ_\d+\.xml$/)) || (($cms eq 'webctvista4') && (grep/^$key$/,@{$assessmentfiles}) && $file =~ /\.xml$/)) { |
$copyfile = $fpath.$copyfile; |
$copyfile = $fpath.$copyfile; |
my $fileresult; |
my $fileresult; |
Line 452 sub copy_resources {
|
Line 480 sub copy_resources {
|
if (!-e "$destdir/resfiles") { |
if (!-e "$destdir/resfiles") { |
mkdir("$destdir/resfiles",0770); |
mkdir("$destdir/resfiles",0770); |
} |
} |
foreach my $key (sort keys %{$hrefs}) { |
foreach my $key (sort(keys(%{$hrefs}))) { |
if (grep/^$key$/,@{$targets}) { |
if (grep/^$key$/,@{$targets}) { |
foreach my $file (@{$$hrefs{$key}}) { |
foreach my $file (@{$$hrefs{$key}}) { |
$file =~ s-\\-/-g; |
$file =~ s-\\-/-g; |
Line 511 sub copy_resources {
|
Line 539 sub copy_resources {
|
} elsif ($file !~ m-/data/(.+)$-) { |
} elsif ($file !~ m-/data/(.+)$-) { |
&Apache::lonnet::logthis("IMS import error: WebCT4 - file $file is in unexpected location"); |
&Apache::lonnet::logthis("IMS import error: WebCT4 - file $file is in unexpected location"); |
} |
} |
|
} elsif ($cms eq 'webctvista4') { |
|
if ($file =~ m{^\QX-WEBCT-VISTA-V0\E/(.+)$}) { |
|
my $copyfile = $1; |
|
if ($copyfile =~ m{^[^/]+/[^/]+}) { |
|
my @dirs = split/\//,$copyfile; |
|
my $path = "$destdir/resfiles"; |
|
while (@dirs > 1) { |
|
$path .= '/'.$dirs[0]; |
|
if (!-e "$path") { |
|
mkdir("$path",0755); |
|
} |
|
shift @dirs; |
|
} |
|
} else { |
|
$copyfile =~ s/^[^.]+\.(\d+)_R/$1/; |
|
my ($filestem,$extension) = ($copyfile =~ /^(.+)\.(\w+)$/); |
|
if ($$resources{$key}{usedby}) { |
|
if (ref($$resources{$$resources{$key}{usedby}}{image}) eq 'ARRAY') { |
|
for (my $i=0; $i<@{$$resources{$$resources{$key}{usedby}}{image}}; $i++) { |
|
my ($img,$imgtitle); |
|
$img = $$resources{$$resources{$key}{usedby}}{image}[$i]; |
|
if (ref($$resources{$$resources{$key}{usedby}}{imagetitle}) eq 'ARRAY') { |
|
$imgtitle = $$resources{$$resources{$key}{usedby}}{imagetitle}[$i]; |
|
} |
|
if (($img =~ /^\Q$filestem\E/i) && ($imgtitle =~ /\Q$extension\E/i)) { |
|
$copyfile = $img.'_'.$imgtitle; |
|
last; |
|
} elsif ($img =~ /^\Q$filestem\E/i) { |
|
$copyfile = $img.'.'.$extension; |
|
last; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
if (-e "$tempdir/$file") { |
|
my $renameres = rename("$tempdir/$file","$destdir/resfiles/$copyfile"); |
|
if ($renameres) { |
|
if (ref($total) eq 'HASH') { |
|
$$total{'file'} ++; |
|
} |
|
} else { |
|
&Apache::lonnet::logthis("IMS import error: WebCTVista - renaming failed for file $file"); |
|
} |
|
} |
|
} |
} |
} |
} |
} |
} |
} |
Line 2358 sub parse_webctvista4_question {
|
Line 2432 sub parse_webctvista4_question {
|
$$settings{$id}{text} .= '['.$attr->{'webct:name'}.']'; |
$$settings{$id}{text} .= '['.$attr->{'webct:name'}.']'; |
} |
} |
if ("@state" eq "questestinterop item presentation flow material matimage") { |
if ("@state" eq "questestinterop item presentation flow material matimage") { |
$$settings{$id}{image} = $attr->{uri}; |
if ($attr->{uri} =~ /\QRelativeResourceManager?contentID=\E(\d+)$/) { |
|
$$settings{$id}{image} = $1; |
|
push(@{$$resources{$res}{image}},$$settings{$id}{image}); |
|
} else { |
|
$$settings{$id}{image} = $attr->{uri}; |
|
} |
} |
} |
|
|
if ("@state" eq "questestinterop item presentation flow material mattext") { |
if ("@state" eq "questestinterop item presentation flow material mattext") { |
Line 2566 sub parse_webctvista4_question {
|
Line 2645 sub parse_webctvista4_question {
|
if ($currtexttype eq '/text/html') { |
if ($currtexttype eq '/text/html') { |
$text =~ s#(<img\ssrc=")([^"]+)">#$1../resfiles/$2#g; |
$text =~ s#(<img\ssrc=")([^"]+)">#$1../resfiles/$2#g; |
} |
} |
|
if ("@state" eq "questestinterop item presentation flow material matimage") { |
|
my $imagetitle = (split(/,/,$text))[-1]; |
|
$$settings{$id}{imagetitle} = $imagetitle; |
|
push(@{$$resources{$res}{imagetitle}},$imagetitle); |
|
} |
if ("@state" eq "questestinterop item itemmetadata qtimetadata qtimetadatafield fieldlabel") { |
if ("@state" eq "questestinterop item itemmetadata qtimetadata qtimetadatafield fieldlabel") { |
$fieldlabel = $text; |
$fieldlabel = $text; |
} |
} |
Line 3909 sub write_webct4_questions {
|
Line 3993 sub write_webct4_questions {
|
} |
} |
} |
} |
} |
} |
|
if (($cms eq 'webctvista4') && (defined($$settings{$id}{image}))) { |
|
my $imgsrc = '../../resfiles/'.$$settings{$id}{image}; |
|
if (defined($$settings{$id}{imagetitle})) { |
|
$imgsrc .= '_'.$$settings{$id}{imagetitle}; |
|
} |
|
$questionimage = qq|<p><img src="$imgsrc" /></p>|; |
|
} |
if ($$settings{$id}{class} eq "paragraph") { |
if ($$settings{$id}{class} eq "paragraph") { |
my $pre_fill_answer = $$settings{$id}{PARA}{PARA}{PRE_FILL_ANSWER}; |
my $pre_fill_answer = $$settings{$id}{PARA}{PARA}{PRE_FILL_ANSWER}; |
if ($context eq 'CSTR') { |
if ($context eq 'CSTR') { |