--- loncom/imspackages/imsprocessor.pm 2006/04/05 23:36:52 1.39 +++ loncom/imspackages/imsprocessor.pm 2006/04/15 16:44:56 1.40 @@ -2178,6 +2178,10 @@ sub parse_webctvista4_assessment { my ($tagname, $attr) = @_; push @state, $tagname; my @seq = (); + if ("@state" eq "questestinterop assessment") { + $$qzparams{$res}{id} = $attr->{'ident'}; + $$qzparams{$res}{title} = $attr->{'title'}; + } if ("@state" eq "questestinterop assessment section itemref") { $id = $attr->{linkrefid}; push(@{$allids},$id); @@ -2186,7 +2190,6 @@ sub parse_webctvista4_assessment { if ("@state" eq "questestinterop assessment section selection_ordering order") { $$qzparams{$res}{order_type} = $attr->{order_type}; } - }, "tagname, attr"], text_h => [sub { @@ -2414,7 +2417,7 @@ sub parse_webctvista4_question { %{$$settings{$id}{$str_id}{$label}} = (); $$settings{$id}{$str_id}{$label}{fibtype} = $fibtype; 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 @@ -2448,6 +2451,7 @@ sub parse_webctvista4_question { } elsif (($$settings{$id}{class} eq 'string') || ($$settings{$id}{class} eq 'shortanswer')) { $label = $attr->{respident}; + $$settings{$id}{$label}{case} = $attr->{'case'}; } elsif ($$settings{$id}{class} eq 'match') { $grp = $attr->{respident}; } @@ -3140,21 +3144,22 @@ sub process_assessment { 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); + &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); $$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) { $$randompicks{$$resources{$res}{revitm}} = $qzparams{$res}{numpick}; $randompickflag = 1; } } my $dirtitle; - unless ($cms eq 'webctce4') { + unless ($cms eq 'webctce4' || $cms eq 'webctvista4') { $dirtitle = $$settings{'title'}; - $dirtitle =~ s/\W//g; + $dirtitle =~ s/\s+/_/g; + $dirtitle =~ s/:/_/g; $dirtitle .= '_'.$res; if (!-e "$destdir/problems") { mkdir("$destdir/problems",0755); @@ -3168,14 +3173,14 @@ sub process_assessment { 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); + &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') { &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); + &write_webct4_questions($cms,\@allquestids,$context,$qzdbsettings,$dirname,\%allanswers,\%allchoices,$total,$cid,$cdom,$cnum,$destdir,$catinfo,$dirtitle); } } @@ -3191,9 +3196,14 @@ sub build_category_sequences { 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; + my $seqname; + if ($cms eq 'webct4ce') { + $seqname = $$catinfo{$category}{title}.'_'.$category; + } else { + $seqname = $$catinfo{$category}{title}; + } + $seqname =~ s/\s+/_/g; + $seqname =~ s/:/_/g; push(@{$sequencesfiles},$seqname.'.sequence'); my $catsrc = "$destresdir/sequences/$seqname.sequence"; if ($curr_id == 0) { @@ -3231,28 +3241,35 @@ sub build_category_sequences { } 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 $pagedir = "$destdir/pages"; my $curr_id = 0; my $next_id = 1; 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') { - $$containerdir = $seqdir.'/'.$res.'.sequence'; + $$containerdir = $seqdir.'/'.$mapname.'.sequence'; if (!-e "$seqdir") { mkdir("$seqdir",0770); } open($fh,">$$containerdir"); $$total{seq} ++; - push @{$sequencesfiles},$res.'.sequence'; + push @{$sequencesfiles},$mapname.'.sequence'; } else { - $$containerdir = $pagedir.'/'.$res.'.page'; + $$containerdir = $pagedir.'/'.$mapname.'.page'; if (!-e "$destdir/pages") { mkdir("$destdir/pages",0770); } open($fh,">$$containerdir"); $$total{page} ++; - push @{$pagesfiles},$res.'.page'; + push @{$pagesfiles},$mapname.'.page'; } print $fh qq| |; @@ -3265,16 +3282,26 @@ sub build_problem_container { } else { $probtitle{$id} = $$settings{title}; } - $probtitle{$id} =~ s/\s/_/g; - $probtitle{$id} =~ s/\W//g; + $probtitle{$id} =~ s/\s+/_/g; + $probtitle{$id} =~ s/:/_/g; $probtitle{$id} .= '_'.$id; } - if ($cms eq 'webctce4' && $container ne 'database') { + if (($cms eq 'webct4ce' && $container ne 'database') || + ($cms eq 'webctvista4')) { + my $probdir; my $catid = $$settings{$$allids[0]}{category}; - my $probdir = $$catinfo{$catid}{title}.'_'.$catid; - $probdir =~ s/\s/_/g; - $probdir =~ s/\W//g; - $probsrc = "$dirname/problems/$probdir/$probtitle{$$allids[0]}.problem"; + if ($catid) { + if ($cms eq 'webct4ce') { + $probdir = $$catinfo{$catid}{title}.'_'.$catid; + } 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 { $probsrc="$dirname/problems/$dirtitle/$probtitle{$$allids[0]}.problem"; } @@ -3293,12 +3320,22 @@ sub build_problem_container { $curr_id = $j; $next_id = $curr_id + 1; 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 $probdir = $$catinfo{$catid}{title}.'_'.$catid; - $probdir =~ s/\s/_/g; - $probdir =~ s/\W//g; - $probsrc = "$dirname/problems/$probdir/$probtitle{$$allids[$j]}.problem"; + if ($catid) { + if ($cms eq 'webct4ce') { + $probdir = $$catinfo{$catid}{title}.'_'.$catid; + } 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 { $probsrc = "$dirname/problems/$dirtitle/$probtitle{$$allids[$j]}.problem"; } @@ -3696,7 +3733,7 @@ sub write_bb5_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; foreach my $id (@{$alldbquestids}) { $qnum ++; @@ -4265,10 +4302,19 @@ $$settings{$id}{$list}{jumbledtext}[$k] } } if ($context eq 'CSTR') { + my $probdir; my $catid = $$settings{$id}{category}; - my $probdir = $$catinfo{$catid}{title}.'_'.$catid; - $probdir =~ s/\s/_/g; - $probdir =~ s/\W//g; + if ($catid) { + if ($cms eq 'webct4ce') { + $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") { mkdir("$destdir/problems/$probdir",0755); } @@ -4276,8 +4322,8 @@ $$settings{$id}{$list}{jumbledtext}[$k] |; my $title = $$settings{$id}{title}; $title =~ s/\s/_/g; - $title =~ s/\W//g; - $title .= '_'.$id; + $title =~ s/:/_/g; + $title .= '_'.$id; open(PROB,">$destdir/problems/$probdir/$title.problem"); print PROB $output; close PROB;