--- loncom/imspackages/imsprocessor.pm 2005/10/27 18:19:36 1.32
+++ loncom/imspackages/imsprocessor.pm 2006/04/05 17:33:51 1.37
@@ -32,7 +32,7 @@ use strict;
sub ims_config {
my ($areas,$cmsmap,$areaname) = @_;
- @{$areas} = ("doc","extlink","announce","staff","board","quiz","survey","pool","users");
+ @{$areas} = ("doc","extlink","announce","staff","board","quiz","survey","pool","users","question");
%{$$cmsmap{bb5}} = (
announce => 'resource/x-bb-announcement',
board => 'resource/x-bb-discussionboard',
@@ -64,11 +64,17 @@ sub ims_config {
survey => 'FORM',
);
@{$$cmsmap{angel}{doc}} = ('FILE','PAGE');
- %{$$cmsmap{webct4}} = (
+ %{$$cmsmap{webctce4}} = (
quiz => 'webctquiz',
survey => 'webctsurvey',
doc => 'webcontent'
);
+ %{$$cmsmap{webctvista4}} = (
+ question => 'webct.question',
+ quiz => 'webct.assessment',
+ survey => 'webctsurvey',
+ doc => 'webcontent'
+ );
%{$areaname} = (
announce => 'Announcements',
board => 'Discussion Boards',
@@ -76,6 +82,7 @@ sub ims_config {
extlink => 'Links to external sites',
pool => 'Question pools',
quiz => 'Quizzes',
+ question => 'Assessment Questions',
staff => 'Staff information',
survey => 'Surveys',
users => 'Enrollment',
@@ -158,14 +165,10 @@ sub process_manifest {
bb6 => 'organization',
bb5 => 'tableofcontents',
angel => 'organization',
- webct4 => 'organization',
+ webctce4 => 'organization',
+ webctvista4 => 'organization'
);
- my %contents = ();
- my @state = ();
- my $itm = '';
- my $identifier = '';
my @seq = "Top";
- my $lastitem;
%{$$items{'Top'}} = (
contentscount => 0,
resnum => 'toplevel',
@@ -187,6 +190,20 @@ sub process_manifest {
}
my $xmlfile = $tempdir.'/imsmanifest.xml';
+ &parse_manifest($cms,$phase,$tempdir,$xmlfile,\%toc,$includedres,
+ $includeditems,$items,$resources,$resinfo,$hrefs,\@seq);
+ return 'ok' ;
+}
+
+sub parse_manifest {
+ my ($cms,$phase,$tempdir,$xmlfile,$toc,$includedres,$includeditems,$items,
+ $resources,$resinfo,$hrefs,$seq) = @_;
+ my @state = ();
+ my $itm = '';
+ my %contents = ();
+ my $identifier = '';
+ my @allidentifiers = ();
+ my $lastitem;
my $p = HTML::Parser->new
(
xml_mode => 1,
@@ -195,14 +212,14 @@ sub process_manifest {
my ($tagname, $attr) = @_;
push @state, $tagname;
my $start = @state - 3;
- if ( ($state[0] eq "manifest") && ($state[1] eq "organizations") && ($state[2] eq $toc{$cms}) ) {
+ if ( ($state[0] eq "manifest") && ($state[1] eq "organizations") && ($state[2] eq $$toc{$cms}) ) {
if ($state[-1] eq 'item') {
$itm = $attr->{identifier};
if ($$includeditems{$itm} || $phase ne 'build') {
%{$$items{$itm}} = ();
$$items{$itm}{contentscount} = 0;
@{$$items{$itm}{contents}} = ();
- if ($cms eq 'bb5' || $cms eq 'bb6' || $cms eq 'webct4') {
+ if ($cms eq 'bb5' || $cms eq 'bb6' || $cms eq 'webctce4' || $cms eq 'webctvista4') {
$$items{$itm}{resnum} = $attr->{identifierref};
if ($cms eq 'bb5') {
$$items{$itm}{title} = $attr->{title};
@@ -216,32 +233,32 @@ sub process_manifest {
%{$$resources{$$items{$itm}{resnum}}} = ();
}
$$resources{$$items{$itm}{resnum}}{revitm} = $itm;
- if ($start > @seq) {
+ if ($start > @{$seq}) {
unless ($lastitem eq '') {
- push @seq, $lastitem;
- unless ( defined($contents{$seq[-1]}) ) {
- @{$contents{$seq[-1]}} = ();
+ push @{$seq}, $lastitem;
+ unless ( defined($contents{$$seq[-1]}) ) {
+ @{$contents{$$seq[-1]}} = ();
}
- push @{$contents{$seq[-1]}},$itm;
- $$items{$itm}{parentseq} = $seq[-1];
+ push @{$contents{$$seq[-1]}},$itm;
+ $$items{$itm}{parentseq} = $$seq[-1];
}
- } elsif ($start < @seq) {
- my $diff = @seq - $start;
+ } elsif ($start < @{$seq}) {
+ my $diff = @{$seq} - $start;
while ($diff > 0) {
- pop @seq;
+ pop @{$seq};
$diff --;
}
- if (@seq) {
- push @{$contents{$seq[-1]}}, $itm;
+ if (@{$seq}) {
+ push @{$contents{$$seq[-1]}}, $itm;
}
} else {
- push @{$contents{$seq[-1]}}, $itm;
+ push @{$contents{$$seq[-1]}}, $itm;
}
my $path;
- if (@seq > 1) {
- $path = join(',',@seq);
- } elsif (@seq > 0) {
- $path = $seq[0];
+ if (@{$seq} > 1) {
+ $path = join(',',@{$seq});
+ } elsif (@{$seq} > 0) {
+ $path = $$seq[0];
}
$$items{$itm}{filepath} = $path;
if ($cms eq 'bb5' || $cms eq 'bb6') {
@@ -252,24 +269,29 @@ sub process_manifest {
$$resinfo{$$items{$itm}{resnum}}{'isfolder'} = 'true';
}
}
- $$items{$seq[-1]}{contentscount} ++;
+ $$items{$$seq[-1]}{contentscount} ++;
+ $$resources{$$items{$itm}{resnum}}{seqref} = $seq;
$lastitem = $itm;
}
}
- if ($cms eq 'webct4') {
+ if ($cms eq 'webctce4') {
if (($state[-1] eq "webct:properties") && (@state > 4)) {
$$items{$itm}{properties} = $attr->{identifierref};
}
}
} elsif ("@state" eq "manifest resources resource" ) {
$identifier = $attr->{identifier};
+ push(@allidentifiers,$identifier);
if ($$includedres{$identifier} || $phase ne 'build') {
if ($cms eq 'bb5' || $cms eq 'bb6') {
$$resources{$identifier}{file} = $attr->{file};
$$resources{$identifier}{type} = $attr->{type};
- } elsif ($cms eq 'webct4') {
+ } elsif ($cms eq 'webctce4') {
$$resources{$identifier}{type} = $attr->{type};
$$resources{$identifier}{file} = $attr->{href};
+ } elsif ($cms eq 'webctvista4') {
+ $$resources{$identifier}{type} = $attr->{type};
+ $$resources{$identifier}{'webct:coType'} = $attr->{'webct:coType'};
} elsif ($cms eq 'angel') {
$identifier = substr($identifier,3);
if ($attr->{href} =~ m-^_assoc/$identifier/(.+)$-) {
@@ -280,14 +302,38 @@ sub process_manifest {
}
} elsif ("@state" eq "manifest resources resource file") {
if ($$includedres{$identifier} || $phase ne 'build') {
- if ($cms eq 'bb5' || $cms eq 'bb6' || $cms eq 'webct4') {
+ if ($cms eq 'webctvista4') {
+ $$resources{$identifier}{file} = $attr->{href};
+ }
+ if ($cms eq 'bb5' || $cms eq 'bb6' ||
+ $cms eq 'webctce4' || $cms eq 'webctvista4') {
push @{$$hrefs{$identifier}},$attr->{href};
+
+ if ($$resources{$identifier}{type} eq
+ 'webct.manifest') {
+ my $manifestfile = $tempdir.'/'.$attr->{href};
+ my $currseqref = [];
+ if ($itm) {
+ $currseqref =
+ $$resources{$$items{$itm}{resnum}}{seqref};
+ }
+ &parse_manifest($cms,$phase,$tempdir,$manifestfile,
+ $toc,$includedres,$includeditems,
+ $items,$resources,$resinfo,
+ $hrefs,$currseqref);
+ }
} elsif ($cms eq 'angel') {
if ($attr->{href} =~ m/^_assoc\\$identifier\\(.+)$/) {
push @{$$hrefs{$identifier}},$1;
} elsif ($attr->{href} =~ m/^Icons\\icon(\w+)\.gif/) {
$$resources{$identifier}{type} = $1;
}
+ }
+ }
+ } elsif ("@state" eq "manifest webct:ContentObject") {
+ foreach my $ident (@allidentifiers) {
+ if ($$resources{$ident}{type} eq 'ims_qtiasiv1p2') {
+ $$resources{$ident}{type} = $attr->{'webct:coType'};
}
}
}
@@ -298,12 +344,12 @@ sub process_manifest {
if ("@state" eq "manifest metadata lom general title langstring") {
$$items{'Top'}{title} = $text;
}
- 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 ($cms eq 'angel' || $cms eq 'bb6') {
+ if ($cms eq 'angel' || $cms eq 'bb6' || $cms eq 'webctvista4') {
$$items{$itm}{title} = $text;
}
- if ($cms eq 'webct4') {
+ if ($cms eq 'webctce4') {
$$items{$itm}{title} = $text;
$$items{$itm}{title} =~ s/(<[^>]*>)//g;
}
@@ -318,11 +364,9 @@ sub process_manifest {
);
$p->parse_file($xmlfile);
$p->eof;
-
foreach my $itm (keys %contents) {
@{$$items{$itm}{contents}} = @{$contents{$itm}};
}
- return 'ok' ;
}
sub get_imports {
@@ -365,14 +409,14 @@ sub target_resources {
}
sub copy_resources {
- my ($context,$cms,$hrefs,$tempdir,$targets,$url,$crs,$cdom,$destdir,$timenow) = @_;
+ my ($context,$cms,$hrefs,$tempdir,$targets,$url,$crs,$cdom,$destdir,$timenow,$assessmentfiles) = @_;
if ($context eq 'DOCS') {
foreach my $key (sort keys %{$hrefs}) {
if (grep/^$key$/,@{$targets}) {
%{$$url{$key}} = ();
foreach my $file (@{$$hrefs{$key}}) {
my $source = $tempdir.'/'.$key.'/'.$file;
- if ($cms eq 'webct4') {
+ if ($cms eq 'webctce4' || $cms eq 'webctvista4') {
$source = $tempdir.'/'.$file;
}
my $filename = '';
@@ -384,12 +428,12 @@ sub copy_resources {
}
$file =~ s-\\-/-g;
my $copyfile = $file;
- if ($cms eq 'webct4') {
+ if ($cms eq 'webctce4' || $cms eq 'webctvista4') {
if ($file =~ m-/my_files/(.+)$-) {
$copyfile = $1;
}
}
- unless (($cms eq 'webct4') && ($copyfile =~ m/questionDB\.xml$/ || $copyfile =~ m/quiz_QIZ_\d+\.xml$/ || $copyfile =~ m/properties_QIZ_\d+\.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;
my $fileresult;
if (-e $source) {
@@ -427,7 +471,7 @@ sub copy_resources {
} elsif ($cms eq 'bb5' || $cms eq 'bb6') {
rename("$tempdir/$key/$file","$destdir/resfiles/$key/$file");
}
- } elsif ($cms eq 'webct4') {
+ } elsif ($cms eq 'webctce4') {
if ($file =~ m-/my_files/(.+)$-) {
my $copyfile = $1;
if ($copyfile =~ m-^[^/]+/[^/]+-) {
@@ -461,6 +505,8 @@ sub process_resinfo {
my $dbparse = 0;
my $announce_handling = 'include';
my $longcrs = '';
+ my %allassessments = ();
+ my %allquestions = ();
my %qzdbsettings = ();
my %catinfo = ();
if ($crs =~ m/^(\d)(\d)(\d)/) {
@@ -511,10 +557,10 @@ sub process_resinfo {
}
} elsif ($$resources{$key}{type} eq "resource/x-bb-staffinfo") {
%{$$resinfo{$key}} = ();
- &process_staff($key,$docroot,$dirname,$destdir,\%{$$resinfo{$key}},$resrcfiles);
+ &process_staff($key,$docroot,$destdir,\%{$$resinfo{$key}},$resrcfiles);
} elsif ($$resources{$key}{type} eq "resource/x-bb-externallink") {
%{$$resinfo{$key}} = ();
- &process_link($key,$docroot,$dirname,$destdir,\%{$$resinfo{$key}},$resrcfiles);
+ &process_link($key,$docroot,$destdir,\%{$$resinfo{$key}},$resrcfiles);
} elsif ($$resources{$key}{type} eq "resource/x-bb-discussionboard") {
%{$$resinfo{$key}} = ();
unless ($db_handling eq 'ignore') {
@@ -526,15 +572,15 @@ sub process_resinfo {
}
} elsif ($$resources{$key}{type} =~/assessment\/x\-bb\-(qti\-)?pool/) {
%{$$resinfo{$key}} = ();
- &process_assessment($cms,$context,$key,$docroot,'pool',$dirname,$destdir,\%{$$resinfo{$key}},$total,$udom,$uname,$pagesfiles,$sequencesfiles,$randompicks,\$dbparse,$resources,$items,\%catinfo,\%qzdbsettings,$hrefs);
+ &process_assessment($cms,$context,$key,$docroot,'pool',$dirname,$destdir,\%{$$resinfo{$key}},$total,$udom,$uname,$pagesfiles,$sequencesfiles,$randompicks,\$dbparse,$resources,$items,\%catinfo,\%qzdbsettings,$hrefs,\%allquestions);
push @{$pools}, $key;
} elsif ($$resources{$key}{type} =~ /assessment\/x\-bb\-(qti\-)?quiz/) {
%{$$resinfo{$key}} = ();
- &process_assessment($cms,$context,$key,$docroot,'quiz',$dirname,$destdir,\%{$$resinfo{$key}},$total,$udom,$uname,$pagesfiles,$sequencesfiles,$randompicks,\$dbparse,$resources,$items,\%catinfo,\%qzdbsettings,$hrefs);
+ &process_assessment($cms,$context,$key,$docroot,'quiz',$dirname,$destdir,\%{$$resinfo{$key}},$total,$udom,$uname,$pagesfiles,$sequencesfiles,$randompicks,\$dbparse,$resources,$items,\%catinfo,\%qzdbsettings,$hrefs,\%allquestions);
push @{$quizzes}, $key;
} elsif ($$resources{$key}{type} =~ /assessment\/x\-bb\-(qti\-)?survey/) {
%{$$resinfo{$key}} = ();
- &process_assessment($cms,$context,$key,$docroot,'survey',$dirname,$destdir,\%{$$resinfo{$key}},$total,$udom,$uname,$pagesfiles,$sequencesfiles,$randompicks,\$dbparse,$resources,$items,\%catinfo,\%qzdbsettings,$hrefs);
+ &process_assessment($cms,$context,$key,$docroot,'survey',$dirname,$destdir,\%{$$resinfo{$key}},$total,$udom,$uname,$pagesfiles,$sequencesfiles,$randompicks,\$dbparse,$resources,$items,\%catinfo,\%qzdbsettings,$hrefs,\%allquestions);
push @{$surveys}, $key;
} elsif ($$resources{$key}{type} eq "assessment/x-bb-group") {
%{$$resinfo{$key}} = ();
@@ -569,17 +615,58 @@ sub process_resinfo {
if (@{$pools}) {
$$items{'Top'}{'contentscount'} ++;
}
- } elsif ($cms eq 'webct4') {
+ } elsif ($cms eq 'webctce4') {
foreach my $key (sort keys %{$resources}) {
if (grep/^$key$/,@{$targets}) {
if ($$resources{$key}{type} eq "webcontent") {
%{$$resinfo{$key}} = ();
&webct4_content($key,$docroot,$destdir,\%{$$resinfo{$key}},$udom,$uname,$$resources{$key}{type},$$items{$$resources{$key}{revitm}}{title},$resrcfiles);
} 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);
+ &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') {
+ foreach my $key (sort keys %{$resources}) {
+ if (grep/^$key$/,@{$targets}) {
+ %{$$resinfo{$key}} = ();
+ if ($$resources{$key}{type} eq 'webct.question') {
+ $allquestions{$key} = 1;
+ } elsif ($$resources{$key}{type} eq 'webct.assessment') {
+ $allassessments{$key} = 1;
}
}
}
+ if (keys(%allassessments) > 0) {
+ foreach my $key (sort(keys(%allassessments))) {
+ &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 (keys(%allquestions) > 0) {
+ my %catinfo = ();
+ my @allids = ();
+ my @allquestids = ();
+ my %allanswers = ();
+ my %allchoices = ();
+ my $containerdir;
+ my $newdir;
+ my $cid;
+ my $randompickflag = 0;
+ if ($context eq 'DOCS') {
+ $cid = $env{'request.course.id'};
+ }
+ my $destresdir = $destdir;
+ if ($context eq 'CSTR') {
+ $destresdir =~ s|/home/$uname/public_html/|/res/$udom/$uname/|;
+ } elsif ($context eq 'DOCS') {
+ $destresdir =~ s|^/home/httpd/html/userfiles|/uploaded|;
+ }
+ foreach my $res (sort(keys(%allquestions))) {
+ my $parent = $allquestions{$res};
+ &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,$crs,\%qzdbsettings);
+ &write_webct4_questions($cms,\@allquestids,$context,\%qzdbsettings,$dirname,\%allanswers,\%allchoices,$total,$cid,$cdom,$crs,$destdir,\%catinfo);
+ }
}
$$total{'board'} = $board_count;
@@ -649,7 +736,7 @@ sub build_structure {
my $resnum = $$items{$key}{resnum};
my $type = $$resources{$resnum}{type};
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 'webct4' && $contentscount > 0)) {
+ 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)) {
unless (($cms eq 'bb5') && $key eq 'Top') {
$seqtext{$key} = "|;
- if (!-e "$destdir/problems") {
- mkdir("$destdir/problems",0755);
- }
- if (!-e "$destdir/problems/$seqname") {
- mkdir("$destdir/problems/$seqname",0755);
- }
- $newdir = "$destdir/problems/$seqname";
- my $dbcontainerdir;
- &build_problem_container($cms,$seqname,$destdir,'database',$seqname,$total,$sequencesfiles,$pagesfiles,$randompickflag,$context,\@{$$catinfo{$category}{contents}},$udom,$uname,$dirname,\$dbcontainerdir,$cid,$cdom,$cnum,$catinfo,$qzdbsettings);
- }
- close($fh);
- &write_webct4_questions(\@alldbquestids,$context,$qzdbsettings,$dirname,\%alldbanswers,\%alldbchoices,$total,$cid,$cdom,$cnum,$destdir,$catinfo);
+ &build_category_sequences($destdir,$catinfo,$sequencesfiles,$pagesfiles,$destresdir,$newdir,$cms,$total,$randompickflag,$context,$udom,$uname,$dirname,$cid,$cdom,$cnum,$qzdbsettings);
+ &write_webct4_questions($cms,\@alldbquestids,$context,$qzdbsettings,$dirname,\%alldbanswers,\%alldbchoices,$total,$cid,$cdom,$cnum,$destdir,$catinfo);
$$dbparse = 1;
}
&parse_webct4_assessment($res,$docroot,$$resources{$res}{file},$container,\@allids);
@@ -2601,9 +3121,23 @@ sub process_assessment {
$randompickflag = 1;
}
}
+ } elsif ($cms eq 'webctvista4') {
+ unless($$dbparse) {
+ foreach my $res (sort keys %{$allquestions}) {
+ my $parent = $$allquestions{$res};
+ &parse_webctvista4_question($res,$docroot,$resources,$hrefs,$settings,\@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);
+ $$dbparse = 1;
+ }
+ &parse_webctvista4_assessment($res,$docroot,$hrefs,\@allids,\%qzparams);
+ if ($qzparams{$res}{numpick} < @allids) {
+ $$randompicks{$$resources{$res}{revitm}} = $qzparams{$res}{numpick};
+ $randompickflag = 1;
+ }
}
my $dirtitle;
- unless ($cms eq 'webct4') {
+ unless ($cms eq 'webctce4') {
$dirtitle = $$settings{'title'};
$dirtitle =~ s/\W//g;
$dirtitle .= '_'.$res;
@@ -2616,7 +3150,7 @@ sub process_assessment {
$newdir = "$destdir/problems/$dirtitle";
}
- if ($cms eq 'webct4') {
+ 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);
} else {
&build_problem_container($cms,$dirtitle,$destdir,$container,$res,$total,$sequencesfiles,$pagesfiles,$randompickflag,$context,\@allids,$udom,$uname,$dirname,\$containerdir,$cid,$cdom,$cnum,$catinfo,$settings);
@@ -2625,9 +3159,62 @@ sub process_assessment {
&write_bb5_questions(\@allids,$containerdir,$context,$settings,$dirname,$destdir,$res,\%allanswers,\%allchoices,$total,$newdir,$cid,$cdom,$cnum,$docroot);
} elsif ($cms eq 'bb6') {
&write_bb6_questions(\@allids,$containerdir,$context,$settings,$dirname,$destdir,$res,$total,$newdir,$cid,$cdom,$cnum,$docroot);
+ } elsif ($cms eq 'webctvista4') {
+ &write_webct4_questions($cms,\@allquestids,$context,$settings,$dirname,\%allanswers,\%allchoices,$total,$cid,$cdom,$cnum,$destdir,$catinfo);
}
}
+sub build_category_sequences {
+ my ($destdir,$catinfo,$sequencesfiles,$pagesfiles,$destresdir,$newdir,$cms,$total,$randompickflag,$context,$udom,$uname,$dirname,$cid,$cdom,$cnum,$qzdbsettings) = @_;
+ if (!-e "$destdir/sequences") {
+ mkdir("$destdir/sequences",0755);
+ }
+ my $numcats = scalar(keys %{$catinfo});
+ my $curr_id = 0;
+ my $next_id = 1;
+ my $fh;
+ open($fh,">$destdir/sequences/question_database.sequence");
+ push @{$sequencesfiles},'question_database.sequence';
+ foreach my $category (sort keys %{$catinfo}) {
+ my $seqname = $$catinfo{$category}{title}.'_'.$category;
+ $seqname =~ s/\s/_/g;
+ $seqname =~ s/\W//g;
+ push(@{$sequencesfiles},$seqname.'.sequence');
+ my $catsrc = "$destresdir/sequences/$seqname.sequence";
+ if ($curr_id == 0) {
+ print $fh qq|
|;
+ $image = qq|
|;
} else {
- $imglink = qq|
Link to file
|;
+ $imglink = qq|
Link to file
|;
}
}
if ( defined($$settings{$id}{url}) ) {
@@ -2819,9 +3412,9 @@ sub write_bb5_questions {
my ($ans_image,$ans_link);
if ( defined($$settings{$id}{$$allanswers{$id}[$k]}{image}) ) {
if ( $$settings{$id}{$$allanswers{$id}[$k]}{style} eq 'embed' ) {
- $ans_image .= qq|
|;
+ $ans_image .= qq|
|;
} else {
- $ans_link .= qq|
Link to file
|;
+ $ans_link .= qq|
Link to file
|;
}
}
$output .= $ans_image.$ans_link.'
#
#g;
- $$settings{$id}{text} =~ s#
$$settings{$id}{text}
$questionimage$$settings{$id}{text}
$questionimage'.$$settings{$id}{text}.'
'.$questionimage; } - if ($$settings{$id}{class} eq 'multiplechoice') { + if (($$settings{$id}{class} eq 'multiplechoice') || + ($$settings{$id}{class} eq 'combination')) { foreach my $list (@{$$settings{$id}{lists}}) { my $numfoils = @{$$allanswers{$id}{$list}}; if ($$settings{$id}{$list}{rcardinality} eq 'Single') { @@ -3374,59 +4037,69 @@ sub write_webct4_questions { } else { $resourcedata{$symb.'options'} = "('".join("','",@allmatch)."')"; } - } elsif ($$settings{$id}{class} eq 'string') { + } elsif (($$settings{$id}{class} eq 'string') || + ($$settings{$id}{class} eq 'shortanswer')) { my $labelnum = 0; - foreach my $str_id (@{$$settings{$id}{str}}) { - foreach my $label (@{$$settings{$id}{$str_id}{labels}}) { - $labelnum ++; - my $numerical = 1; - if ($context eq 'DOCS') { - $numerical = 0; - } else { - for (my $i=0; $i<@{$$settings{$id}{strings}{$label}}; $i++) { - $$settings{$id}{strings}{$label}[$i] =~ s/^\s+//; - $$settings{$id}{strings}{$label}[$i] =~ s/\s+$//; - if ($$settings{$id}{strings}{$label}[$i] =~ m/([^-\d\.]|\.\.)/) { - $numerical = 0; - } + my @str_labels = (); + if ($cms eq 'webct4ce') { + foreach my $str_id (@{$$settings{$id}{str}}) { + foreach my $label (@{$$settings{$id}{$str_id}{labels}}) { + push(@str_labels,$label); + } + } + } elsif ($cms eq 'webctvista4') { + @str_labels = @{$$settings{$id}{str}}; + } + foreach my $label (@str_labels) { + $labelnum ++; + my $numerical = 1; + if ($context eq 'DOCS') { + $numerical = 0; + } else { + for (my $i=0; $i<@{$$settings{$id}{strings}{$label}}; $i++) { + $$settings{$id}{strings}{$label}[$i] =~ s/^\s+//; + $$settings{$id}{strings}{$label}[$i] =~ s/\s+$//; + if ($$settings{$id}{strings}{$label}[$i] =~ m/([^\-\d\.]|\.\.)/) { + $numerical = 0; } } - if ($numerical) { - my $numans; - my $tol; - if (@{$$settings{$id}{strings}{$label}} == 1) { - $tol = '5%'; - $numans = $$settings{$id}{strings}{$label}[0]; - } else { - my $min = $$settings{$id}{strings}{$label}[0]; - my $max = $$settings{$id}{strings}{$label}[0]; - for (my $k=1; $k<@{$$settings{$id}{strings}{$label}}; $k++) { - if ($$settings{$id}{strings}{$label}[$k] <= $min) { - $min = $$settings{$id}{strings}{$label}[$k]; - } - if ($$settings{$id}{strings}{$label}[$k] >= $max) { - $max = $$settings{$id}{strings}{$label}[$k]; - } + } + if ($numerical) { + my $numans; + my $tol; + if (@{$$settings{$id}{strings}{$label}} == 1) { + $tol = '5%'; + $numans = $$settings{$id}{strings}{$label}[0]; + } else { + my $min = $$settings{$id}{strings}{$label}[0]; + my $max = $$settings{$id}{strings}{$label}[0]; + for (my $k=1; $k<@{$$settings{$id}{strings}{$label}}; $k++) { + if ($$settings{$id}{strings}{$label}[$k] <= $min) { + $min = $$settings{$id}{strings}{$label}[$k]; } - $numans = ($max + $min)/2; - if ($numans == 0) { - my $dev = abs($max - $numans); - if (abs($numans - $min) > $dev) { - $dev = abs($numans - $min); - } - $tol = $dev; - } else { - $tol = 100*($max - $min)/($numans*2); - $tol .= '%'; + if ($$settings{$id}{strings}{$label}[$k] >= $max) { + $max = $$settings{$id}{strings}{$label}[$k]; } } - if ($context eq 'CSTR') { - if (@{$$settings{$id}{str}} > 1) { - $output .= qq| -