--- loncom/homework/caparesponse/caparesponse.pm 2003/11/20 22:06:39 1.122 +++ loncom/homework/caparesponse/caparesponse.pm 2003/12/11 23:39:54 1.125 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # caparesponse definition # -# $Id: caparesponse.pm,v 1.122 2003/11/20 22:06:39 albertel Exp $ +# $Id: caparesponse.pm,v 1.125 2003/12/11 23:39:54 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -95,13 +95,15 @@ sub end_numericalresponse { if (!$Apache::lonxml::default_homework_loaded) { &Apache::lonxml::default_homework_load($safeeval); } + my $tag; + if (scalar(@$tagstack)) { $tag=$$tagstack[-1]; } if ( $target eq 'grade' && defined($ENV{'form.submitted'})) { - &Apache::response::setup_params($$tagstack[-1]); + &Apache::response::setup_params($tag); $safeeval->share_from('capa',['&caparesponse_capa_check_answer']); my $partid = $Apache::inputtags::part; my $id = $Apache::inputtags::response['-1']; if ($Apache::lonhomework::type eq 'exam' && - $$tagstack[-1] eq 'formularesponse') { + $tag eq 'formularesponse') { $increment=&Apache::response::scored_response($partid,$id); } else { my $response = &Apache::response::getresponse(); @@ -128,18 +130,27 @@ sub end_numericalresponse { my $expression="&caparesponse_check_list('".$response."','". $$parstack[-1]; my $hideunit=&Apache::lonnet::EXT('resource.'.$partid.'_'.$id.'.turnoffunit'); + + foreach my $key (keys(%Apache::inputtags::params)) { + $expression.= ';my $'. #' + $key.'="'.$Apache::inputtags::params{$key}.'"'; + } + #no way to enter units, with radio buttons if ($Apache::lonhomework::type eq 'exam' || lc($hideunit) eq "yes") { $expression.=';my $unit=undef;'; } - foreach my $key (keys(%Apache::inputtags::params)) { - $expression.= ';my $'. #' - $key.'="'.$Apache::inputtags::params{$key}.'"'; + #sig fig don't make much sense either + if (($Apache::lonhomework::type eq 'exam' || + $ENV{'form.submitted'} eq 'scantron') && + $tag eq 'numericalresponse') { + $expression.=';my $sig=undef;'; } - if ($$tagstack[-1] eq 'formularesponse') { + + if ($tag eq 'formularesponse') { $expression.=';my $type="fml";'; - } elsif ($$tagstack[-1] eq 'numericalresponse') { + } elsif ($tag eq 'numericalresponse') { $expression.=';my $type="float";'; } $expression.="');"; @@ -213,7 +224,7 @@ sub end_numericalresponse { $formats[0],\@incorrect); my @alphabet=('A'..'Z'); if ($target eq 'web') { - if ($$tagstack[-1] eq 'numericalresponse') { + if ($tag eq 'numericalresponse') { if ($unit=~/\S/) {$result.=' (in '.$unit.')

';} $result.= ''; my $previous=$Apache::lonhomework::history{"resource.$Apache::inputtags::part.$id.submission"}; @@ -228,7 +239,7 @@ sub end_numericalresponse { $bubble_values[$ind].''; } $result.='
'; - } elsif ($$tagstack[-1] eq 'formularesponse') { + } elsif ($tag eq 'formularesponse') { $result.= '



