version 1.38, 2006/04/05 19:45:53
|
version 1.54.4.1, 2018/09/03 12:43:00
|
Line 1
|
Line 1
|
|
# The LearningOnline Network with CAPA |
|
# Processor for IMS Packages |
|
# |
|
# $Id$ |
|
# |
# Copyright Michigan State University Board of Trustees |
# Copyright Michigan State University Board of Trustees |
# |
# |
# This file is part of the LearningOnline Network with CAPA (LON-CAPA). |
# This file is part of the LearningOnline Network with CAPA (LON-CAPA). |
Line 24
|
Line 29
|
package Apache::imsprocessor; |
package Apache::imsprocessor; |
|
|
use Apache::lonnet; |
use Apache::lonnet; |
|
use Apache::loncommon; |
use Apache::loncleanup; |
use Apache::loncleanup; |
|
use Apache::lonlocal; |
use LWP::UserAgent; |
use LWP::UserAgent; |
use HTTP::Request::Common; |
use HTTP::Request::Common; |
use LONCAPA::Configuration; |
use LONCAPA::Configuration; |
Line 56 sub ims_config {
|
Line 63 sub ims_config {
|
users => 'course/x-bb-user', |
users => 'course/x-bb-user', |
); |
); |
$$cmsmap{bb6}{conference} = 'resource/x-bb-conference'; |
$$cmsmap{bb6}{conference} = 'resource/x-bb-conference'; |
%{$$cmsmap{angel}} = ( |
%{$$cmsmap{angel5}} = ( |
board => 'BOARD', |
board => 'BOARD', |
extlink => 'LINK', |
extlink => 'LINK', |
msg => 'MESSAGE', |
msg => 'MESSAGE', |
quiz => 'QUIZ', |
quiz => 'QUIZ', |
survey => 'FORM', |
survey => 'FORM', |
); |
); |
@{$$cmsmap{angel}{doc}} = ('FILE','PAGE'); |
@{$$cmsmap{angel5}{doc}} = ('FILE','PAGE'); |
%{$$cmsmap{webctce4}} = ( |
%{$$cmsmap{webctce4}} = ( |
quiz => 'webctquiz', |
quiz => 'webctquiz', |
survey => 'webctsurvey', |
survey => 'webctsurvey', |
Line 75 sub ims_config {
|
Line 82 sub ims_config {
|
survey => 'webctsurvey', |
survey => 'webctsurvey', |
doc => 'webcontent' |
doc => 'webcontent' |
); |
); |
%{$areaname} = ( |
%{$areaname} = &Apache::lonlocal::texthash ( |
announce => 'Announcements', |
announce => 'Announcements', |
board => 'Discussion Boards', |
board => 'Discussion Boards', |
doc => 'Documents, pages, and folders', |
doc => 'Documents, pages, and folders', |
Line 93 sub create_tempdir {
|
Line 100 sub create_tempdir {
|
my ($context,$pathinfo,$timenow) = @_; |
my ($context,$pathinfo,$timenow) = @_; |
my $configvars = &LONCAPA::Configuration::read_conf('loncapa.conf'); |
my $configvars = &LONCAPA::Configuration::read_conf('loncapa.conf'); |
my $tempdir; |
my $tempdir; |
|
$pathinfo = &Apache::loncommon::clean_path($pathinfo); |
|
# Collapse dots |
|
$pathinfo =~ s/\.+/./g; |
if ($context eq 'DOCS') { |
if ($context eq 'DOCS') { |
$tempdir = $$configvars{'lonDaemons'}.'/tmp/'.$pathinfo; |
$tempdir = $$configvars{'lonDaemons'}.'/tmp/'.$pathinfo; |
if (!-e "$tempdir") { |
if (!-e "$tempdir") { |
Line 124 sub uploadzip {
|
Line 134 sub uploadzip {
|
$fname=~s/\s+/\_/g; |
$fname=~s/\s+/\_/g; |
# Replace all other weird characters by nothing |
# Replace all other weird characters by nothing |
$fname=~s/[^\w\.\-]//g; |
$fname=~s/[^\w\.\-]//g; |
|
# Collapse dots |
|
$fname=~s/\.+/./g; |
# See if there is anything left |
# See if there is anything left |
unless ($fname) { return 'error: no uploaded file'; } |
unless ($fname) { return 'error: no uploaded file'; } |
# Save the file |
# Save the file |
chomp($env{'form.uploadname'}); |
chomp($env{'form.uploadname'}); |
open(my $fh,'>'.$tempdir.'/'.$fname); |
open(my $fh,'>',"$tempdir/$fname"); |
print $fh $env{'form.uploadname'}; |
print $fh $env{'form.uploadname'}; |
close($fh); |
close($fh); |
} elsif ($context eq 'CSTR') { |
} elsif ($context eq 'CSTR') { |
Line 164 sub process_manifest {
|
Line 176 sub process_manifest {
|
my %toc = ( |
my %toc = ( |
bb6 => 'organization', |
bb6 => 'organization', |
bb5 => 'tableofcontents', |
bb5 => 'tableofcontents', |
angel => 'organization', |
angel5 => 'organization', |
webctce4 => 'organization', |
webctce4 => 'organization', |
webctvista4 => 'organization' |
webctvista4 => 'organization' |
); |
); |
Line 177 sub process_manifest {
|
Line 189 sub process_manifest {
|
revitm => 'Top' |
revitm => 'Top' |
); |
); |
|
|
if ($cms eq 'angel') { |
if ($cms eq 'angel5') { |
$$resources{'toplevel'}{type} = "FOLDER"; |
$$resources{'toplevel'}{type} = "FOLDER"; |
} elsif ($cms eq 'bb5' || $cms eq 'bb6') { |
} elsif ($cms eq 'bb5' || $cms eq 'bb6') { |
$$resources{'toplevel'}{type} = 'resource/x-bb-document'; |
$$resources{'toplevel'}{type} = 'resource/x-bb-document'; |
Line 197 sub process_manifest {
|
Line 209 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 224 sub parse_manifest {
|
Line 237 sub parse_manifest {
|
if ($cms eq 'bb5') { |
if ($cms eq 'bb5') { |
$$items{$itm}{title} = $attr->{title}; |
$$items{$itm}{title} = $attr->{title}; |
} |
} |
} elsif ($cms eq 'angel') { |
} elsif ($cms eq 'angel5') { |
if ($attr->{identifierref} =~ m/^res(.+)$/) { |
if ($attr->{identifierref} =~ m/^res(.+)$/) { |
$$items{$itm}{resnum} = $1; |
$$items{$itm}{resnum} = $1; |
} |
} |
} |
} |
unless (defined(%{$$resources{$$items{$itm}{resnum}}}) ) { |
unless (%{$$resources{$$items{$itm}{resnum}}}) { |
%{$$resources{$$items{$itm}{resnum}}} = (); |
%{$$resources{$$items{$itm}{resnum}}} = (); |
} |
} |
$$resources{$$items{$itm}{resnum}}{revitm} = $itm; |
$$resources{$$items{$itm}{resnum}}{revitm} = $itm; |
Line 292 sub parse_manifest {
|
Line 305 sub parse_manifest {
|
} elsif ($cms eq 'webctvista4') { |
} elsif ($cms eq 'webctvista4') { |
$$resources{$identifier}{type} = $attr->{type}; |
$$resources{$identifier}{type} = $attr->{type}; |
$$resources{$identifier}{'webct:coType'} = $attr->{'webct:coType'}; |
$$resources{$identifier}{'webct:coType'} = $attr->{'webct:coType'}; |
} elsif ($cms eq 'angel') { |
} elsif ($cms eq 'angel5') { |
$identifier = substr($identifier,3); |
$identifier = substr($identifier,3); |
if ($attr->{href} =~ m-^_assoc/$identifier/(.+)$-) { |
if ($attr->{href} =~ m-^_assoc/$identifier/(.+)$-) { |
$$resources{$identifier}{file} = $1; |
$$resources{$identifier}{file} = $1; |
Line 302 sub parse_manifest {
|
Line 315 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 320 sub parse_manifest {
|
Line 328 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 'angel') { |
} elsif ($cms eq 'angel5') { |
if ($attr->{href} =~ m/^_assoc\\$identifier\\(.+)$/) { |
if ($attr->{href} =~ m/^_assoc\\$identifier\\(.+)$/) { |
push @{$$hrefs{$identifier}},$1; |
push @{$$hrefs{$identifier}},$1; |
} 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 346 sub parse_manifest {
|
Line 366 sub parse_manifest {
|
} |
} |
if ($state[0] eq "manifest" && $state[1] eq "organizations" && $state[2] eq $$toc{$cms} && $state[-1] eq "title") { |
if ($state[0] eq "manifest" && $state[1] eq "organizations" && $state[2] eq $$toc{$cms} && $state[-1] eq "title") { |
if ($$includeditems{$itm} || $phase ne 'build') { |
if ($$includeditems{$itm} || $phase ne 'build') { |
if ($cms eq 'angel' || $cms eq 'bb6' || $cms eq 'webctvista4') { |
if ($cms eq 'angel5' || $cms eq 'bb6' || $cms eq 'webctvista4') { |
$$items{$itm}{title} = $text; |
$$items{$itm}{title} = $text; |
} |
} |
if ($cms eq 'webctce4') { |
if ($cms eq 'webctce4') { |
Line 355 sub parse_manifest {
|
Line 375 sub parse_manifest {
|
} |
} |
} |
} |
} |
} |
|
if ("@state" eq "manifest webct:ContentObject webct:Name") { |
|
if ($cms eq 'webctvista4') { |
|
if ($text =~ /,/) { |
|
$$resources{$identifier}{title} = (split(/,/,$text))[-1]; |
|
} else { |
|
$$resources{$identifier}{title} = $text; |
|
} |
|
} |
|
} |
}, "dtext"], |
}, "dtext"], |
end_h => |
end_h => |
[sub { |
[sub { |
Line 364 sub parse_manifest {
|
Line 393 sub parse_manifest {
|
); |
); |
$p->parse_file($xmlfile); |
$p->parse_file($xmlfile); |
$p->eof; |
$p->eof; |
foreach my $itm (keys %contents) { |
foreach my $itm (keys(%contents)) { |
@{$$items{$itm}{contents}} = @{$contents{$itm}}; |
@{$$items{$itm}{contents}} = @{$contents{$itm}}; |
} |
} |
} |
} |
Line 400 sub get_parents {
|
Line 429 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) = @_; |
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}) { |
%{$$url{$key}} = (); |
%{$$url{$key}} = (); |
foreach my $file (@{$$hrefs{$key}}) { |
foreach my $file (@{$$hrefs{$key}}) { |
Line 421 sub copy_resources {
|
Line 454 sub copy_resources {
|
} |
} |
my $filename = ''; |
my $filename = ''; |
my $fpath = $timenow.'/resfiles/'.$key.'/'; |
my $fpath = $timenow.'/resfiles/'.$key.'/'; |
if ($cms eq 'angel') { |
if ($cms eq 'angel5') { |
if ($file eq 'pg'.$key.'.htm') { |
if ($file eq 'pg'.$key.'.htm') { |
next; |
next; |
} |
} |
Line 433 sub copy_resources {
|
Line 466 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 447 sub copy_resources {
|
Line 490 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; |
if ( ($cms eq 'angel' && $file ne 'pg'.$key.'.htm') || ($cms eq 'bb5') || ($cms eq 'bb6')) { |
if ( ($cms eq 'angel5' && $file ne 'pg'.$key.'.htm') || ($cms eq 'bb5') || ($cms eq 'bb6')) { |
if (!-e "$destdir/resfiles/$key") { |
if (!-e "$destdir/resfiles/$key") { |
mkdir("$destdir/resfiles/$key",0770); |
mkdir("$destdir/resfiles/$key",0770); |
} |
} |
Line 466 sub copy_resources {
|
Line 509 sub copy_resources {
|
mkdir("$fulldir",0770); |
mkdir("$fulldir",0770); |
} |
} |
} |
} |
if ($cms eq 'angel') { |
my $renameres; |
rename("$tempdir/_assoc/$key/$file","$destdir/resfiles/$key/$file"); |
if ($cms eq 'angel5') { |
|
$renameres = rename("$tempdir/_assoc/$key/$file","$destdir/resfiles/$key/$file"); |
} elsif ($cms eq 'bb5' || $cms eq 'bb6') { |
} elsif ($cms eq 'bb5' || $cms eq 'bb6') { |
rename("$tempdir/$key/$file","$destdir/resfiles/$key/$file"); |
$renameres = rename("$tempdir/$key/$file","$destdir/resfiles/$key/$file"); |
|
} |
|
if ($renameres) { |
|
if (ref($total) eq 'HASH') { |
|
$$total{'file'} ++; |
|
} |
|
} else { |
|
&Apache::lonnet::logthis("IMS import error: $cms - renaming failed for file $file"); |
} |
} |
} elsif ($cms eq 'webctce4') { |
} elsif ($cms eq 'webctce4') { |
if ($file =~ m-/my_files/(.+)$-) { |
if ($file =~ m-/my_files/(.+)$-) { |
Line 486 sub copy_resources {
|
Line 537 sub copy_resources {
|
} |
} |
} |
} |
if (-e "$tempdir/$file") { |
if (-e "$tempdir/$file") { |
rename("$tempdir/$file","$destdir/resfiles/$copyfile"); |
my $renameres = rename("$tempdir/$file","$destdir/resfiles/$copyfile"); |
|
if ($renameres) { |
|
if (ref($total) eq 'HASH') { |
|
$$total{'file'} ++; |
|
} |
|
} else { |
|
&Apache::lonnet::logthis("IMS import error: WebCT4 - renaming failed for file $file"); |
|
} |
} |
} |
} 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 ($imgtitle =~ /\Q$extension\E/i) { |
|
$copyfile = $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 517 sub process_resinfo {
|
Line 621 sub process_resinfo {
|
mkdir("$destdir/resfiles",0770); |
mkdir("$destdir/resfiles",0770); |
} |
} |
} |
} |
if ($cms eq 'angel') { |
if ($cms eq 'angel5') { |
my $currboard = ''; |
my $currboard = ''; |
foreach my $key (sort keys %{$resources}) { |
foreach my $key (sort(keys(%{$resources}))) { |
if (grep/^$key$/,@{$targets}) { |
if (grep/^$key$/,@{$targets}) { |
if ($$resources{$key}{type} eq "BOARD") { |
if ($$resources{$key}{type} eq "BOARD") { |
push @{$boards}, $key; |
push @{$boards}, $key; |
Line 548 sub process_resinfo {
|
Line 652 sub process_resinfo {
|
} |
} |
} |
} |
} elsif ($cms eq 'bb5' || $cms eq 'bb6') { |
} elsif ($cms eq 'bb5' || $cms eq 'bb6') { |
foreach my $key (sort keys %{$resources}) { |
foreach my $key (sort(keys(%{$resources}))) { |
if (grep/^$key$/,@{$targets}) { |
if (grep/^$key$/,@{$targets}) { |
if ($$resources{$key}{type} eq "resource/x-bb-document") { |
if ($$resources{$key}{type} eq "resource/x-bb-document") { |
unless ($$items{$$resources{$key}{revitm}}{filepath} eq 'Top') { |
unless ($$items{$$resources{$key}{revitm}}{filepath} eq 'Top') { |
Line 616 sub process_resinfo {
|
Line 720 sub process_resinfo {
|
$$items{'Top'}{'contentscount'} ++; |
$$items{'Top'}{'contentscount'} ++; |
} |
} |
} elsif ($cms eq 'webctce4') { |
} elsif ($cms eq 'webctce4') { |
foreach my $key (sort keys %{$resources}) { |
foreach my $key (sort(keys(%{$resources}))) { |
if (grep/^$key$/,@{$targets}) { |
if (grep/^$key$/,@{$targets}) { |
if ($$resources{$key}{type} eq "webcontent") { |
if ($$resources{$key}{type} eq "webcontent") { |
%{$$resinfo{$key}} = (); |
%{$$resinfo{$key}} = (); |
&webct4_content($key,$docroot,$destdir,\%{$$resinfo{$key}},$udom,$uname,$$resources{$key}{type},$$items{$$resources{$key}{revitm}}{title},$resrcfiles); |
if ($$resources{$key}{file} eq 'questiondb.xml') { |
|
&process_assessment($cms,$context,$key,$docroot,'quiz',$dirname,$destdir,\%{$$resinfo{$key}},$total,$udom,$uname,$pagesfiles,$sequencesfiles,$randompicks,\$dbparse,$resources,$items,\%catinfo,\%qzdbsettings,$hrefs,\%allquestions); |
|
} else { |
|
&webct4_content($key,$docroot,$destdir,\%{$$resinfo{$key}},$udom,$uname,$$resources{$key}{type},$$items{$$resources{$key}{revitm}}{title},$resrcfiles); |
|
} |
} elsif ($$resources{$key}{type} eq "webctquiz") { |
} elsif ($$resources{$key}{type} eq "webctquiz") { |
&process_assessment($cms,$context,$key,$docroot,'quiz',$dirname,$destdir,\%{$$resinfo{$key}},$total,$udom,$uname,$pagesfiles,$sequencesfiles,$randompicks,\$dbparse,$resources,$items,\%catinfo,\%qzdbsettings,$hrefs,\%allquestions); |
&process_assessment($cms,$context,$key,$docroot,'quiz',$dirname,$destdir,\%{$$resinfo{$key}},$total,$udom,$uname,$pagesfiles,$sequencesfiles,$randompicks,\$dbparse,$resources,$items,\%catinfo,\%qzdbsettings,$hrefs,\%allquestions); |
} |
} |
} |
} |
} |
} |
} elsif ($cms eq 'webctvista4') { |
} elsif ($cms eq 'webctvista4') { |
foreach my $key (sort keys %{$resources}) { |
foreach my $key (sort(keys(%{$resources}))) { |
if (grep/^$key$/,@{$targets}) { |
if (grep/^$key$/,@{$targets}) { |
%{$$resinfo{$key}} = (); |
%{$$resinfo{$key}} = (); |
if ($$resources{$key}{type} eq 'webct.question') { |
if ($$resources{$key}{type} eq 'webct.question') { |
Line 655 sub process_resinfo {
|
Line 763 sub process_resinfo {
|
$cid = $env{'request.course.id'}; |
$cid = $env{'request.course.id'}; |
} |
} |
my $destresdir = $destdir; |
my $destresdir = $destdir; |
|
my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'}; |
if ($context eq 'CSTR') { |
if ($context eq 'CSTR') { |
$destresdir =~ s|/home/$uname/public_html/|/res/$udom/$uname/|; |
$destresdir =~ s{^\Q$londocroot/priv/\E}{/res/}; |
} elsif ($context eq 'DOCS') { |
} elsif ($context eq 'DOCS') { |
$destresdir =~ s|^/home/httpd/html/userfiles|/uploaded|; |
$destresdir =~ s{^\Q$londocroot/userfiles\E}{/uploaded}; |
} |
} |
foreach my $res (sort(keys(%allquestions))) { |
foreach my $res (sort(keys(%allquestions))) { |
my $parent = $allquestions{$res}; |
my $parent = $allquestions{$res}; |
Line 713 sub build_structure {
|
Line 822 sub build_structure {
|
$srcstem = "/res/$udom/$uname/$newdir"; |
$srcstem = "/res/$udom/$uname/$newdir"; |
} |
} |
|
|
foreach my $key (sort keys %{$items}) { |
foreach my $key (sort(keys(%{$items}))) { |
if ($$includeditems{$key}) { |
if ($$includeditems{$key}) { |
%{$flag{$key}} = ( |
%{$flag{$key}} = ( |
page => 0, |
page => 0, |
Line 735 sub build_structure {
|
Line 844 sub build_structure {
|
my $curr_id = 1; |
my $curr_id = 1; |
my $resnum = $$items{$key}{resnum}; |
my $resnum = $$items{$key}{resnum}; |
my $type = $$resources{$resnum}{type}; |
my $type = $$resources{$resnum}{type}; |
my $contentscount = $$items{$key}{'contentscount'}; |
my $contentscount = $$items{$key}{'contentscount'}; |
if (($cms eq 'angel' && $type eq "FOLDER") || (($cms eq 'bb5' || $cms eq 'bb6') && $$resinfo{$resnum}{'isfolder'} eq "true") && (($type eq "resource/x-bb-document") || ($type eq "resource/x-bb-staffinfo") || ($type eq "resource/x-bb-externallink")) || ($cms eq 'webctce4' && $contentscount > 0)) { |
my $seqtitle = $$items{$key}{'title'}; |
|
$seqtitle =~ s|/+|_|g; |
|
$seqtitle =~ s/\s+/_/g; |
|
$seqtitle .= '_'.$key; |
|
if (($cms eq 'angel5' && $type eq "FOLDER") || (($cms eq 'bb5' || $cms eq 'bb6') && $$resinfo{$resnum}{'isfolder'} eq "true") && (($type eq "resource/x-bb-document") || ($type eq "resource/x-bb-staffinfo") || ($type eq "resource/x-bb-externallink")) || ($cms eq 'webctce4' && $contentscount > 0)) { |
unless (($cms eq 'bb5') && $key eq 'Top') { |
unless (($cms eq 'bb5') && $key eq 'Top') { |
$seqtext{$key} = "<map>\n"; |
$seqtext{$key} = "<map>\n"; |
} |
} |
Line 773 sub build_structure {
|
Line 886 sub build_structure {
|
if (grep/^$res$/,@{$packages}) { |
if (grep/^$res$/,@{$packages}) { |
$packageflag = 1; |
$packageflag = 1; |
} |
} |
$src = &make_structure($cms,$key,$srcstem,\%flag,\%count,$timestamp,$boardnum,$hrefs,\%pagecontents,$res,$type,$file,$resinfo,$contitem,$uname,$cdom,$contcount,$packageflag,$contitemcount,$$randompicks{$contitem}); |
$src = &make_structure($cms,$key,$srcstem,\%flag,\%count,$timestamp,$boardnum,$hrefs,\%pagecontents,$res,$type,$file,$resinfo,$contitem,$uname,$cdom,$contcount,$packageflag,$contitemcount,$$randompicks{$contitem},$title); |
unless ($flag{$key}{page} == 1) { |
unless ($flag{$key}{page} == 1) { |
if ($$randompicks{$contitem}) { |
if ($$randompicks{$contitem}) { |
$seqtext{$key} .= qq| |
$seqtext{$key} .= qq| |
Line 813 sub build_structure {
|
Line 926 sub build_structure {
|
if (grep/^$res$/,@{$packages}) { |
if (grep/^$res$/,@{$packages}) { |
$packageflag = 1; |
$packageflag = 1; |
} |
} |
$src = &make_structure($cms,$key,$srcstem,\%flag,\%count,$timestamp,$boardnum,$hrefs,\%pagecontents,$res,$type,$file,$resinfo,$contitem,$uname,$cdom,$contcount,$packageflag,$contitemcount,$$randompicks{$contitem}); |
$src = &make_structure($cms,$key,$srcstem,\%flag,\%count,$timestamp,$boardnum,$hrefs,\%pagecontents,$res,$type,$file,$resinfo,$contitem,$uname,$cdom,$contcount,$packageflag,$contitemcount,$$randompicks{$contitem},$title); |
unless ($flag{$key}{page} == 1) { |
unless ($flag{$key}{page} == 1) { |
$seqtext{$key} .= qq|></resource> |
$seqtext{$key} .= qq|></resource> |
<link from="$curr_id" to="$next_id" index="$curr_id"></link>\n|; |
<link from="$curr_id" to="$next_id" index="$curr_id"></link>\n|; |
Line 845 sub build_structure {
|
Line 958 sub build_structure {
|
if (grep/^$res$/,@{$packages}) { |
if (grep/^$res$/,@{$packages}) { |
$packageflag = 1; |
$packageflag = 1; |
} |
} |
$src = &make_structure($cms,$key,$srcstem,\%flag,\%count,$timestamp,$boardnum,$hrefs,\%pagecontents,$res,$type,$file,$resinfo,$contitem,$uname,$cdom,$contcount,$packageflag,$contitemcount,$$randompicks{$contitem}); |
$src = &make_structure($cms,$key,$srcstem,\%flag,\%count,$timestamp,$boardnum,$hrefs,\%pagecontents,$res,$type,$file,$resinfo,$contitem,$uname,$cdom,$contcount,$packageflag,$contitemcount,$$randompicks{$contitem},$title); |
|
|
if ($flag{$key}{page}) { |
if ($flag{$key}{page}) { |
if ($count{$key}{seq} + $count{$key}{page} + $count{$key}{board} + $count{$key}{file} +1 == 1) { |
if ($count{$key}{seq} + $count{$key}{page} + $count{$key}{board} + $count{$key}{file} +1 == 1) { |
Line 879 sub build_structure {
|
Line 992 sub build_structure {
|
} |
} |
unless (($cms eq 'bb5') && $key eq 'Top') { |
unless (($cms eq 'bb5') && $key eq 'Top') { |
$seqtext{$key} .= "</map>\n"; |
$seqtext{$key} .= "</map>\n"; |
open(LOCFILE,">$destdir/sequences/$key.sequence"); |
if ($cms eq 'webctce4' && $key ne 'Top') { |
|
push @{$seqfiles}, "$seqtitle.sequence"; |
|
open(LOCFILE,'>',"$destdir/sequences/$seqtitle.sequence"); |
|
} else { |
|
push @{$seqfiles}, "$key.sequence"; |
|
open(LOCFILE,'>',"$destdir/sequences/$key.sequence"); |
|
} |
print LOCFILE $seqtext{$key}; |
print LOCFILE $seqtext{$key}; |
close(LOCFILE); |
close(LOCFILE); |
push @{$seqfiles}, "$key.sequence"; |
|
} |
} |
$count{$key}{page} ++; |
$count{$key}{page} ++; |
$$total{page} += $count{$key}{page}; |
$$total{page} += $count{$key}{page}; |
Line 909 sub build_structure {
|
Line 1027 sub build_structure {
|
&process_specials($context,'pools',$pools,\$topnum,$$items{'Top'}{contentscount},$destdir,$udom,$uname,$cdom,$crs,$timenow,$newdir,$timestamp,$resinfo,\$seqtext{'Top'},$pagesfiles,$seqfiles,$topurls,$topnames); |
&process_specials($context,'pools',$pools,\$topnum,$$items{'Top'}{contentscount},$destdir,$udom,$uname,$cdom,$crs,$timenow,$newdir,$timestamp,$resinfo,\$seqtext{'Top'},$pagesfiles,$seqfiles,$topurls,$topnames); |
} |
} |
$seqtext{'Top'} .= "</map>\n"; |
$seqtext{'Top'} .= "</map>\n"; |
open(TOPFILE,">$destdir/sequences/Top.sequence"); |
open(TOPFILE,'>',"$destdir/sequences/Top.sequence"); |
print TOPFILE $seqtext{'Top'}; |
print TOPFILE $seqtext{'Top'}; |
close(TOPFILE); |
close(TOPFILE); |
push @{$seqfiles}, 'Top.sequence'; |
push @{$seqfiles}, 'Top.sequence'; |
Line 922 sub build_structure {
|
Line 1040 sub build_structure {
|
$filestem = "/res/$udom/$uname/$newdir"; |
$filestem = "/res/$udom/$uname/$newdir"; |
} |
} |
|
|
foreach my $key (sort keys %pagecontents) { |
foreach my $key (sort(keys(%pagecontents))) { |
for (my $i=0; $i<@{$pagecontents{$key}}; $i++) { |
for (my $i=0; $i<@{$pagecontents{$key}}; $i++) { |
my $filename = $destdir.'/pages/'.$key.'_'.$i.'.page'; |
my $filename = $destdir.'/pages/'.$key.'_'.$i.'.page'; |
my $resource = "$filestem/resfiles/$$items{$pagecontents{$key}[$i][0]}{resnum}.html"; |
my $resource = "$filestem/resfiles/$$items{$pagecontents{$key}[$i][0]}{resnum}.html"; |
Line 931 sub build_structure {
|
Line 1049 sub build_structure {
|
if (grep/^$res$/,@{$packages}) { |
if (grep/^$res$/,@{$packages}) { |
$resource = $filestem.'/resfiles/'.$res.'./index.html'; # should be entry_point |
$resource = $filestem.'/resfiles/'.$res.'./index.html'; # should be entry_point |
} |
} |
open(PAGEFILE,">$filename"); |
open(PAGEFILE,'>',$filename); |
print PAGEFILE qq|<map> |
print PAGEFILE qq|<map> |
<resource src="$resource" id="1" type="start" title="$$items{$pagecontents{$key}[$i][0]}{title}"></resource> |
<resource src="$resource" id="1" type="start" title="$$items{$pagecontents{$key}[$i][0]}{title}"></resource> |
<link to="2" index="1" from="1">\n|; |
<link to="2" index="1" from="1">\n|; |
Line 972 sub build_structure {
|
Line 1090 sub build_structure {
|
} |
} |
|
|
sub make_structure { |
sub make_structure { |
my ($cms,$key,$srcstem,$flag,$count,$timestamp,$boardnum,$hrefs,$pagecontents,$res,$type,$file,$resinfo,$contitem,$uname,$cdom,$contcount,$packageflag,$contitemcount,$randompick) = @_; |
my ($cms,$key,$srcstem,$flag,$count,$timestamp,$boardnum,$hrefs,$pagecontents,$res,$type,$file,$resinfo,$contitem,$uname,$cdom,$contcount,$packageflag,$contitemcount,$randompick,$title) = @_; |
my $src =''; |
my $src =''; |
if (($cms eq 'angel' && $type eq 'FOLDER') || (($cms eq 'bb5' || $cms eq 'bb6') && (($$resinfo{$res}{'isfolder'} eq 'true') || $key eq 'Top')) || ($cms eq 'webctce4' && $contitemcount > 0)) { |
if (($cms eq 'angel5' && $type eq 'FOLDER') || (($cms eq 'bb5' || $cms eq 'bb6') && (($$resinfo{$res}{'isfolder'} eq 'true') || $key eq 'Top')) || ($cms eq 'webctce4' && $contitemcount > 0)) { |
$src = $srcstem.'/sequences/'.$contitem.'.sequence'; |
$src = $srcstem.'/sequences/'.$contitem.'.sequence'; |
|
if ($cms eq 'webctce4') { |
|
$title =~ s|/+|_|g; |
|
$title =~ s/\s+/_/g; |
|
$title .= '_'.$contitem; |
|
$src = $srcstem.'/sequences/'.$title.'.sequence'; |
|
} |
$$flag{$key}{page} = 0; |
$$flag{$key}{page} = 0; |
$$flag{$key}{seq} = 1; |
$$flag{$key}{seq} = 1; |
$$count{$key}{seq} ++; |
$$count{$key}{seq} ++; |
Line 984 sub make_structure {
|
Line 1108 sub make_structure {
|
$$flag{$key}{page} = 0; |
$$flag{$key}{page} = 0; |
$$flag{$key}{seq} = 1; |
$$flag{$key}{seq} = 1; |
$$count{$key}{seq} ++; |
$$count{$key}{seq} ++; |
} elsif ($cms eq 'angel' && $type eq 'BOARD') { |
} elsif ($cms eq 'angel5' && $type eq 'BOARD') { |
$src = '/adm/'.$cdom.'/'.$uname.'/'.$$timestamp[$$boardnum{$res}].'/bulletinboard'; |
$src = '/adm/'.$cdom.'/'.$uname.'/'.$$timestamp[$$boardnum{$res}].'/bulletinboard'; |
$$flag{$key}{page} = 0; |
$$flag{$key}{page} = 0; |
$$flag{$key}{board} = 1; |
$$flag{$key}{board} = 1; |
$$count{$key}{board} ++; |
$$count{$key}{board} ++; |
} elsif ($cms eq 'angel' && $type eq "FILE") { |
} elsif ($cms eq 'angel5' && $type eq "FILE") { |
foreach my $file (@{$$hrefs{$res}}) { |
foreach my $file (@{$$hrefs{$res}}) { |
unless ($file eq 'pg'.$res.'.htm') { |
unless ($file eq 'pg'.$res.'.htm') { |
$src = $srcstem.'/resfiles/'.$res.'/'.$file; |
$src = $srcstem.'/resfiles/'.$res.'/'.$file; |
Line 997 sub make_structure {
|
Line 1121 sub make_structure {
|
} |
} |
$$flag{$key}{page} = 0; |
$$flag{$key}{page} = 0; |
$$flag{$key}{file} = 1; |
$$flag{$key}{file} = 1; |
} elsif ($cms eq 'angel' && (($type eq "PAGE") || ($type eq "LINK")) ) { |
} elsif ($cms eq 'angel5' && (($type eq "PAGE") || ($type eq "LINK")) ) { |
if ($$flag{$key}{page}) { |
if ($$flag{$key}{page}) { |
if ($$count{$key}{page} == -1) { |
if ($$count{$key}{page} == -1) { |
&Apache::lonnet::logthis("IMS Angel import error in array index for page: value = -1, resource is $key, type is $type."); |
&Apache::lonnet::logthis("IMS Angel import error in array index for page: value = -1, resource is $key, type is $type."); |
Line 1038 sub make_structure {
|
Line 1162 sub make_structure {
|
if ($file =~ m-/([^/]+)$-) { |
if ($file =~ m-/([^/]+)$-) { |
$filename = $1; |
$filename = $1; |
} |
} |
$src = $srcstem.'/resfiles/'.$res.'/'.$filename; |
$src = $srcstem.'/resfiles/'.$filename; |
} else { |
} else { |
foreach my $file (@{$$hrefs{$res}}) { |
foreach my $file (@{$$hrefs{$res}}) { |
my $filename; |
my $filename; |
if ($file =~ m-/([^/]+)$-) { |
if ($file =~ m-/my_files/(.+)$-) { |
|
$filename = $1; |
|
} elsif ($file =~ m-/([^/]+)$-) { |
$filename = $1; |
$filename = $1; |
} |
} |
$src = $srcstem.'/resfiles/'.$res.'/'.$filename; |
$src = $srcstem.'/resfiles/'.$filename; |
} |
} |
} |
} |
$$flag{$key}{page} = 0; |
$$flag{$key}{page} = 0; |
Line 1076 sub process_specials {
|
Line 1202 sub process_specials {
|
pools => 'pools' |
pools => 'pools' |
); |
); |
my %seqtitles = ( |
my %seqtitles = ( |
boards => 'Course Bulletin Boards', |
boards => 'Course Discussion Boards', |
quizzes => 'Course Quizzes', |
quizzes => 'Course Quizzes', |
surveys => 'Course Surveys', |
surveys => 'Course Surveys', |
announcements => 'Course Announcements', |
announcements => 'Course Announcements', |
Line 1112 sub process_specials {
|
Line 1238 sub process_specials {
|
|
|
if ($type eq "announcements") { |
if ($type eq "announcements") { |
push @{$pagesfiles}, "$seqnames{$type}.page"; |
push @{$pagesfiles}, "$seqnames{$type}.page"; |
open(ITEM,">$destdir/pages/$seqnames{$type}.page"); |
open(ITEM,'>',"$destdir/pages/$seqnames{$type}.page"); |
} else { |
} else { |
push @{$seqfiles}, "$seqnames{$type}.sequence"; |
push @{$seqfiles}, "$seqnames{$type}.sequence"; |
open(ITEM,">$destdir/sequences/$seqnames{$type}.sequence"); |
open(ITEM,'>',"$destdir/sequences/$seqnames{$type}.sequence"); |
} |
} |
|
|
if ($type eq 'boards') { |
if ($type eq 'boards') { |
Line 1230 sub process_user {
|
Line 1356 sub process_user {
|
my $configvars = &LONCAPA::Configuration::read_conf('loncapa.conf'); |
my $configvars = &LONCAPA::Configuration::read_conf('loncapa.conf'); |
my $xmlstem = $$configvars{'lonDaemons'}."/tmp/".$user_cdom."_".$user_crs."_"; |
my $xmlstem = $$configvars{'lonDaemons'}."/tmp/".$user_cdom."_".$user_crs."_"; |
|
|
foreach my $user_id (keys %{$settings}) { |
foreach my $user_id (keys(%{$settings})) { |
if ($$settings{$user_id}{user_role} eq "s") { |
if ($$settings{$user_id}{user_role} eq "s") { |
|
|
} elsif ($user_handling eq 'enrollall') { |
} elsif ($user_handling eq 'enrollall') { |
Line 1417 sub process_staff {
|
Line 1543 sub process_staff {
|
<font face="arial" size="2"><b>Office Hours:</b></font> |
<font face="arial" size="2"><b>Office Hours:</b></font> |
</td> |
</td> |
<td> |
<td> |
<font face=arial size=2>$$settings{office}{hours}</font> |
<font face="arial" size="2">$$settings{office}{hours}</font> |
</td> |
</td> |
</tr> |
</tr> |
|; |
|; |
Line 1458 sub process_staff {
|
Line 1584 sub process_staff {
|
</tr> |
</tr> |
</table> |
</table> |
|; |
|; |
open(FILE,">$destdir/resfiles/$res.html"); |
open(FILE,'>',"$destdir/resfiles/$res.html"); |
push @{$resrcfiles}, "$res.html"; |
push @{$resrcfiles}, "$res.html"; |
print FILE qq|<html> |
print FILE qq|<html> |
<head> |
<head> |
Line 1537 sub process_link {
|
Line 1663 sub process_link {
|
$linktag .= qq|>$$settings{title}</a>|; |
$linktag .= qq|>$$settings{title}</a>|; |
} |
} |
|
|
open(FILE,">$destdir/resfiles/$res.html"); |
open(FILE,'>',"$destdir/resfiles/$res.html"); |
push @{$resrcfiles}, "$res.html"; |
push @{$resrcfiles}, "$res.html"; |
print FILE qq|<html> |
print FILE qq|<html> |
<head> |
<head> |
Line 1739 sub process_db {
|
Line 1865 sub process_db {
|
} |
} |
} |
} |
|
|
# ---------------------------------------------------------------- Add Posting to Bulletin Board |
# ---------------------------------------------------------------- Add Posting to Discussion Board |
sub addposting { |
sub addposting { |
my ($symb,$contrib,$cdom,$crs)=@_; |
my ($symb,$contrib,$cdom,$crs)=@_; |
my $status=''; |
my $status=''; |
Line 1750 sub addposting {
|
Line 1876 sub addposting {
|
&Apache::lonnet::put('discussiontimes',\%storenewentry,$cdom,$crs); |
&Apache::lonnet::put('discussiontimes',\%storenewentry,$cdom,$crs); |
} |
} |
my %record=&Apache::lonnet::restore('_discussion'); |
my %record=&Apache::lonnet::restore('_discussion'); |
my ($temp)=keys %record; |
my ($temp)=keys(%record); |
unless ($temp=~/^error\:/) { |
unless ($temp=~/^error\:/) { |
my %newrecord=(); |
my %newrecord=(); |
$newrecord{'resource'}=$symb; |
$newrecord{'resource'}=$symb; |
Line 2178 sub parse_webctvista4_assessment {
|
Line 2304 sub parse_webctvista4_assessment {
|
my ($tagname, $attr) = @_; |
my ($tagname, $attr) = @_; |
push @state, $tagname; |
push @state, $tagname; |
my @seq = (); |
my @seq = (); |
|
if ("@state" eq "questestinterop assessment") { |
|
$$qzparams{$res}{id} = $attr->{'ident'}; |
|
$$qzparams{$res}{title} = $attr->{'title'}; |
|
} |
if ("@state" eq "questestinterop assessment section itemref") { |
if ("@state" eq "questestinterop assessment section itemref") { |
$id = $attr->{linkrefid}; |
$id = $attr->{linkrefid}; |
push(@{$allids},$id); |
push(@{$allids},$id); |
Line 2186 sub parse_webctvista4_assessment {
|
Line 2316 sub parse_webctvista4_assessment {
|
if ("@state" eq "questestinterop assessment section selection_ordering order") { |
if ("@state" eq "questestinterop assessment section selection_ordering order") { |
$$qzparams{$res}{order_type} = $attr->{order_type}; |
$$qzparams{$res}{order_type} = $attr->{order_type}; |
} |
} |
|
|
}, "tagname, attr"], |
}, "tagname, attr"], |
text_h => |
text_h => |
[sub { |
[sub { |
Line 2289 sub parse_webctvista4_question {
|
Line 2418 sub parse_webctvista4_question {
|
@{$$settings{$id}{numids}} = (); |
@{$$settings{$id}{numids}} = (); |
%{$$allanswers{$id}} = (); |
%{$$allanswers{$id}} = (); |
$$settings{$id}{title} = $attr->{title}; |
$$settings{$id}{title} = $attr->{title}; |
|
$$settings{$id}{title} =~ s/\%/pct_/g; |
} |
} |
if ("@state" eq "questestinterop item presentation flow material mat_extension webct:calculated webct:var") { |
if ("@state" eq "questestinterop item presentation flow material mat_extension webct:calculated webct:var") { |
$currvar = $attr->{'webct:name'}; |
$currvar = $attr->{'webct:name'}; |
Line 2313 sub parse_webctvista4_question {
|
Line 2443 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 2414 sub parse_webctvista4_question {
|
Line 2549 sub parse_webctvista4_question {
|
%{$$settings{$id}{$str_id}{$label}} = (); |
%{$$settings{$id}{$str_id}{$label}} = (); |
$$settings{$id}{$str_id}{$label}{fibtype} = $fibtype; |
$$settings{$id}{$str_id}{$label}{fibtype} = $fibtype; |
if ($$settings{$id}{class} eq 'string') { |
if ($$settings{$id}{class} eq 'string') { |
$$settings{$id}{text} .= '[blank]'; |
$$settings{$id}{text} .= '________'; |
} |
} |
} |
} |
if ("@state" eq "questestinterop item presentation flow response_str render_fib response_label material mattext") { # Paragraph |
if ("@state" eq "questestinterop item presentation flow response_str render_fib response_label material mattext") { # Paragraph |
Line 2448 sub parse_webctvista4_question {
|
Line 2583 sub parse_webctvista4_question {
|
} elsif (($$settings{$id}{class} eq 'string') || |
} elsif (($$settings{$id}{class} eq 'string') || |
($$settings{$id}{class} eq 'shortanswer')) { |
($$settings{$id}{class} eq 'shortanswer')) { |
$label = $attr->{respident}; |
$label = $attr->{respident}; |
|
$$settings{$id}{$label}{case} = $attr->{'case'}; |
} elsif ($$settings{$id}{class} eq 'match') { |
} elsif ($$settings{$id}{class} eq 'match') { |
$grp = $attr->{respident}; |
$grp = $attr->{respident}; |
} |
} |
Line 2517 sub parse_webctvista4_question {
|
Line 2653 sub parse_webctvista4_question {
|
text_h => |
text_h => |
[sub { |
[sub { |
my ($text) = @_; |
my ($text) = @_; |
|
$text =~ s/\s*\&\s*/_and_/g; |
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; |
|
if ($text =~ /,/) { |
|
$imagetitle = (split(/,/,$text))[-1]; |
|
} else { |
|
$imagetitle = $text; |
|
} |
|
$$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 2739 sub parse_webct4_quizprops {
|
Line 2886 sub parse_webct4_quizprops {
|
|
|
sub parse_webct4_questionDB { |
sub parse_webct4_questionDB { |
my ($docroot,$href,$catinfo,$settings,$allanswers,$allchoices,$allids) = @_; |
my ($docroot,$href,$catinfo,$settings,$allanswers,$allchoices,$allids) = @_; |
$href =~ s#[^/]+$##; |
my $xmlfile; |
my $xmlfile = $docroot.'/'.$href.'questionDB.xml'; #quizDB file |
if ($href eq 'questiondb.xml') { |
|
$xmlfile = $docroot.'/'.$href; |
|
} else { |
|
$href =~ s#[^/]+$##; |
|
$xmlfile = $docroot.'/'.$href.'questionDB.xml'; #quizDB file |
|
} |
my @state = (); |
my @state = (); |
my $category; # the current category ID |
my $category; # the current category ID |
my $id; # the current question ID |
my $id; # the current question ID |
Line 2761 sub parse_webct4_questionDB {
|
Line 2913 sub parse_webct4_questionDB {
|
action => '', |
action => '', |
); |
); |
my $currtexttype; |
my $currtexttype; |
my $currimagtype; |
my $currimagtype; |
|
my $is_objectbank; |
my $p = HTML::Parser->new |
my $p = HTML::Parser->new |
( |
( |
xml_mode => 1, |
xml_mode => 1, |
start_h => |
start_h => |
[sub { |
[sub { |
my ($tagname, $attr) = @_; |
my ($tagname, $attr) = @_; |
push @state, $tagname; |
if (("@state" eq "questestinterop") && ($tagname eq 'objectbank')) { |
|
$is_objectbank = 1; |
|
} else { |
|
push @state, $tagname; |
|
} |
if ("@state" eq "questestinterop section") { |
if ("@state" eq "questestinterop section") { |
$category = $attr->{ident}; |
$category = $attr->{ident}; |
%{$$catinfo{$category}} = (); |
%{$$catinfo{$category}} = (); |
Line 2830 sub parse_webct4_questionDB {
|
Line 2987 sub parse_webct4_questionDB {
|
$$settings{$id}{texttype} = $attr->{texttype}; |
$$settings{$id}{texttype} = $attr->{texttype}; |
$currtexttype = $attr->{texttype}; |
$currtexttype = $attr->{texttype}; |
} |
} |
|
if ("@state" eq "questestinterop section item presentation flow material matimage") { |
|
$$settings{$id}{imagtype} = $attr->{imagtype}; |
|
$currimagtype = $attr->{imagtype}; |
|
$$settings{$id}{uri} = $attr->{uri}; |
|
|
|
} |
if ("@state" eq "questestinterop section item presentation flow response_lid") { |
if ("@state" eq "questestinterop section item presentation flow response_lid") { |
$$settings{$id}{class} = 'multiplechoice'; |
$$settings{$id}{class} = 'multiplechoice'; |
$list = $attr->{ident}; |
$list = $attr->{ident}; |
Line 2851 sub parse_webct4_questionDB {
|
Line 3014 sub parse_webct4_questionDB {
|
$$settings{$id}{$list}{$answer_id}{texttype} = $attr->{texttype}; |
$$settings{$id}{$list}{$answer_id}{texttype} = $attr->{texttype}; |
$currtexttype = $attr->{texttype}; |
$currtexttype = $attr->{texttype}; |
} |
} |
|
if ("@state" eq "questestinterop section item presentation flow response_lid render_choice flow_label response_label flow_mat material mattext") { |
|
$$settings{$id}{$list}{$answer_id}{texttype} = $attr->{texttype}; |
|
$currtexttype = $attr->{texttype}; |
|
} |
|
|
# Numerical |
# Numerical |
if ("@state" eq "questestinterop section item presentation material mat_extension webct:x_webct_v01_dynamicmattext") { |
if ("@state" eq "questestinterop section item presentation material mat_extension webct:x_webct_v01_dynamicmattext") { |
Line 2937 sub parse_webct4_questionDB {
|
Line 3104 sub parse_webct4_questionDB {
|
} |
} |
} |
} |
if ("@state" eq "questestinterop section item resprocessing respcondition setvar") { |
if ("@state" eq "questestinterop section item resprocessing respcondition setvar") { |
$setvar{varname} = $attr->{varname}; |
foreach my $key (keys(%{$attr})) { |
|
$setvar{$key} = $attr->{$key}; |
|
} |
if ($setvar{varname} eq 'WebCT_Correct') { |
if ($setvar{varname} eq 'WebCT_Correct') { |
push(@{$$settings{$id}{$grp}{correctanswer}},$answer_id); |
push(@{$$settings{$id}{$grp}{correctanswer}},$answer_id); |
} |
} |
Line 2968 sub parse_webct4_questionDB {
|
Line 3137 sub parse_webct4_questionDB {
|
} |
} |
if ("@state" eq "questestinterop section item itemfeedback") { |
if ("@state" eq "questestinterop section item itemfeedback") { |
$fdbk = $attr->{ident}; |
$fdbk = $attr->{ident}; |
|
push(@{$$settings{$id}{feedback}},$fdbk); |
$$settings{$id}{$fdbk}{view} = $attr->{view}; |
$$settings{$id}{$fdbk}{view} = $attr->{view}; |
} |
} |
if ("@state" eq "questestinterop section item itemfeedback material mattext") { |
if ("@state" eq "questestinterop section item itemfeedback material mattext") { |
Line 3011 sub parse_webct4_questionDB {
|
Line 3181 sub parse_webct4_questionDB {
|
if ("@state" eq "questestinterop section item presentation flow response_lid render_choice flow_label response_label material mattext") { |
if ("@state" eq "questestinterop section item presentation flow response_lid render_choice flow_label response_label material mattext") { |
$$settings{$id}{$list}{$answer_id}{text} = $text; |
$$settings{$id}{$list}{$answer_id}{text} = $text; |
} |
} |
|
if ("@state" eq "questestinterop section item presentation flow response_lid render_choice flow_label response_label flow_mat material mattext") { |
|
$$settings{$id}{$list}{$answer_id}{text} = $text; |
|
} |
|
|
# Numerical |
# Numerical |
if ("@state" eq "questestinterop section item presentation material mat_extension webct:x_webct_v01_dynamicmattext") { |
if ("@state" eq "questestinterop section item presentation material mat_extension webct:x_webct_v01_dynamicmattext") { |
Line 3049 sub parse_webct4_questionDB {
|
Line 3222 sub parse_webct4_questionDB {
|
} |
} |
} |
} |
if ("@state" eq "questestinterop section item resprocessing respcondition setvar") { |
if ("@state" eq "questestinterop section item resprocessing respcondition setvar") { |
if ($setvar{varname} eq "answerValue") { # Multiple Choice |
if ($setvar{varname} eq "answerValue") { # Multiple Choice WebCT4.0 |
if ($text =~ m/^\d+$/) { |
if ($text =~ m/^\d+$/) { |
if ($text > 0) { |
if ($text > 0) { |
push(@{$$settings{$id}{$list}{correctanswer}},$answer_id); |
push(@{$$settings{$id}{$list}{correctanswer}},$answer_id); |
} |
} |
} |
} |
|
} elsif ($setvar{varname} eq "que_score") { # Multiple Choice WebCT4.1 |
|
if ($text =~ m/^\d+$/) { |
|
if ($text > 0) { |
|
push(@{$$settings{$id}{$list}{correctanswer}},$answer_id); |
|
} |
|
} |
|
} elsif ($is_objectbank) { #Multiple Choice WebCT 4.1 D2L objectbank |
|
if ($setvar{action} eq "Set") { |
|
if ($text =~ /^\d+\.?\d*$/) { |
|
if ($text > 0.000000001) { |
|
push(@{$$settings{$id}{$list}{correctanswer}},$answer_id); |
|
} |
|
} |
|
} |
} |
} |
} |
} |
if ("@state" eq "questestinterop section item resprocessing itemproc_extension webct:x_webct_v01_autocalculate webct:x_webct_v01_anstolerance") { |
if ("@state" eq "questestinterop section item resprocessing itemproc_extension webct:x_webct_v01_autocalculate webct:x_webct_v01_anstolerance") { |
Line 3071 sub parse_webct4_questionDB {
|
Line 3258 sub parse_webct4_questionDB {
|
end_h => |
end_h => |
[sub { |
[sub { |
my ($tagname) = @_; |
my ($tagname) = @_; |
pop @state; |
if (("@state" eq "questestinterop") && ($tagname eq 'objectbank')) { |
|
$is_objectbank = ''; |
|
} else { |
|
pop @state; |
|
} |
}, "tagname"], |
}, "tagname"], |
); |
); |
$p->unbroken_text(1); |
$p->unbroken_text(1); |
$p->parse_file($xmlfile); |
$p->parse_file($xmlfile); |
$p->eof; |
$p->eof; |
my $boxcount; |
my $boxcount; |
foreach my $id (keys %{$settings}) { |
foreach my $id (keys(%{$settings})) { |
if ($$settings{$id}{class} eq 'string') { |
if ($$settings{$id}{class} eq 'string') { |
$boxcount = 0; |
$boxcount = 0; |
if (@{$$settings{$id}{boxes}} > 1) { |
if (@{$$settings{$id}{boxes}} > 1) { |
Line 3089 sub parse_webct4_questionDB {
|
Line 3280 sub parse_webct4_questionDB {
|
} |
} |
} |
} |
} |
} |
|
} elsif ($$settings{$id}{class} eq 'multiplechoice') { |
|
if (ref($$settings{$id}) eq 'HASH') { |
|
foreach my $list (keys(%{$$settings{$id}})) { |
|
if (ref($$settings{$id}{$list}) eq 'HASH') { |
|
if (defined($$settings{$id}{$list}{rcardinality})) { |
|
if ($$settings{$id}{$list}{rcardinality} eq 'Multiple') { |
|
if (ref($$settings{$id}{$list}{correctanswer}) eq 'ARRAY') { |
|
if (@{$$settings{$id}{$list}{correctanswer}} == 1) { |
|
$$settings{$id}{$list}{rcardinality} = 'Single'; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
} |
} |
} |
} |
} |
} |
Line 3112 sub process_assessment {
|
Line 3319 sub process_assessment {
|
($cdom,$cnum) = split/_/,$cid; |
($cdom,$cnum) = split/_/,$cid; |
} |
} |
my $destresdir = $destdir; |
my $destresdir = $destdir; |
|
my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'}; |
if ($context eq 'CSTR') { |
if ($context eq 'CSTR') { |
$destresdir =~ s|/home/$uname/public_html/|/res/$udom/$uname/|; |
$destresdir =~ s{^\Q$londocroot/priv/\E}{/res/}; |
} elsif ($context eq 'DOCS') { |
} elsif ($context eq 'DOCS') { |
$destresdir =~ s|^/home/httpd/html/userfiles|/uploaded|; |
$destresdir =~ s{^\Q$londocroot/userfiles\E}{/uploaded}; |
} |
} |
if ($cms eq 'bb5') { |
if ($cms eq 'bb5') { |
&parse_bb5_assessment($res,$docroot,$container,$settings,\%allanswers,\%allchoices,\@allids); |
&parse_bb5_assessment($res,$docroot,$container,$settings,\%allanswers,\%allchoices,\@allids); |
Line 3138 sub process_assessment {
|
Line 3346 sub process_assessment {
|
} |
} |
} elsif ($cms eq 'webctvista4') { |
} elsif ($cms eq 'webctvista4') { |
unless($$dbparse) { |
unless($$dbparse) { |
foreach my $res (sort keys %{$allquestions}) { |
foreach my $res (sort(keys(%{$allquestions}))) { |
my $parent = $$allquestions{$res}; |
my $parent = $$allquestions{$res}; |
&parse_webctvista4_question($res,$docroot,$resources,$hrefs,$settings,\@allquestids,\%allanswers,\%allchoices,$parent,$catinfo); |
&parse_webctvista4_question($res,$docroot,$resources,$hrefs,$qzdbsettings,\@allquestids,\%allanswers,\%allchoices,$parent,$catinfo); |
} |
} |
&build_category_sequences($destdir,$catinfo,$sequencesfiles,$pagesfiles,$destresdir,$newdir,$cms,$total,$randompickflag,$context,$udom,$uname,$dirname,$cid,$cdom,$cnum,$qzdbsettings); |
&build_category_sequences($destdir,$catinfo,$sequencesfiles,$pagesfiles,$destresdir,$newdir,$cms,$total,$randompickflag,$context,$udom,$uname,$dirname,$cid,$cdom,$cnum,$qzdbsettings); |
$$dbparse = 1; |
$$dbparse = 1; |
} |
} |
&parse_webctvista4_assessment($res,$docroot,$hrefs,\@allids,\%qzparams); |
&parse_webctvista4_assessment($res,$docroot,$$resources{$res}{file},\@allids,\%qzparams); |
if ($qzparams{$res}{numpick} < @allids) { |
if ($qzparams{$res}{numpick} < @allids) { |
$$randompicks{$$resources{$res}{revitm}} = $qzparams{$res}{numpick}; |
$$randompicks{$$resources{$res}{revitm}} = $qzparams{$res}{numpick}; |
$randompickflag = 1; |
$randompickflag = 1; |
} |
} |
} |
} |
my $dirtitle; |
my $dirtitle; |
unless ($cms eq 'webctce4') { |
unless ($cms eq 'webctce4' || $cms eq 'webctvista4') { |
$dirtitle = $$settings{'title'}; |
$dirtitle = $$settings{'title'}; |
$dirtitle =~ s/\W//g; |
$dirtitle =~ s/\s+/_/g; |
|
$dirtitle =~ s/:/_/g; |
$dirtitle .= '_'.$res; |
$dirtitle .= '_'.$res; |
if (!-e "$destdir/problems") { |
if (!-e "$destdir/problems") { |
mkdir("$destdir/problems",0755); |
mkdir("$destdir/problems",0755); |
Line 3166 sub process_assessment {
|
Line 3375 sub process_assessment {
|
} |
} |
|
|
if ($cms eq 'webctce4') { |
if ($cms eq 'webctce4') { |
&build_problem_container($cms,$dirtitle,$destdir,$container,$res,$total,$sequencesfiles,$pagesfiles,$randompickflag,$context,\@allids,$udom,$uname,$dirname,\$containerdir,$cid,$cdom,$cnum,$catinfo,$qzdbsettings); |
if (@allids > 0 && $allids[0] ne '') { |
|
&build_problem_container($cms,$dirtitle,$destdir,$container,$res,$total,$sequencesfiles,$pagesfiles,$randompickflag,$context,\@allids,$udom,$uname,$dirname,\$containerdir,$cid,$cdom,$cnum,$catinfo,$qzdbsettings); |
|
} |
} else { |
} else { |
&build_problem_container($cms,$dirtitle,$destdir,$container,$res,$total,$sequencesfiles,$pagesfiles,$randompickflag,$context,\@allids,$udom,$uname,$dirname,\$containerdir,$cid,$cdom,$cnum,$catinfo,$settings); |
&build_problem_container($cms,$dirtitle,$destdir,$container,$res,$total,$sequencesfiles,$pagesfiles,$randompickflag,$context,\@allids,$udom,$uname,$dirname,\$containerdir,$cid,$cdom,$cnum,$catinfo,$qzdbsettings,\%qzparams); |
} |
} |
if ($cms eq 'bb5') { |
if ($cms eq 'bb5') { |
&write_bb5_questions(\@allids,$containerdir,$context,$settings,$dirname,$destdir,$res,\%allanswers,\%allchoices,$total,$newdir,$cid,$cdom,$cnum,$docroot); |
&write_bb5_questions(\@allids,$containerdir,$context,$settings,$dirname,$destdir,$res,\%allanswers,\%allchoices,$total,$newdir,$cid,$cdom,$cnum,$docroot); |
} elsif ($cms eq 'bb6') { |
} elsif ($cms eq 'bb6') { |
&write_bb6_questions(\@allids,$containerdir,$context,$settings,$dirname,$destdir,$res,$total,$newdir,$cid,$cdom,$cnum,$docroot); |
&write_bb6_questions(\@allids,$containerdir,$context,$settings,$dirname,$destdir,$res,$total,$newdir,$cid,$cdom,$cnum,$docroot); |
} elsif ($cms eq 'webctvista4') { |
} elsif ($cms eq 'webctvista4') { |
&write_webct4_questions($cms,\@allquestids,$context,$settings,$dirname,\%allanswers,\%allchoices,$total,$cid,$cdom,$cnum,$destdir,$catinfo); |
&write_webct4_questions($cms,\@allquestids,$context,$qzdbsettings,$dirname,\%allanswers,\%allchoices,$total,$cid,$cdom,$cnum,$destdir,$catinfo,$dirtitle); |
} |
} |
} |
} |
|
|
Line 3184 sub build_category_sequences {
|
Line 3395 sub build_category_sequences {
|
if (!-e "$destdir/sequences") { |
if (!-e "$destdir/sequences") { |
mkdir("$destdir/sequences",0755); |
mkdir("$destdir/sequences",0755); |
} |
} |
my $numcats = scalar(keys %{$catinfo}); |
my $numcats = scalar(keys(%{$catinfo})); |
my $curr_id = 0; |
my $curr_id = 0; |
my $next_id = 1; |
my $next_id = 1; |
my $fh; |
my $fh; |
open($fh,">$destdir/sequences/question_database.sequence"); |
open($fh,'>',"$destdir/sequences/question_database.sequence"); |
push @{$sequencesfiles},'question_database.sequence'; |
push @{$sequencesfiles},'question_database.sequence'; |
foreach my $category (sort keys %{$catinfo}) { |
foreach my $category (sort(keys(%{$catinfo}))) { |
my $seqname = $$catinfo{$category}{title}.'_'.$category; |
my $seqname; |
$seqname =~ s/\s/_/g; |
if ($cms eq 'webctce4') { |
$seqname =~ s/\W//g; |
$seqname = $$catinfo{$category}{title}.'_'.$category; |
|
} else { |
|
$seqname = $$catinfo{$category}{title}; |
|
} |
|
$seqname =~ s/\s+/_/g; |
|
$seqname =~ s/:/_/g; |
push(@{$sequencesfiles},$seqname.'.sequence'); |
push(@{$sequencesfiles},$seqname.'.sequence'); |
my $catsrc = "$destresdir/sequences/$seqname.sequence"; |
my $catsrc = "$destresdir/sequences/$seqname.sequence"; |
if ($curr_id == 0) { |
if ($curr_id == 0) { |
Line 3231 sub build_category_sequences {
|
Line 3447 sub build_category_sequences {
|
} |
} |
|
|
sub build_problem_container { |
sub build_problem_container { |
my ($cms,$dirtitle,$destdir,$container,$res,$total,$sequencesfiles,$pagesfiles,$randompickflag,$context,$allids,$udom,$uname,$dirname,$containerdir,$cid,$cdom,$cnum,$catinfo,$settings) = @_; |
my ($cms,$dirtitle,$destdir,$container,$res,$total,$sequencesfiles,$pagesfiles,$randompickflag,$context,$allids,$udom,$uname,$dirname,$containerdir,$cid,$cdom,$cnum,$catinfo,$settings,$qzparams) = @_; |
my $seqdir = "$destdir/sequences"; |
my $seqdir = "$destdir/sequences"; |
my $pagedir = "$destdir/pages"; |
my $pagedir = "$destdir/pages"; |
my $curr_id = 0; |
my $curr_id = 0; |
my $next_id = 1; |
my $next_id = 1; |
my $fh; |
my $fh; |
|
my $mapname = $res; |
|
if ($cms eq 'webctvista4' && ref($$qzparams{$res}) eq 'HASH') { |
|
if ($$qzparams{$res}{title}) { |
|
$mapname = $$qzparams{$res}{title}; |
|
$mapname =~ s/\s+/_/g; |
|
} |
|
} |
if ($container eq 'pool' || $randompickflag || $container eq 'database') { |
if ($container eq 'pool' || $randompickflag || $container eq 'database') { |
$$containerdir = $seqdir.'/'.$res.'.sequence'; |
$$containerdir = $seqdir.'/'.$mapname.'.sequence'; |
if (!-e "$seqdir") { |
if (!-e "$seqdir") { |
mkdir("$seqdir",0770); |
mkdir("$seqdir",0770); |
} |
} |
open($fh,">$$containerdir"); |
open($fh,'>',$$containerdir); |
$$total{seq} ++; |
$$total{seq} ++; |
push @{$sequencesfiles},$res.'.sequence'; |
push @{$sequencesfiles},$mapname.'.sequence'; |
} else { |
} else { |
$$containerdir = $pagedir.'/'.$res.'.page'; |
$$containerdir = $pagedir.'/'.$mapname.'.page'; |
if (!-e "$destdir/pages") { |
if (!-e "$pagedir") { |
mkdir("$destdir/pages",0770); |
mkdir("$pagedir",0770); |
} |
} |
open($fh,">$$containerdir"); |
open($fh,'>',$$containerdir); |
$$total{page} ++; |
$$total{page} ++; |
push @{$pagesfiles},$res.'.page'; |
push @{$pagesfiles},$mapname.'.page'; |
} |
} |
print $fh qq|<map> |
print $fh qq|<map> |
|; |
|; |
Line 3265 sub build_problem_container {
|
Line 3488 sub build_problem_container {
|
} else { |
} else { |
$probtitle{$id} = $$settings{title}; |
$probtitle{$id} = $$settings{title}; |
} |
} |
$probtitle{$id} =~ s/\s/_/g; |
$probtitle{$id} =~ s/\s+/_/g; |
$probtitle{$id} =~ s/\W//g; |
$probtitle{$id} =~ s/:/_/g; |
$probtitle{$id} .= '_'.$id; |
$probtitle{$id} =~ s/\//_/g; |
|
if ($cms eq 'webctce4') { |
|
$probtitle{$id} .= '_'.$id; |
|
} |
} |
} |
if ($cms eq 'webctce4' && $container ne 'database') { |
if (($cms eq 'webctce4' && $container ne 'database') || |
|
($cms eq 'webctvista4')) { |
|
my $probdir; |
my $catid = $$settings{$$allids[0]}{category}; |
my $catid = $$settings{$$allids[0]}{category}; |
my $probdir = $$catinfo{$catid}{title}.'_'.$catid; |
if ($catid) { |
$probdir =~ s/\s/_/g; |
if ($cms eq 'webctce4') { |
$probdir =~ s/\W//g; |
$probdir = $$catinfo{$catid}{title}.'_'.$catid; |
$probsrc = "$dirname/problems/$probdir/$probtitle{$$allids[0]}.problem"; |
} else { |
|
$probdir = $$catinfo{$catid}{title}; |
|
} |
|
$probdir =~ s/\s+/_/g; |
|
$probdir =~ s/:/_/g; |
|
$probsrc = "$dirname/problems/$probdir/$probtitle{$$allids[0]}.problem"; |
|
} else { |
|
$probsrc="$dirname/problems/$dirtitle/$probtitle{$$allids[0]}.problem"; |
|
} |
} else { |
} else { |
$probsrc="$dirname/problems/$dirtitle/$probtitle{$$allids[0]}.problem"; |
$probsrc="$dirname/problems/$dirtitle/$probtitle{$$allids[0]}.problem"; |
} |
} |
Line 3293 sub build_problem_container {
|
Line 3529 sub build_problem_container {
|
$curr_id = $j; |
$curr_id = $j; |
$next_id = $curr_id + 1; |
$next_id = $curr_id + 1; |
if ($context eq 'CSTR') { |
if ($context eq 'CSTR') { |
if ($cms eq 'webctce4' && $container ne 'database') { |
if (($cms eq 'webctce4' && $container ne 'database') || |
|
($cms eq 'webctvista4')) { |
|
my $probdir; |
my $catid = $$settings{$$allids[$j]}{category}; |
my $catid = $$settings{$$allids[$j]}{category}; |
my $probdir = $$catinfo{$catid}{title}.'_'.$catid; |
if ($catid) { |
$probdir =~ s/\s/_/g; |
if ($cms eq 'webctce4') { |
$probdir =~ s/\W//g; |
$probdir = $$catinfo{$catid}{title}.'_'.$catid; |
$probsrc = "$dirname/problems/$probdir/$probtitle{$$allids[$j]}.problem"; |
} else { |
|
$probdir = $$catinfo{$catid}{title}; |
|
} |
|
$probdir =~ s/\s/_/g; |
|
$probdir =~ s/:/_/g; |
|
$probsrc = "$dirname/problems/$probdir/$probtitle{$$allids[$j]}.problem"; |
|
} else { |
|
$probsrc = "$dirname/problems/$dirtitle/$probtitle{$$allids[$j]}.problem"; |
|
} |
} else { |
} else { |
$probsrc = "$dirname/problems/$dirtitle/$probtitle{$$allids[$j]}.problem"; |
$probsrc = "$dirname/problems/$dirtitle/$probtitle{$$allids[$j]}.problem"; |
} |
} |
Line 3321 sub write_bb5_questions {
|
Line 3567 sub write_bb5_questions {
|
my ($allids,$containerdir,$context,$settings,$dirname,$destdir,$res,$allanswers,$allchoices,$total,$newdir,$cid,$cdom,$cnum,$docroot) = @_; |
my ($allids,$containerdir,$context,$settings,$dirname,$destdir,$res,$allanswers,$allchoices,$total,$newdir,$cid,$cdom,$cnum,$docroot) = @_; |
my $qnum = 0; |
my $qnum = 0; |
my $pathstart; |
my $pathstart; |
|
my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'}; |
if ($context eq 'CSTR') { |
if ($context eq 'CSTR') { |
$pathstart = '../..'; |
$pathstart = '../..'; |
} else { |
} else { |
Line 3340 sub write_bb5_questions {
|
Line 3587 sub write_bb5_questions {
|
$qnum ++; |
$qnum ++; |
my $output; |
my $output; |
my $permcontainer = $containerdir; |
my $permcontainer = $containerdir; |
$permcontainer =~ s#/home/httpd/html/userfiles#uploaded#; |
$permcontainer =~ s{^\Q$londocroot/userfiles\E}{uploaded}; |
my $symb = $cid.'.'.$permcontainer.'___'.$qnum.'___lib/templates/simpleproblem.problem.0.'; |
my $symb = $cid.'.'.$permcontainer.'___'.$qnum.'___lib/templates/simpleproblem.problem.0.'; |
my %resourcedata = (); |
my %resourcedata = (); |
for (my $i=0; $i<10; $i++) { |
for (my $i=0; $i<10; $i++) { |
Line 3684 sub write_bb5_questions {
|
Line 3931 sub write_bb5_questions {
|
$title =~ s/\s/_/g; |
$title =~ s/\s/_/g; |
$title =~ s/\W//g; |
$title =~ s/\W//g; |
$title .= '_'.$id; |
$title .= '_'.$id; |
open(PROB,">:utf8", "$newdir/$title.problem"); |
open(PROB,'>',"$newdir/$title.problem"); |
print PROB $output; |
print PROB $output; |
close PROB; |
close PROB; |
} else { |
} else { |
Line 3696 sub write_bb5_questions {
|
Line 3943 sub write_bb5_questions {
|
} |
} |
|
|
sub write_webct4_questions { |
sub write_webct4_questions { |
my ($cms,$alldbquestids,$context,$settings,$dirname,$allanswers,$allchoices,$total,$cid,$cdom,$cnum,$destdir,$catinfo) = @_; |
my ($cms,$alldbquestids,$context,$settings,$dirname,$allanswers,$allchoices,$total,$cid,$cdom,$cnum,$destdir,$catinfo,$dirtitle) = @_; |
|
my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'}; |
my $qnum = 0; |
my $qnum = 0; |
foreach my $id (@{$alldbquestids}) { |
foreach my $id (@{$alldbquestids}) { |
$qnum ++; |
$qnum ++; |
Line 3706 sub write_webct4_questions {
|
Line 3954 sub write_webct4_questions {
|
my $questionimage; |
my $questionimage; |
foreach my $fdbk (@{$$settings{$id}{feedback}}) { |
foreach my $fdbk (@{$$settings{$id}{feedback}}) { |
my $feedback = $$settings{$id}{$fdbk}{text}; |
my $feedback = $$settings{$id}{$fdbk}{text}; |
if ($$settings{$id}{$fdbk}{texttype} eq 'text/html') { |
if ($feedback ne '') { |
$feedback = &HTML::Entities::decode($feedback); |
if ($$settings{$id}{$fdbk}{texttype} eq 'text/html') { |
|
$feedback = &HTML::Entities::decode($feedback); |
|
} |
|
$allfeedback .= $feedback; |
} |
} |
$allfeedback .= $feedback; |
|
} |
} |
if ($$settings{$id}{texttype} eq 'text/html') { |
if ($$settings{$id}{texttype} eq 'text/html') { |
if ($$settings{$id}{text}) { |
if ($$settings{$id}{text}) { |
Line 3718 sub write_webct4_questions {
|
Line 3968 sub write_webct4_questions {
|
} |
} |
if ($$settings{$id}{class} eq 'numerical') { |
if ($$settings{$id}{class} eq 'numerical') { |
foreach my $numid (@{$$settings{$id}{numids}}) { |
foreach my $numid (@{$$settings{$id}{numids}}) { |
foreach my $var (keys %{$$settings{$id}{$numid}{vars}}) { |
foreach my $var (keys(%{$$settings{$id}{$numid}{vars}})) { |
if ($cms eq 'webct4ce') { |
if ($cms eq 'webctce4') { |
$$settings{$id}{text} =~ s/{($var)}/\$$1 /g; |
$$settings{$id}{text} =~ s/{($var)}/\$$1 /g; |
} elsif ($cms eq 'webctvista4') { |
} elsif ($cms eq 'webctvista4') { |
$$settings{$id}{text} =~ s/\[($var)\]/\$$1 /g; |
$$settings{$id}{text} =~ s/\[($var)\]/\$$1 /g; |
Line 3727 sub write_webct4_questions {
|
Line 3977 sub write_webct4_questions {
|
} |
} |
} |
} |
} |
} |
$permcontainer =~ s#/home/httpd/html/userfiles#uploaded#; |
$permcontainer =~ s{\Q$londocroot/userfiles\E}{uploaded}; |
my $symb = $cid.'.'.$permcontainer.'___'.$qnum.'___lib/templates/simpleproblem.problem.0.'; |
my $symb = $cid.'.'.$permcontainer.'___'.$qnum.'___lib/templates/simpleproblem.problem.0.'; |
my %resourcedata = (); |
my %resourcedata = (); |
for (my $i=0; $i<10; $i++) { |
for (my $i=0; $i<10; $i++) { |
Line 3745 sub write_webct4_questions {
|
Line 3995 sub write_webct4_questions {
|
} |
} |
} |
} |
$$total{prob} ++; |
$$total{prob} ++; |
|
|
if (exists($$settings{$id}{uri})) { |
if (exists($$settings{$id}{uri})) { |
if ($cms eq 'webct4ce') { |
if ($cms eq 'webctce4') { |
if ($$settings{$id}{imagtype} =~ /^image\//) { |
if ($$settings{$id}{imagtype} =~ /^image\//) { |
$questionimage = '<p><img src="../../resfiles/'.$$settings{$id}{uri}.'" /></p>'."\n"; |
$questionimage = '<p><img src="../../resfiles/'.$$settings{$id}{uri}.'" /></p>'."\n"; |
} else { |
} else { |
Line 3761 sub write_webct4_questions {
|
Line 4012 sub write_webct4_questions {
|
} |
} |
} |
} |
} |
} |
|
if (($cms eq 'webctvista4') && (defined($$settings{$id}{image}))) { |
|
my $imgsrc = '../../resfiles/'.$$settings{$id}{image}; |
|
if (defined($$settings{$id}{imagetitle})) { |
|
$imgsrc = '../../resfiles/'.$$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') { |
Line 3768 sub write_webct4_questions {
|
Line 4026 sub write_webct4_questions {
|
<essayresponse> |
<essayresponse> |
<textfield>$pre_fill_answer</textfield> |
<textfield>$pre_fill_answer</textfield> |
</essayresponse> |
</essayresponse> |
<postanswerdate> |
|
$allfeedback |
|
</postanswerdate> |
|
|; |
|; |
} else { |
} else { |
$resourcedata{$symb.'questiontext'} = '<p>'.$$settings{$id}{text}.'</p>'.$questionimage; |
$resourcedata{$symb.'questiontext'} = '<p>'.$$settings{$id}{text}.'</p>'.$questionimage; |
Line 4055 $$settings{$id}{$list}{jumbledtext}[$k]
|
Line 4310 $$settings{$id}{$list}{jumbledtext}[$k]
|
($$settings{$id}{class} eq 'shortanswer')) { |
($$settings{$id}{class} eq 'shortanswer')) { |
my $labelnum = 0; |
my $labelnum = 0; |
my @str_labels = (); |
my @str_labels = (); |
if ($cms eq 'webct4ce') { |
if ($cms eq 'webctce4') { |
foreach my $str_id (@{$$settings{$id}{str}}) { |
foreach my $str_id (@{$$settings{$id}{str}}) { |
foreach my $label (@{$$settings{$id}{$str_id}{labels}}) { |
foreach my $label (@{$$settings{$id}{$str_id}{labels}}) { |
push(@str_labels,$label); |
push(@str_labels,$label); |
Line 4200 $$settings{$id}{$list}{jumbledtext}[$k]
|
Line 4455 $$settings{$id}{$list}{jumbledtext}[$k]
|
|; |
|; |
foreach my $numid (@{$$settings{$id}{numids}}) { |
foreach my $numid (@{$$settings{$id}{numids}}) { |
my $formula = $$settings{$id}{$numid}{formula}; |
my $formula = $$settings{$id}{$numid}{formula}; |
my $pattern = join('|',(sort (keys (%mathfns)))); |
my $pattern = join('|',(sort(keys(%mathfns)))); |
$formula =~ s/($pattern)/\&$mathfns{$1}/g; |
$formula =~ s/($pattern)/\&$mathfns{$1}/g; |
foreach my $var (keys %{$$settings{$id}{$numid}{vars}}) { |
foreach my $var (keys(%{$$settings{$id}{$numid}{vars}})) { |
my $decnum = $$settings{$id}{$numid}{vars}{$var}{dec}; |
my $decnum = $$settings{$id}{$numid}{vars}{$var}{dec}; |
my $increment = '0.'; |
my $increment = '0.'; |
if ($decnum == 0) { |
if ($decnum == 0) { |
Line 4215 $$settings{$id}{$list}{jumbledtext}[$k]
|
Line 4470 $$settings{$id}{$list}{jumbledtext}[$k]
|
} |
} |
$increment .= '1'; |
$increment .= '1'; |
} |
} |
if ($cms eq 'webct4ce') { |
if ($cms eq 'webctce4') { |
$formula =~ s/{($var)}/(\$$1)/g; |
$formula =~ s/{($var)}/(\$$1)/g; |
} elsif ($cms eq 'webctvista4') { |
} elsif ($cms eq 'webctvista4') { |
$formula =~ s/\[($var)\]/(\$$1)/g; |
$formula =~ s/\[($var)\]/(\$$1)/g; |
Line 4265 $$settings{$id}{$list}{jumbledtext}[$k]
|
Line 4520 $$settings{$id}{$list}{jumbledtext}[$k]
|
} |
} |
} |
} |
if ($context eq 'CSTR') { |
if ($context eq 'CSTR') { |
|
my $probdir; |
my $catid = $$settings{$id}{category}; |
my $catid = $$settings{$id}{category}; |
my $probdir = $$catinfo{$catid}{title}.'_'.$catid; |
if ($catid) { |
$probdir =~ s/\s/_/g; |
if ($cms eq 'webctce4') { |
$probdir =~ s/\W//g; |
$probdir = $$catinfo{$catid}{title}.'_'.$catid; |
|
} else { |
|
$probdir = $$catinfo{$catid}{title}; |
|
} |
|
$probdir =~ s/\s/_/g; |
|
$probdir =~ s/://g; |
|
} elsif (defined($dirtitle)) { |
|
$probdir = $dirtitle; |
|
} |
if (!-e "$destdir/problems/$probdir") { |
if (!-e "$destdir/problems/$probdir") { |
mkdir("$destdir/problems/$probdir",0755); |
mkdir("$destdir/problems/$probdir",0755); |
} |
} |
|
if ($allfeedback ne '') { |
|
$output .= qq| |
|
<postanswerdate> |
|
$allfeedback |
|
</postanswerdate> |
|
|; |
|
} |
$output .= qq|</problem> |
$output .= qq|</problem> |
|; |
|; |
my $title = $$settings{$id}{title}; |
my $title = $$settings{$id}{title}; |
$title =~ s/\s/_/g; |
$title =~ s/\s/_/g; |
$title =~ s/\W//g; |
$title =~ s/:/_/g; |
$title .= '_'.$id; |
$title =~ s/\//_/g; |
open(PROB,">:utf8", "$destdir/problems/$probdir/$title.problem"); |
open(PROB,'>',"$destdir/problems/$probdir/$title.problem"); |
print PROB $output; |
print PROB $output; |
close PROB; |
close PROB; |
} else { |
} else { |
Line 4319 sub test_for_html {
|
Line 4590 sub test_for_html {
|
|
|
sub write_bb6_questions { |
sub write_bb6_questions { |
my ($allids,$containerdir,$context,$settings,$dirname,$destdir,$res,$total,$newdir,$cid,$cdom,$cnum,$docroot) = @_; |
my ($allids,$containerdir,$context,$settings,$dirname,$destdir,$res,$total,$newdir,$cid,$cdom,$cnum,$docroot) = @_; |
|
my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'}; |
my $qnum = 0; |
my $qnum = 0; |
foreach my $id (@{$allids}) { |
foreach my $id (@{$allids}) { |
my $questiontext = $$settings{$id}{question}{text}; |
my $questiontext = $$settings{$id}{question}{text}; |
Line 4327 sub write_bb6_questions {
|
Line 4599 sub write_bb6_questions {
|
$qnum ++; |
$qnum ++; |
my $output; |
my $output; |
my $permcontainer = $containerdir; |
my $permcontainer = $containerdir; |
$permcontainer =~ s#/home/httpd/html/userfiles#uploaded#; |
$permcontainer =~ s{\Q$londocroot/userfiles\E}{uploaded}; |
my $symb = $cid.'.'.$permcontainer.'___'.$qnum.'___lib/templates/simpleproblem.problem.0.'; |
my $symb = $cid.'.'.$permcontainer.'___'.$qnum.'___lib/templates/simpleproblem.problem.0.'; |
my %resourcedata = (); |
my %resourcedata = (); |
for (my $i=0; $i<10; $i++) { |
for (my $i=0; $i<10; $i++) { |
Line 4676 sub write_bb6_questions {
|
Line 4948 sub write_bb6_questions {
|
$title =~ s/\s/_/g; |
$title =~ s/\s/_/g; |
$title =~ s/\W//g; |
$title =~ s/\W//g; |
$title .= '_'.$id; |
$title .= '_'.$id; |
open(PROB,">:utf8", "$newdir/$title.problem"); |
open(PROB,'>',"$newdir/$title.problem"); |
print PROB $output; |
print PROB $output; |
close PROB; |
close PROB; |
} else { |
} else { |
Line 4702 sub retrieve_image {
|
Line 4974 sub retrieve_image {
|
if (!-e "$docroot/$res/webimages") { |
if (!-e "$docroot/$res/webimages") { |
mkdir("$docroot/$res/webimages",0755); |
mkdir("$docroot/$res/webimages",0755); |
} |
} |
open(my $fh,">$docroot/$res/webimages/$filename"); |
open(my $fh,'>',"$docroot/$res/webimages/$filename"); |
print $fh $contents; |
print $fh $contents; |
close($fh); |
close($fh); |
if ($context eq 'DOCS') { |
if ($context eq 'DOCS') { |
Line 4795 sub process_announce {
|
Line 5067 sub process_announce {
|
} |
} |
} |
} |
|
|
open(FILE,">$destdir/resfiles/$res.html"); |
open(FILE,'>',"$destdir/resfiles/$res.html"); |
push @{$resrcfiles}, "$res.html"; |
push @{$resrcfiles}, "$res.html"; |
print FILE qq|<html> |
print FILE qq|<html> |
<head> |
<head> |
Line 4821 sub process_content {
|
Line 5093 sub process_content {
|
my ($cms,$res,$context,$docroot,$destdir,$settings,$dom,$user,$resrcfiles,$packages,$hrefs) = @_; |
my ($cms,$res,$context,$docroot,$destdir,$settings,$dom,$user,$resrcfiles,$packages,$hrefs) = @_; |
my $xmlfile = $docroot.'/'.$res.".dat"; |
my $xmlfile = $docroot.'/'.$res.".dat"; |
my $destresdir = $destdir; |
my $destresdir = $destdir; |
|
my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'}; |
if ($context eq 'CSTR') { |
if ($context eq 'CSTR') { |
$destresdir =~ s|/home/$user/public_html/|/res/$dom/$user/|; |
$destresdir =~ s{^\Q$londocroot/priv/\E}{/res/}; |
} elsif ($context eq 'DOCS') { |
} elsif ($context eq 'DOCS') { |
$destresdir =~ s|^/home/httpd/html/userfiles|/uploaded|; |
$destresdir =~ s{^\Q$londocroot/userfiles\E}{/uploaded}; |
} |
} |
my $filetag = ''; |
my $filetag = ''; |
if ($cms eq 'bb5') { |
if ($cms eq 'bb5') { |
Line 4954 sub process_content {
|
Line 5227 sub process_content {
|
if ($$settings{newwindow} eq "true") { |
if ($$settings{newwindow} eq "true") { |
$linktag .= qq| target="$res$filecount"|; |
$linktag .= qq| target="$res$filecount"|; |
} |
} |
foreach my $entry (keys %{$$settings{files}[$filecount]{registry}}) { |
foreach my $entry (keys(%{$$settings{files}[$filecount]{registry}})) { |
$linktag .= qq| $entry="$$settings{files}[$filecount]{registry}{$entry}"|; |
$linktag .= qq| $entry="$$settings{files}[$filecount]{registry}{$entry}"|; |
} |
} |
$linktag .= qq|>$$settings{files}[$filecount]{linkname}</a><br/>\n|; |
$linktag .= qq|>$$settings{files}[$filecount]{linkname}</a><br/>\n|; |
Line 5000 sub process_content {
|
Line 5273 sub process_content {
|
} |
} |
} |
} |
|
|
if (!open(FILE,">$destdir/resfiles/$res.html")) { |
if (!open(FILE,'>',"$destdir/resfiles/$res.html")) { |
&Apache::lonnet::logthis("IMS import error: Cannot open file - $destdir/resfiles/$res.html - $!"); |
&Apache::lonnet::logthis("IMS import error: Cannot open file - $destdir/resfiles/$res.html - $!"); |
} else { |
} else { |
push @{$resrcfiles}, "$res.html"; |
push @{$resrcfiles}, "$res.html"; |
Line 5193 sub angel_content {
|
Line 5466 sub angel_content {
|
$p->parse_file($xmlfile); |
$p->parse_file($xmlfile); |
$p->eof; |
$p->eof; |
if ($type eq "PAGE") { |
if ($type eq "PAGE") { |
open(FILE,"<$xmlfile"); |
open(FILE,'<',$xmlfile); |
@buffer = <FILE>; |
@buffer = <FILE>; |
close(FILE); |
close(FILE); |
chomp(@buffer); |
chomp(@buffer); |
Line 5210 sub angel_content {
|
Line 5483 sub angel_content {
|
} |
} |
} |
} |
} |
} |
open(FILE,">$destdir/resfiles/$res.html"); |
open(FILE,'>',"$destdir/resfiles/$res.html"); |
push @{$resrcfiles}, "$res.html"; |
push @{$resrcfiles}, "$res.html"; |
print FILE qq|<html> |
print FILE qq|<html> |
<head> |
<head> |
Line 5245 sub angel_content {
|
Line 5518 sub angel_content {
|
# ---------------------------------------------------------------- WebCT content |
# ---------------------------------------------------------------- WebCT content |
sub webct4_content { |
sub webct4_content { |
my ($res,$docroot,$destdir,$settings,$dom,$user,$type,$title,$resrcfiles) = @_; |
my ($res,$docroot,$destdir,$settings,$dom,$user,$type,$title,$resrcfiles) = @_; |
if (!open(FILE,">$destdir/resfiles/$res.html")) { |
if (defined($$settings{url})) { |
&Apache::lonnet::logthis("IMS import error: Cannot open file - $destdir/resfiles/$res.html - $!"); |
if (!open(FILE,'>',"$destdir/resfiles/$res.html")) { |
} else { |
&Apache::lonnet::logthis("IMS import error: Cannot open file - $destdir/resfiles/$res.html - $!"); |
push(@{$resrcfiles}, "$res.html"); |
} else { |
my $linktag = ''; |
push(@{$resrcfiles}, "$res.html"); |
if (defined($$settings{url})) { |
my $linktag = qq|<a href="$$settings{url}"|; |
$linktag = qq|<a href="$$settings{url}"|; |
|
if ($title ne '') { |
if ($title ne '') { |
$linktag .= qq|>$title</a>|; |
$linktag .= qq|>$title</a>|; |
} else { |
} else { |
$linktag .= qq|>$$settings{url}|; |
$linktag .= qq|>$$settings{url}|; |
} |
} |
} |
print FILE qq|<html> |
print FILE qq|<html> |
|
<head> |
<head> |
<title>$title</title> |
<title>$title</title> |
</head> |
</head> |
Line 5266 sub webct4_content {
|
Line 5537 sub webct4_content {
|
$linktag |
$linktag |
</body> |
</body> |
</html>|; |
</html>|; |
close(FILE); |
close(FILE); |
|
} |
} |
} |
} |
} |
|
|