--- loncom/homework/response.pm 2007/02/24 01:44:14 1.159 +++ loncom/homework/response.pm 2007/04/18 00:19:37 1.163 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # various response type definitons response definition # -# $Id: response.pm,v 1.159 2007/02/24 01:44:14 albertel Exp $ +# $Id: response.pm,v 1.163 2007/04/18 00:19:37 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) { @@ -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 @@ -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; } @@ -1092,6 +1113,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__