--- loncom/homework/response.pm 2006/12/18 21:12:51 1.157
+++ loncom/homework/response.pm 2007/05/22 01:03:35 1.166
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# various response type definitons response definition
#
-# $Id: response.pm,v 1.157 2006/12/18 21:12:51 www Exp $
+# $Id: response.pm,v 1.166 2007/05/22 01:03:35 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -265,11 +265,14 @@ sub meta_response_order {
}
sub check_for_previous {
- my ($curresponse,$partid,$id) = @_;
+ my ($curresponse,$partid,$id,$last) = @_;
my %previous;
$previous{'used'} = 0;
foreach my $key (sort(keys(%Apache::lonhomework::history))) {
if ($key =~ /resource\.$partid\.$id\.submission$/) {
+ if ( $last && $key =~ /^(\d+):/ ) {
+ next if ($1 >= $last);
+ }
&Apache::lonxml::debug("Trying $key");
my $pastresponse=$Apache::lonhomework::history{$key};
if ($pastresponse eq $curresponse) {
@@ -409,7 +412,7 @@ sub end_customresponse {
&Apache::response::submitted('scantron')) {
&Apache::response::scored_response($part,$id);
} elsif ( $response =~ /[^\s]/ &&
- $Apache::response::custom_answer_type eq 'loncapa/perl') {
+ $Apache::response::custom_answer_type[-1] eq 'loncapa/perl') {
if (!$Apache::lonxml::default_homework_loaded) {
&Apache::lonxml::default_homework_load($safeeval);
}
@@ -444,6 +447,9 @@ sub end_customresponse {
$result .= &Apache::response::answer_part('customresponse',$answer);
$result .= &Apache::response::answer_footer('customresponse');
}
+ if ($target eq 'web') {
+ &setup_prior_tries_hash(\&format_prior_response_math);
+ }
if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' ||
$target eq 'tex' || $target eq 'analyze') {
&Apache::lonxml::increment_counter(&Apache::response::repetition());
@@ -456,6 +462,11 @@ sub end_customresponse {
return $result;
}
+sub format_prior_response_custom {
+ my ($mode,$answer) =@_;
+ return ''.
+ &HTML::Entities::encode($answer,'"<>&').'';
+}
sub start_mathresponse {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
@@ -533,6 +544,10 @@ sub end_mathresponse {
}
}
}
+ if ($target eq 'web') {
+ &setup_prior_tries_hash(\&format_prior_response_math);
+ }
+
pop(@Apache::lonxml::namespace);
pop(@Apache::response::custom_answer);
pop(@Apache::response::custom_answer_type);
@@ -541,6 +556,12 @@ sub end_mathresponse {
return $result;
}
+sub format_prior_response_math {
+ my ($mode,$answer) =@_;
+ return ''.
+ &HTML::Entities::encode($answer,'"<>&').'';
+}
+
sub implicit_multiplication {
my ($expression)=@_;
# Escape scientific notation, so 3e8 does not become 3*e*8
@@ -575,7 +596,7 @@ sub start_answer {
if ($target eq "edit" ) {
$result=&Apache::edit::tag_start($target,$token,'Answer algorithm');
$result.=&Apache::edit::editfield($token->[1],
- $Apache::response::custom_answer,
+ $Apache::response::custom_answer[-1],
'',80,4);
} elsif ( $target eq "modified" ) {
$result=$token->[4].&Apache::edit::modifiedfield('/answer',$parser);
@@ -694,7 +715,7 @@ sub setup_params {
if ($env{'request.state'} eq 'construct') { return; }
my %paramlist=();
foreach my $key (keys(%Apache::lonnet::packagetab)) {
- if ($key =~ /^$tag/) {
+ if ($key =~ /^\Q$tag\E/) {
my ($package,$name) = split(/&/,$key);
$paramlist{$name}=1;
}
@@ -1001,7 +1022,17 @@ sub pick_foil_for_concept {
$Apache::response::conceptgroup{'names'};
}
-
+#------------------------------------------------------------
+#
+# Get a parameter associated with a problem.
+# Parameters:
+# $id - the id of the paramater, either a part id,
+# or a partid and responspe id joined by _
+# $name - Name of the parameter to fetch
+# $default - Default value for the paramter.
+#
+#
+#
sub get_response_param {
my ($id,$name,$default)=@_;
my $parameter;
@@ -1026,7 +1057,13 @@ sub submitted {
if ($who eq 'scantron') { return 0; }
# if the Submit Answer button for this particular part was pressed
my $partid=$Apache::inputtags::part;
- if (defined($env{'form.submit_'.$partid})) { return 1; }
+ if ($env{'form.submitted'} eq "part_$partid") {
+ return 1;
+ }
+ if ($env{'form.submitted'} eq "yes"
+ && defined($env{'form.submit_'.$partid})) {
+ return 1;
+ }
# Submit All button on a .page was pressed
if (defined($env{'form.all_submit'})) { return 1; }
# otherwise no submission occured
@@ -1086,6 +1123,33 @@ sub check_status {
return 2;
}
+sub setup_prior_tries_hash {
+ my ($func,$data) = @_;
+ my $part = $Apache::inputtags::part;
+ my $id = $Apache::inputtags::response[-1];
+ foreach my $i (1..$Apache::lonhomework::history{'version'}) {
+ my $sub_key = "$i:resource.$part.$id.submission";
+ next if (!exists($Apache::lonhomework::history{$sub_key}));
+ my @other_data;
+ foreach my $datum (@{ $data }) {
+ if (ref($datum)) {
+ push(@other_data,$datum);
+ } else {
+ my $info_key = "$i:resource.$part.$id.$datum";
+ push(@other_data,$Apache::lonhomework::history{$info_key});
+ }
+ }
+
+ my $output =
+ &$func('grade',
+ $Apache::lonhomework::history{$sub_key},
+ \@other_data);
+ if (defined($output)) {
+ $Apache::inputtags::submission_display{$sub_key} = $output;
+ }
+ }
+}
+
1;
__END__