--- loncom/homework/caparesponse/caparesponse.pm 2003/11/25 14:37:11 1.124 +++ 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.124 2003/11/25 14:37:11 sakharuk 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(); @@ -142,13 +144,13 @@ sub end_numericalresponse { #sig fig don't make much sense either if (($Apache::lonhomework::type eq 'exam' || $ENV{'form.submitted'} eq 'scantron') && - $$tagstack[-1] eq 'numericalresponse') { + $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.="');"; @@ -222,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"}; @@ -237,7 +239,7 @@ sub end_numericalresponse { $bubble_values[$ind].''; } $result.='
'; - } elsif ($$tagstack[-1] eq 'formularesponse') { + } elsif ($tag eq 'formularesponse') { $result.= '



'; @@ -246,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; @@ -286,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]; @@ -311,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) { @@ -320,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) { @@ -338,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' || @@ -531,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') { @@ -605,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); @@ -631,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') { @@ -642,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;