--- loncom/homework/caparesponse/caparesponse.pm 2007/01/25 21:03:45 1.198.2.3 +++ loncom/homework/caparesponse/caparesponse.pm 2006/12/11 17:37:44 1.199 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # caparesponse definition # -# $Id: caparesponse.pm,v 1.198.2.3 2007/01/25 21:03:45 albertel Exp $ +# $Id: caparesponse.pm,v 1.199 2006/12/11 17:37:44 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -40,11 +40,6 @@ BEGIN { } my %answer; -my @answers; -sub get_answer { return %answer; }; -sub push_answer{ push(@answers,dclone(\%answer)); undef(%answer) } -sub pop_answer { %answer = %{pop(@answers)}; }; - my $cur_name; my $tag_internal_answer_name = 'INTERNAL'; @@ -329,11 +324,11 @@ sub check_submission { } if ($tag eq 'formularesponse') { -# if ($$args_ref{'samples'}) { + if ($$args_ref{'samples'}) { $$args_ref{'type'}='fml'; -# } else { -# $$args_ref{'type'}='math'; -# } + } else { + $$args_ref{'type'}='math'; + } } elsif ($tag eq 'numericalresponse') { $$args_ref{'type'}='float'; } @@ -405,7 +400,6 @@ sub end_numericalresponse { &Apache::lonxml::debug($$parstack[-1] . "\n
"); if ( &Apache::response::submitted('scantron')) { - &add_in_tag_answer($parstack,$safeeval); my ($values,$display)=&make_numerical_bubbles($partid,$id, $target,$parstack,$safeeval); $response=$values->[$response]; @@ -530,11 +524,6 @@ sub end_numericalresponse { } foreach my $name (sort(keys(%answer))) { my @answers = @{ $answer{$name}{'answers'} }; - if ($target eq 'analyze') { - foreach my $info ('answer','ans_high','ans_low','format') { - $Apache::lonhomework::analyze{"$part_id.$info"}{$name}=[]; - } - } my ($sigline,$tolline); if ($name ne $tag_internal_answer_name || scalar(keys(%answer)) > 1) { @@ -554,13 +543,13 @@ sub end_numericalresponse { } else { @vector = ($ans); } - my @all_answer_info; - foreach my $element (@vector) { - my ($high,$low); - if ($Apache::inputtags::params{'tol'}) { - ($high,$low)=&get_tolrange($element,$Apache::inputtags::params{'tol'}); - } - if ($target eq 'answer') { + if ($target eq 'answer') { + my @all_answer_info; + foreach my $element (@vector) { + my ($high,$low); + if ($Apache::inputtags::params{'tol'}) { + ($high,$low)=&get_tolrange($element,$Apache::inputtags::params{'tol'}); + } if ($fmt && $tag eq 'numericalresponse') { $fmt=~s/e/E/g; if ($unit=~/\$/) { $fmt="\$".$fmt; $unit=~s/\$//g; } @@ -584,20 +573,21 @@ sub end_numericalresponse { } } push(@all_answer_info,$element); - - } elsif ($target eq 'analyze') { - push (@{ $Apache::lonhomework::analyze{"$part_id.answer"}{$name}[$i] }, $element); - if ($high) { - push (@{ $Apache::lonhomework::analyze{"$part_id.ans_high"}{$name}[$i] }, $high); - push (@{ $Apache::lonhomework::analyze{"$part_id.ans_low"}{$name}[$i] }, $low); - } - if ($fmt) { - push (@{ $Apache::lonhomework::analyze{"$part_id.format"}{$name}[$i] }, $fmt); - } } - } - if ($target eq 'answer') { $result.= &Apache::response::answer_part($tag,join(', ',@all_answer_info)); + } elsif ($target eq 'analyze') { + my ($high,$low); + if ($Apache::inputtags::params{'tol'}) { + ($high,$low)=&get_tolrange($ans,$Apache::inputtags::params{'tol'}); + } + push (@{ $Apache::lonhomework::analyze{"$part_id.answer"} }, $ans); + if ($high) { + push (@{ $Apache::lonhomework::analyze{"$part_id.ans_high"} }, $high); + push (@{ $Apache::lonhomework::analyze{"$part_id.ans_low"} }, $low); + } + if ($fmt) { + push (@{ $Apache::lonhomework::analyze{"$part_id.format"} }, $fmt); + } } } @@ -782,18 +772,7 @@ sub make_numerical_bubbles { &Apache::response::get_response_param($part.'_'.$id,'numbubbles',8); my ($format)=&Apache::lonxml::get_param_var('format',$parstack,$safeeval); - my $name = (exists($answer{$tag_internal_answer_name}) - ? $tag_internal_answer_name - : (sort(keys(%answer)))[0]); - - if ( scalar(@{$answer{$name}{'answers'}}) > 1) { - &Apache::lonxml::error("Only answers with 1 component are supported in exam mode"); - } - if (scalar(@{$answer{$name}{'answers'}[0]}) > 1) { - &Apache::lonxml::error("Vector answers are unsupported in exam mode."); - } - - my $answer = $answer{$name}{'answers'}[0][0]; + my ($answer)=&Apache::lonxml::get_param_var('answer',$parstack,$safeeval); my (@incorrect)=&Apache::lonxml::get_param_var('incorrect',$parstack, $safeeval); if ($#incorrect eq 0) { @incorrect=(split(/,/,$incorrect[0])); } @@ -1026,7 +1005,6 @@ sub end_stringresponse { } } } elsif ($target eq 'answer' || $target eq 'analyze') { - &add_in_tag_answer($parstack,$safeeval); if ($target eq 'analyze') { push (@{ $Apache::lonhomework::analyze{"parts"} },"$part.$id"); $Apache::lonhomework::analyze{"$part.$id.type"} = 'stringresponse'; @@ -1037,25 +1015,18 @@ sub end_stringresponse { if ($target eq 'answer') { $result.=&Apache::response::answer_header('stringresponse'); } - foreach my $name (keys(%answer)) { - my @answers = @{ $answer{$name}{'answers'} }; - for (my $i=0;$i<=$#answers;$i++) { - my $answer_part = $answers[$i]; - foreach my $element (@{$answer_part}) { - if ($target eq 'answer') { - $result.=&Apache::response::answer_part('stringresponse', - $element); - } elsif ($target eq 'analyze') { - push (@{ $Apache::lonhomework::analyze{"$part.$id.answer"}{$name}[$i] }, - $element); - } - } - if ($target eq 'answer' && $type eq 're') { +# foreach my $ans (@answers) { + if ($target eq 'answer') { + $result.=&Apache::response::answer_part('stringresponse',$answer); + if ($type eq 're') { $result.=&Apache::response::answer_part('stringresponse', $answerdisplay); } + } elsif ($target eq 'analyze') { + push (@{ $Apache::lonhomework::analyze{"$part.$id.answer"} }, + $answer); } - } +# } my $string='Case Insensitive'; if ($type eq 'mc') { $string='Multiple Choice';