--- loncom/imspackages/imsprocessor.pm 2006/04/04 17:42:28 1.36 +++ loncom/imspackages/imsprocessor.pm 2006/04/05 17:33:51 1.37 @@ -2267,6 +2267,7 @@ sub parse_webctvista4_question { my $currindex; my %varinfo = (); my $formula; + my $jumbnum = 0; my $p = HTML::Parser->new ( xml_mode => 1, @@ -2332,6 +2333,8 @@ sub parse_webctvista4_question { %{$$settings{$id}{$list}} = (); @{$$allanswers{$id}{$list}} = (); @{$$settings{$id}{$list}{correctanswer}} = (); + @{$$settings{$id}{$list}{jumbledtext}} = (); + @{$$settings{$id}{$list}{jumbledtype}} = (); @{$$settings{$id}{$list}{jumbled}} = (); $$settings{$id}{$list}{rcardinality} = $attr->{rcardinality}; } @@ -2350,6 +2353,13 @@ sub parse_webctvista4_question { $currtexttype = lc($attr->{texttype}); $$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 $currindex = $attr->{index}; } @@ -2542,11 +2552,13 @@ sub parse_webctvista4_question { $$settings{$id}{$list}{$answer_id}{text} = $text; } 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") { $$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") { $$settings{$id}{text} .= $text; @@ -2582,8 +2594,9 @@ sub parse_webctvista4_question { } } } + 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 ($setvar{varname} eq "SCORE") { # Multiple Choice, String or Match @@ -3749,6 +3762,62 @@ sub write_webct4_questions { $resourcedata{$symb.'hiddenparts'} = '!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; 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| + +$$settings{$id}{$list}{jumbledtext}[$k] +|; + } elsif ($$settings{$id}{$list}{jumbledtype}[$k] eq 'Yes') { + $jnum ++; + my $jumble_item = $$settings{$id}{$list}{jumbled}[$i][$jnum]; + $output .= qq| + + + + + +|; + } + } + } + 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 functionality is available. + $output .= '(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 .= ''; + } + } + } } else { if ($context eq 'CSTR') { $output .= qq|

$$settings{$id}{text}

$questionimage\n|;