'; @@ -237,7 +248,7 @@ sub end_numericalresponse { if ((defined $unit) and ($unit=~/\S/) and ($Apache::lonhomework::type eq 'exam')) { $result.=' \textit{(in} \verb|'.$unit.'|\textit{)} '; } - if ($$tagstack[-1] eq 'numericalresponse') { + if ($tag eq 'numericalresponse') { my ($celllength,$number_of_tables,@table_range)= &get_table_sizes($formats[0],$number_of_bubbles); my $j=0; @@ -277,18 +288,20 @@ sub end_numericalresponse { my $part_id="$Apache::inputtags::part.$Apache::inputtags::response[-1]"; if ($target eq 'analyze') { push (@{ $Apache::lonhomework::analyze{"parts"} },$part_id); - $Apache::lonhomework::analyze{"$part_id.type"} = $$tagstack[-1]; + $Apache::lonhomework::analyze{"$part_id.type"} = $tag; my (@incorrect)=&Apache::lonxml::get_param_var('incorrect',$parstack,$safeeval); push (@{ $Apache::lonhomework::analyze{"$part_id.incorrect"} }, @incorrect); } - &Apache::response::setup_params($$tagstack[-1]); + if (scalar(@$tagstack)) { + &Apache::response::setup_params($tag); + } my (@answers)=&Apache::lonxml::get_param_var('answer',$parstack,$safeeval); my (@formats)=&Apache::lonxml::get_param_var('format',$parstack,$safeeval); my $unit=&Apache::lonxml::get_param_var('unit',$parstack,$safeeval); my $type=&Apache::lonxml::get_param('type',$parstack,$safeeval); if ($target eq 'answer') { - $result.=&Apache::response::answer_header($$tagstack[-1]); + $result.=&Apache::response::answer_header($tag); } for(my $i=0;$i<=$#answers;$i++) { my $ans=$answers[$i]; @@ -302,7 +315,7 @@ sub end_numericalresponse { if ($Apache::inputtags::params{'sig'}) { ($sighigh,$siglow)=&get_sigrange($Apache::inputtags::params{'sig'}); } - if ($fmt && $$tagstack[-1] eq 'numericalresponse') { + if ($fmt && $tag eq 'numericalresponse') { $fmt=~s/e/E/g; $ans = sprintf('%.'.$fmt,$ans); if ($high) { @@ -311,15 +324,15 @@ sub end_numericalresponse { } } if ($target eq 'answer') { - if ($high && $$tagstack[-1] eq 'numericalresponse') { $ans.=' ['.$low.','.$high.']'; } - if ($sighigh && $$tagstack[-1] eq 'numericalresponse') { + if ($high && $tag eq 'numericalresponse') { $ans.=' ['.$low.','.$high.']'; } + if ($sighigh && $tag eq 'numericalresponse') { if ($ENV{'form.answer_output_mode'} eq 'tex') { $ans.= " Sig $siglow - $sighigh"; } else { $ans.= " Sig $siglow - $sighigh"; } } - $result.=&Apache::response::answer_part($$tagstack[-1],$ans); + $result.=&Apache::response::answer_part($tag,$ans); } elsif ($target eq 'analyze') { push (@{ $Apache::lonhomework::analyze{"$part_id.answer"} }, $ans); if ($high) { @@ -329,25 +342,25 @@ sub end_numericalresponse { } } if (defined($unit) and ($unit ne '') and - $$tagstack[-1] eq 'numericalresponse') { + $tag eq 'numericalresponse') { if ($target eq 'answer') { if ($ENV{'form.answer_output_mode'} eq 'tex') { - $result.=&Apache::response::answer_part($$tagstack[-1], + $result.=&Apache::response::answer_part($tag, " Unit: $unit "); } else { - $result.=&Apache::response::answer_part($$tagstack[-1], + $result.=&Apache::response::answer_part($tag, "Unit: $unit"); } } elsif ($target eq 'analyze') { push (@{ $Apache::lonhomework::analyze{"$part_id.unit"} }, $unit); } } - if ($$tagstack[-1] eq 'formularesponse' && $target eq 'answer') { + if ($tag eq 'formularesponse' && $target eq 'answer') { my $samples=&Apache::lonxml::get_param('samples',$parstack,$safeeval); - $result.=&Apache::response::answer_part($$tagstack[-1],$samples); + $result.=&Apache::response::answer_part($tag,$samples); } if ($target eq 'answer') { - $result.=&Apache::response::answer_footer($$tagstack[-1]); + $result.=&Apache::response::answer_footer($tag); } } if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' || @@ -401,8 +414,8 @@ sub format_number { my $number = $1; my $power = $2; $power=~s/^\+//; - $power=~s/^(-?)0+(\d+)//; - $ans=$number.'$\times 10^{'.$1.$2.'}$'; #'stupidemacs + $power=~s/^(-?)0+(\d+)/$1$2/; + $ans=$number.'$\times 10^{'.$power.'}$'; #'stupidemacs } } return $ans; @@ -522,7 +535,7 @@ sub end_stringresponse { &Apache::lonxml::default_homework_load($safeeval); } if ( $target eq 'grade' && defined($ENV{'form.submitted'})) { - &Apache::response::setup_params($$tagstack[-1]); + &Apache::response::setup_params('stringresponse'); $safeeval->share_from('capa',['&caparesponse_capa_check_answer']); if ($Apache::lonhomework::type eq 'exam' || $ENV{'form.submitted'} eq 'scantron') { @@ -596,15 +609,15 @@ sub end_stringresponse { } elsif ($target eq 'answer' || $target eq 'analyze') { if ($target eq 'analyze') { push (@{ $Apache::lonhomework::analyze{"parts"} },"$part.$id"); - $Apache::lonhomework::analyze{"$part.$id.type"} = $$tagstack[-1]; + $Apache::lonhomework::analyze{"$part.$id.type"} = 'stringresponse'; } - &Apache::response::setup_params($$tagstack[-1]); + &Apache::response::setup_params('stringresponse'); if ($target eq 'answer') { - $result.=&Apache::response::answer_header($$tagstack[-1]); + $result.=&Apache::response::answer_header('stringresponse'); } # foreach my $ans (@answers) { if ($target eq 'answer') { - $result.=&Apache::response::answer_part($$tagstack[-1],$answer); + $result.=&Apache::response::answer_part('stringresponse',$answer); } elsif ($target eq 'analyze') { push (@{ $Apache::lonhomework::analyze{"$part.$id.answer"} }, $answer); @@ -622,10 +635,10 @@ sub end_stringresponse { } if ($target eq 'answer') { if ($ENV{'form.answer_output_mode'} eq 'tex') { - $result.=&Apache::response::answer_part($$tagstack[-1], + $result.=&Apache::response::answer_part('stringresponse', "$string"); } else { - $result.=&Apache::response::answer_part($$tagstack[-1], + $result.=&Apache::response::answer_part('stringresponse', "$string"); } } elsif ($target eq 'analyze') { @@ -633,7 +646,7 @@ sub end_stringresponse { $type); } if ($target eq 'answer') { - $result.=&Apache::response::answer_footer($$tagstack[-1]); + $result.=&Apache::response::answer_footer('stringresponse'); } } elsif ($target eq 'edit') { $result.=''.&Apache::edit::end_table;