version 1.36, 2006/04/04 17:42:28
|
version 1.41, 2007/09/30 13:20:08
|
Line 2178 sub parse_webctvista4_assessment {
|
Line 2178 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 2190 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 2267 sub parse_webctvista4_question {
|
Line 2270 sub parse_webctvista4_question {
|
my $currindex; |
my $currindex; |
my %varinfo = (); |
my %varinfo = (); |
my $formula; |
my $formula; |
|
my $jumbnum = 0; |
my $p = HTML::Parser->new |
my $p = HTML::Parser->new |
( |
( |
xml_mode => 1, |
xml_mode => 1, |
Line 2332 sub parse_webctvista4_question {
|
Line 2336 sub parse_webctvista4_question {
|
%{$$settings{$id}{$list}} = (); |
%{$$settings{$id}{$list}} = (); |
@{$$allanswers{$id}{$list}} = (); |
@{$$allanswers{$id}{$list}} = (); |
@{$$settings{$id}{$list}{correctanswer}} = (); |
@{$$settings{$id}{$list}{correctanswer}} = (); |
|
@{$$settings{$id}{$list}{jumbledtext}} = (); |
|
@{$$settings{$id}{$list}{jumbledtype}} = (); |
@{$$settings{$id}{$list}{jumbled}} = (); |
@{$$settings{$id}{$list}{jumbled}} = (); |
$$settings{$id}{$list}{rcardinality} = $attr->{rcardinality}; |
$$settings{$id}{$list}{rcardinality} = $attr->{rcardinality}; |
} |
} |
Line 2350 sub parse_webctvista4_question {
|
Line 2356 sub parse_webctvista4_question {
|
$currtexttype = lc($attr->{texttype}); |
$currtexttype = lc($attr->{texttype}); |
$$settings{$id}{$list}{$jumble_item}{texttype} = $currtexttype; |
$$settings{$id}{$list}{$jumble_item}{texttype} = $currtexttype; |
} |
} |
|
if ("@state" eq "questestinterop item resprocessing respcondition") { # Jumbled |
|
if ($$settings{$id}{class} eq 'jumbled') { |
|
$jumbnum ++; |
|
@{$$settings{$id}{$list}{jumbled}[$jumbnum]} = (); |
|
} |
|
} |
|
|
if ("@state" eq "questestinterop item resprocessing respcondition conditionvar and varequal") { # Jumbled |
if ("@state" eq "questestinterop item resprocessing respcondition conditionvar and varequal") { # Jumbled |
$currindex = $attr->{index}; |
$currindex = $attr->{index}; |
} |
} |
if ("@state" eq "questestinterop item presentation flow response_lid render_choice") { |
if ("@state" eq "questestinterop item presentation flow response_lid render_choice") { |
$$settings{$id}{$list}{randomize} = $attr->{shuffle}; |
$$settings{$id}{$list}{randomize} = $attr->{shuffle}; |
} |
} |
|
# Multiple Choice, True/False and Combination |
if ("@state" eq "questestinterop item presentation flow response_lid render_choice flow_label response_label") { |
if ("@state" eq "questestinterop item presentation flow response_lid render_choice flow_label response_label") { |
$answer_id = $attr->{ident}; |
$answer_id = $attr->{ident}; |
push(@{$$allanswers{$id}{$list}},$answer_id); |
push(@{$$allanswers{$id}{$list}},$answer_id); |
Line 2403 sub parse_webctvista4_question {
|
Line 2417 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 2414 sub parse_webctvista4_question {
|
Line 2428 sub parse_webctvista4_question {
|
$grp = $attr->{ident}; |
$grp = $attr->{ident}; |
push(@{$$settings{$id}{grps}},$grp); |
push(@{$$settings{$id}{grps}},$grp); |
%{$$settings{$id}{$grp}} = (); |
%{$$settings{$id}{$grp}} = (); |
|
@{$$allanswers{$id}{$grp}} = (); |
@{$$settings{$id}{$grp}{correctanswer}} = (); |
@{$$settings{$id}{$grp}{correctanswer}} = (); |
$$settings{$id}{$grp}{rcardinality} = $attr->{rcardinality}; |
$$settings{$id}{$grp}{rcardinality} = $attr->{rcardinality}; |
} |
} |
Line 2421 sub parse_webctvista4_question {
|
Line 2436 sub parse_webctvista4_question {
|
$currtexttype = lc($attr->{texttype}); |
$currtexttype = lc($attr->{texttype}); |
$$settings{$id}{$grp}{texttype} = $currtexttype; |
$$settings{$id}{$grp}{texttype} = $currtexttype; |
} |
} |
if ("@state" eq "questestinterop item presentation flow flow response_grp render_choice response_label") { |
if ("@state" eq "questestinterop item presentation flow flow response_grp render_choice flow_label response_label") { |
$answer_id = $attr->{ident}; |
$answer_id = $attr->{ident}; |
push(@{$$allanswers{$id}{$grp}},$answer_id); |
push(@{$$allanswers{$id}{$grp}},$answer_id); |
%{$$settings{$id}{$grp}{$answer_id}} = (); |
%{$$settings{$id}{$grp}{$answer_id}} = (); |
Line 2436 sub parse_webctvista4_question {
|
Line 2451 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 2535 sub parse_webctvista4_question {
|
Line 2551 sub parse_webctvista4_question {
|
$$settings{$id}{$str_id}{$label}{$textlabel} = $text; |
$$settings{$id}{$str_id}{$label}{$textlabel} = $text; |
} |
} |
} |
} |
|
# Matching |
if ("@state" eq "questestinterop item presentation flow response_lid render_choice flow_label response_label material mattext") { |
if ("@state" eq "questestinterop 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; |
} |
} |
|
# Multiple choice, True/False, Combination |
if ("@state" eq "questestinterop item presentation flow response_lid render_choice flow_label response_label material mat_extension webct:localizable_mattext") { |
if ("@state" eq "questestinterop item presentation flow response_lid render_choice flow_label response_label material mat_extension webct:localizable_mattext") { |
$$settings{$id}{$list}{$answer_id}{text} = $text; |
$$settings{$id}{$list}{$answer_id}{text} = $text; |
} |
} |
if ("@state" eq "questestinterop item presentation flow response_lid render_extension ims_render_object material mattext") { |
if ("@state" eq "questestinterop item presentation flow response_lid render_extension ims_render_object material mattext") { |
$$settings{$id}{$list}{text} .= $text; |
push(@{$$settings{$id}{$list}{jumbledtext}},$text); |
|
push(@{$$settings{$id}{$list}{jumbledtype}},'No'); |
} |
} |
if ("@state" eq "questestinterop item presentation flow response_lid render_extension ims_render_object response_label material mattext") { |
if ("@state" eq "questestinterop item presentation flow response_lid render_extension ims_render_object response_label material mattext") { |
$$settings{$id}{$list}{$jumble_item}{text} = $text; |
$$settings{$id}{$list}{$jumble_item}{text} = $text; |
$$settings{$id}{$list}{text} .= $text; |
push(@{$$settings{$id}{$list}{jumbledtext}},$text); |
|
push(@{$$settings{$id}{$list}{jumbledtype}},'Yes'); |
} |
} |
if ("@state" eq "questestinterop item presentation flow material mattext") { |
if ("@state" eq "questestinterop item presentation flow material mattext") { |
$$settings{$id}{text} .= $text; |
$$settings{$id}{text} .= $text; |
Line 2559 sub parse_webctvista4_question {
|
Line 2579 sub parse_webctvista4_question {
|
} |
} |
} |
} |
} |
} |
|
# Matching |
|
if ("@state" eq "questestinterop item presentation flow flow response_grp material mattext") { |
|
$$settings{$id}{$grp}{text} = $text; |
|
unless ($text eq '') { |
|
push(@{$$allchoices{$id}},$grp); |
|
} |
|
} |
|
if ("@state" eq "questestinterop item presentation flow flow response_grp render_choice flow_label response_label material mattext") { |
|
$$settings{$id}{$grp}{$answer_id}{text} = $text; |
|
} |
|
# Numerical |
if ("@state" eq "questestinterop item resprocessing itemproc_extension unit_eval conditionvar varequal") { |
if ("@state" eq "questestinterop item resprocessing itemproc_extension unit_eval conditionvar varequal") { |
$$settings{$id}{$numid}{$unitid}{text} = $text; |
$$settings{$id}{$numid}{$unitid}{text} = $text; |
} |
} |
Line 2582 sub parse_webctvista4_question {
|
Line 2613 sub parse_webctvista4_question {
|
} |
} |
} |
} |
} |
} |
|
|
if ("@state" eq "questestinterop item resprocessing respcondition conditionvar and varequal") { # Jumbled |
if ("@state" eq "questestinterop item resprocessing respcondition conditionvar and varequal") { # Jumbled |
$$settings{$id}{$list}{jumbled}[$currindex] = $text; |
$$settings{$id}{$list}{jumbled}[$jumbnum][$currindex] = $text; |
} |
} |
if ("@state" eq "questestinterop item resprocessing respcondition setvar") { |
if ("@state" eq "questestinterop item resprocessing respcondition setvar") { |
if ($setvar{varname} eq "SCORE") { # Multiple Choice, String or Match |
if ($setvar{varname} eq "SCORE") { # Multiple Choice, String or Match |
Line 2802 sub parse_webct4_questionDB {
|
Line 2834 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 3021 sub parse_webct4_questionDB {
|
Line 3059 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); |
|
} |
|
} |
} |
} |
} |
} |
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 3112 sub process_assessment {
|
Line 3156 sub process_assessment {
|
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 3140 sub process_assessment {
|
Line 3185 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); |
&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 3163 sub build_category_sequences {
|
Line 3208 sub build_category_sequences {
|
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 3203 sub build_category_sequences {
|
Line 3253 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 "$destdir/pages") { |
mkdir("$destdir/pages",0770); |
mkdir("$destdir/pages",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 3237 sub build_problem_container {
|
Line 3294 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} .= '_'.$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 3265 sub build_problem_container {
|
Line 3332 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 3656 sub write_bb5_questions {
|
Line 3733 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 3668 sub write_bb5_questions {
|
Line 3745 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 $qnum = 0; |
my $qnum = 0; |
foreach my $id (@{$alldbquestids}) { |
foreach my $id (@{$alldbquestids}) { |
$qnum ++; |
$qnum ++; |
Line 3691 sub write_webct4_questions {
|
Line 3768 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 3717 sub write_webct4_questions {
|
Line 3794 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 3749 sub write_webct4_questions {
|
Line 3827 sub write_webct4_questions {
|
$resourcedata{$symb.'hiddenparts'} = '!essay'; |
$resourcedata{$symb.'hiddenparts'} = '!essay'; |
$resourcedata{$symb.'questiontype'} = 'essay'; |
$resourcedata{$symb.'questiontype'} = 'essay'; |
} |
} |
|
} elsif ($$settings{$id}{class} eq 'jumbled') { |
|
if ($context eq 'CSTR') { |
|
my %foiloptions = (); |
|
foreach my $list (@{$$settings{$id}{lists}}) { |
|
@{$foiloptions{$list}} = (); |
|
my $numalternates = @{$$settings{$id}{$list}{jumbled}} - 1; |
|
my $loopstop = 2; #Hard coded for now, so only one permutation of answers is correct; <or> functionality is needed to support the case where multiple permutations are correct. |
|
for (my $i=1; $i<$loopstop; $i++) { |
|
$foiloptions{$list}[$i] = '('; |
|
for (my $j=@{$$settings{$id}{$list}{jumbled}[$i]}-1; $j>0; $j--) { |
|
my $jumble_item = $$settings{$id}{$list}{jumbled}[$i][$j]; |
|
$foiloptions{$list}[$i] .= "'".$$settings{$id}{$list}{$jumble_item}{text}."',"; |
|
} |
|
$foiloptions{$list}[$i] =~ s/,$//; |
|
$foiloptions{$list}[$i] .= ')'; |
|
my $jnum = 0; |
|
for (my $k=0; $k<@{$$settings{$id}{$list}{jumbledtype}}; $k++) { |
|
if ($$settings{$id}{$list}{jumbledtype}[$k] eq 'No') { |
|
$output .= qq| |
|
<startouttext /> |
|
$$settings{$id}{$list}{jumbledtext}[$k] |
|
<endouttext />|; |
|
} elsif ($$settings{$id}{$list}{jumbledtype}[$k] eq 'Yes') { |
|
$jnum ++; |
|
my $jumble_item = $$settings{$id}{$list}{jumbled}[$i][$jnum]; |
|
$output .= qq| |
|
<optionresponse max="1" randomize="yes" TeXlayout="horizontal"> |
|
<foilgroup options="$foiloptions{$list}[$i]"> |
|
<foil location="random" value="$$settings{$id}{$list}{$jumble_item}{text}" name="$jumble_item"></foil> |
|
</foilgroup> |
|
</optionresponse> |
|
|; |
|
} |
|
} |
|
} |
|
if ($numalternates > 0) { # for now alternates are stored in an instructorcomment. In the future these alternates could be moved into the main response area once <or> functionality is available. |
|
$output .= '<instructorcomment>(Not shown to students) '."\n".'The following alternates were imported from the corresponding WebCT Vista 4 jumbled sentence question, but are not included in the LON-CAPA version, because this style of question does not currently support multiple correct solutions.'."\n"; |
|
for (my $i=2; $i<@{$$settings{$id}{$list}{jumbled}}; $i++) { |
|
my $altid = $i-1; |
|
my $jnum = 0; |
|
$output .= $altid.'. '; |
|
for (my $k=0; $k<@{$$settings{$id}{$list}{jumbledtype}}; $k++) { |
|
if ($$settings{$id}{$list}{jumbledtype}[$k] eq 'No') { |
|
$output .= "$$settings{$id}{$list}{jumbledtext}[$k]" ; |
|
} elsif ($$settings{$id}{$list}{jumbledtype}[$k] eq 'Yes') { |
|
$jnum ++; |
|
my $jumble_item = $$settings{$id}{$list}{jumbled}[$i][$jnum]; |
|
$output .= '['.$$settings{$id}{$list}{$jumble_item}{text}.']'; |
|
} |
|
} |
|
$output .= " \n"; |
|
} |
|
$output .= '</instructorcomment>'; |
|
} |
|
} |
|
} |
} else { |
} else { |
if ($context eq 'CSTR') { |
if ($context eq 'CSTR') { |
$output .= qq|<startouttext /><p>$$settings{$id}{text}</p>$questionimage<endouttext />\n|; |
$output .= qq|<startouttext /><p>$$settings{$id}{text}</p>$questionimage<endouttext />\n|; |
Line 3831 sub write_webct4_questions {
|
Line 3965 sub write_webct4_questions {
|
if ($$settings{$id}{$list}{$$allanswers{$id}{$list}[$k]}{texttype} eq 'text/html') { |
if ($$settings{$id}{$list}{$$allanswers{$id}{$list}[$k]}{texttype} eq 'text/html') { |
$$settings{$id}{$list}{$$allanswers{$id}{$list}[$k]}{text} = &HTML::Entities::decode($$settings{$id}{$list}{$$allanswers{$id}{$list}[$k]}{text}); |
$$settings{$id}{$list}{$$allanswers{$id}{$list}[$k]}{text} = &HTML::Entities::decode($$settings{$id}{$list}{$$allanswers{$id}{$list}[$k]}{text}); |
$$settings{$id}{$list}{$$allanswers{$id}{$list}[$k]}{text} = &Apache::loncleanup::htmlclean($$settings{$id}{$list}{$$allanswers{$id}{$list}[$k]}{text}); |
$$settings{$id}{$list}{$$allanswers{$id}{$list}[$k]}{text} = &Apache::loncleanup::htmlclean($$settings{$id}{$list}{$$allanswers{$id}{$list}[$k]}{text}); |
|
|
$$settings{$id}{$list}{$$allanswers{$id}{$list}[$k]}{text} =~ s#(<img src=")([^>]+)>#$1../../resfiles/$2 />#gi; |
$$settings{$id}{$list}{$$allanswers{$id}{$list}[$k]}{text} =~ s#(<img src=")([^>]+)>#$1../../resfiles/$2 />#gi; |
$$settings{$id}{$list}{$$allanswers{$id}{$list}[$k]}{text} =~ s#</?p>##g; |
$$settings{$id}{$list}{$$allanswers{$id}{$list}[$k]}{text} =~ s#</?p>##g; |
} |
} |
Line 3972 sub write_webct4_questions {
|
Line 4105 sub write_webct4_questions {
|
($$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 4132 sub write_webct4_questions {
|
Line 4265 sub write_webct4_questions {
|
} |
} |
$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 4182 sub write_webct4_questions {
|
Line 4315 sub write_webct4_questions {
|
} |
} |
} |
} |
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); |
} |
} |
Line 4193 sub write_webct4_questions {
|
Line 4335 sub write_webct4_questions {
|
|; |
|; |
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 .= '_'.$id; |
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 4593 sub write_bb6_questions {
|
Line 4735 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 { |