--- loncom/homework/caparesponse/caparesponse.pm 2007/04/17 23:25:24 1.212
+++ loncom/homework/caparesponse/caparesponse.pm 2008/09/04 13:49:19 1.228
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# caparesponse definition
#
-# $Id: caparesponse.pm,v 1.212 2007/04/17 23:25:24 albertel Exp $
+# $Id: caparesponse.pm,v 1.228 2008/09/04 13:49:19 riegler Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -310,6 +310,9 @@ sub start_numericalresponse {
$safeeval);
if ($unit =~ /\S/) { $result.=" (in $unit) "; }
}
+ if (($token->[1] eq 'formularesponse') &&
+ ($Apache::inputtags::status['-1'] eq 'CAN_ANSWER')) {
+ }
if ( &Apache::response::show_answer() ) {
&set_answertext($tag_internal_answer_name,$target,$token,$tagstack,
$parstack,$parser,$safeeval,-1);
@@ -392,9 +395,6 @@ sub setup_capa_args {
sub setup_capa_response {
my ($args_ref,$response) = @_;
- use Data::Dumper;
- &Apache::lonxml::debug("response dump is ".&Dumper($response));
-
if (ref($response)) {
$$args_ref{'response'}=dclone($response);
} else {
@@ -434,6 +434,10 @@ sub check_submission {
&add_in_tag_answer($parstack,$safeeval);
+ if (!%answer) {
+ &Apache::lonxml::error("No answers are defined");
+ }
+
my (@final_awards,@final_msgs,@names);
foreach my $name (keys(%answer)) {
&Apache::lonxml::debug(" doing $name with ".join(':',@{ $answer{$name}{'answers'} }));
@@ -465,7 +469,7 @@ sub add_in_tag_answer {
my @answer=&Apache::lonxml::get_param_var('answer',$parstack,$safeeval,
$response_level);
&Apache::lonxml::debug('answer is'.join(':',@answer));
- if (@answer && defined($answer[0])) {
+ if (@answer && $answer[0] =~ /\S/) {
$answer{$tag_internal_answer_name}= {'type' => 'ordered',
'answers' => [\@answer] };
}
@@ -509,12 +513,12 @@ 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];
- }
- $Apache::lonhomework::results{"resource.$partid.$id.submission"}=$response;
+ &add_in_tag_answer($parstack,$safeeval);
+ my ($values,$display)=&make_numerical_bubbles($partid,$id,
+ $target,$parstack,$safeeval);
+ $response=$values->[$response];
+ }
+ $Apache::lonhomework::results{"resource.$partid.$id.submission"}=$response;
my ($ad,$msg,$name)=&check_submission($response,$partid,$id,
$tag,$parstack,
$safeeval);
@@ -601,6 +605,11 @@ sub end_numericalresponse {
}
}
}
+ if (($target eq 'web') && ($tag eq 'formularesponse')
+ && ($Apache::lonhomework::type ne 'exam')) {
+ $result.=&Apache::response::edit_mathresponse_button($id,"HWVAL_$id");
+ }
+
&Apache::response::setup_prior_tries_hash(\&format_prior_response_numerical);
} elsif ($target eq 'edit') {
$result.=''.&Apache::edit::end_table;
@@ -677,12 +686,12 @@ sub end_numericalresponse {
#}
}
if ($high && $tag eq 'numericalresponse') {
- $element.=' ['.$low.','.$high.']';
+ $element.='; ['.$low.'; '.$high.']';
$tolline .= "[$low, $high]";
}
if (defined($sighigh) && $tag eq 'numericalresponse') {
if ($env{'form.answer_output_mode'} eq 'tex') {
- $element.= " Sig $siglow - $sighigh";
+ $element.= "; Sig $siglow - $sighigh";
} else {
$element.= " Sig $siglow - $sighigh";
$sigline .= "[$siglow, $sighigh]";
@@ -702,7 +711,7 @@ sub end_numericalresponse {
}
}
if ($target eq 'answer') {
- $result.= &Apache::response::answer_part($tag,join(', ',@all_answer_info));
+ $result.= &Apache::response::answer_part($tag,join('; ',@all_answer_info));
}
}
@@ -786,7 +795,16 @@ sub end_numericalresponse {
}
if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' ||
$target eq 'tex' || $target eq 'analyze') {
- &Apache::lonxml::increment_counter($increment);
+ if (($tag eq 'formularesponse') && ($target eq 'analyze')) {
+ my $type = &Apache::lonnet::EXT('resource.'.$partid.'_'.$id.'.type');
+ if ($type eq 'exam') {
+ $increment = &Apache::response::repetition();
+ }
+ }
+ &Apache::lonxml::increment_counter($increment,"$partid.$id");
+ if ($target eq 'analyze') {
+ &Apache::lonhomework::set_bubble_lines();
+ }
}
&Apache::response::end_response();
return $result;
@@ -794,7 +812,15 @@ sub end_numericalresponse {
sub format_prior_response_numerical {
my ($mode,$answer) = @_;
- #FIXME needs to support multianswer modes
+ if (ref($answer)) {
+ my $result = '
'. + &HTML::Entities::encode($element,'"<>&').' | '; + } + $result.='