--- loncom/homework/caparesponse/caparesponse.pm 2007/02/18 02:03:18 1.208
+++ loncom/homework/caparesponse/caparesponse.pm 2007/08/29 21:55:37 1.218
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# caparesponse definition
#
-# $Id: caparesponse.pm,v 1.208 2007/02/18 02:03:18 albertel Exp $
+# $Id: caparesponse.pm,v 1.218 2007/08/29 21:55:37 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -392,9 +392,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 +431,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 +466,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] };
}
@@ -601,12 +602,14 @@ sub end_numericalresponse {
}
}
}
+ &Apache::response::setup_prior_tries_hash(\&format_prior_response_numerical);
} elsif ($target eq 'edit') {
$result.=''.&Apache::edit::end_table;
} elsif ($target eq 'answer' || $target eq 'analyze') {
my $part_id="$partid.$id";
if ($target eq 'analyze') {
push (@{ $Apache::lonhomework::analyze{"parts"} },$part_id);
+ push (@{ $Apache::lonhomework::analyze{"$part_id.bubble_lines"} }, 1);
$Apache::lonhomework::analyze{"$part_id.type"} = $tag;
my (@incorrect)=&Apache::lonxml::get_param_var('incorrect',$parstack,$safeeval);
if ($#incorrect eq 0) { @incorrect=(split(/,/,$incorrect[0])); }
@@ -791,6 +794,22 @@ sub end_numericalresponse {
return $result;
}
+sub format_prior_response_numerical {
+ my ($mode,$answer) = @_;
+ if (ref($answer)) {
+ my $result = '
';
+ foreach my $element (@{ $answer }) {
+ $result.= ''.
+ &HTML::Entities::encode($element,'"<>&').' | ';
+ }
+ $result.='
';
+ return $result;
+ }
+ return ''.
+ &HTML::Entities::encode($answer,'"<>&').'';
+
+}
+
sub check_for_answer_errors {
my ($parstack,$safeeval) = @_;
&add_in_tag_answer($parstack,$safeeval);
@@ -807,10 +826,9 @@ sub check_for_answer_errors {
} (sort(keys(%counts))));
&Apache::lonxml::error(&mt("All answers must have the same number of components. Varying numbers of answers were seen. ").$counts);
}
- use Data::Dumper;
- &Apache::lonxml::debug("count dump is ".&Dumper(\%counts));
my $expected_number_of_inputs = (keys(%counts))[0];
- if ( $expected_number_of_inputs != scalar(@Apache::inputtags::inputlist)) {
+ if ( $expected_number_of_inputs > 0
+ && $expected_number_of_inputs != scalar(@Apache::inputtags::inputlist)) {
&Apache::lonxml::error(&mt("Expected [_1] input fields, but there were only [_2] seen.",
$expected_number_of_inputs,
scalar(@Apache::inputtags::inputlist)));
@@ -846,7 +864,13 @@ sub get_table_sizes {
my $bubbles_per_line=int($textwidth/$cell_width);
if ($bubbles_per_line > $number_of_bubbles) {
$bubbles_per_line=$number_of_bubbles;
- }elsif (($bubbles_per_line > $number_of_bubbles/2) && ($number_of_bubbles % 2==0)) {$bubbles_per_line=$number_of_bubbles/2;}
+ } elsif (($bubbles_per_line > $number_of_bubbles/2)
+ && ($number_of_bubbles % 2==0)) {
+ $bubbles_per_line=$number_of_bubbles/2;
+ }
+ if ($bubbles_per_line < 1) {
+ $bubbles_per_line=1;
+ }
my $number_of_tables = int($number_of_bubbles/$bubbles_per_line);
my @table_range = ();
for (my $i=0;$i<$number_of_tables;$i++) {push @table_range,$bubbles_per_line;}
@@ -881,6 +905,11 @@ sub format_number {
sub make_numerical_bubbles {
my ($part,$id,$target,$parstack,$safeeval) =@_;
+
+ if (!%answer) {
+ &Apache::lonxml::error(&mt("No answers defined for response [_1] in part [_2] to make bubbles for.",$id,$part));
+ return ([],[],undef);
+ }
my $number_of_bubbles =
&Apache::response::get_response_param($part.'_'.$id,'numbubbles',8);
@@ -1010,6 +1039,12 @@ sub get_sigrange {
return ($sig_ubound,$sig_lbound);
}
+sub format_prior_response_string {
+ my ($mode,$answer) =@_;
+ return ''.
+ &HTML::Entities::encode($answer,'"<>&').'';
+}
+
sub start_stringresponse {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
my $result;
@@ -1187,6 +1222,8 @@ sub end_stringresponse {
}
} elsif ($target eq 'edit') {
$result.=''.&Apache::edit::end_table;
+ } elsif ($target eq 'web' || $target eq 'tex') {
+ &Apache::response::setup_prior_tries_hash(\&format_prior_response_string);
}
if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' ||
$target eq 'tex' || $target eq 'analyze') {