--- loncom/homework/response.pm 2004/03/31 05:23:59 1.97
+++ loncom/homework/response.pm 2004/06/29 22:32:14 1.100
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# various response type definitons response definition
#
-# $Id: response.pm,v 1.97 2004/03/31 05:23:59 albertel Exp $
+# $Id: response.pm,v 1.100 2004/06/29 22:32:14 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -84,27 +84,59 @@ sub end_hintresponse {
return '';
}
-# used by response to set the non-safe space random number generator to something
-# that is stable and unique based on the part number and response number
+my @randomseeds;
+sub pushrandomnumber {
+ my $rand_alg=&Apache::lonnet::get_rand_alg();
+ if (!$rand_alg || $rand_alg eq '32bit' || $rand_alg eq '64bit' ||
+ $rand_alg eq '64bit2') {
+ # do nothing
+ } else {
+ my @seed=&Math::Random::random_get_seed();
+ push (@randomseeds,\@seed);
+ }
+ &Apache::response::setrandomnumber();
+}
+sub poprandomnumber {
+ my $rand_alg=&Apache::lonnet::get_rand_alg();
+ if (!$rand_alg || $rand_alg eq '32bit' || $rand_alg eq '64bit' ||
+ $rand_alg eq '64bit2') {
+ return;
+ }
+ my $seed=pop(@randomseeds);
+ if ($seed) {
+ &Math::Random::random_set_seed(@$seed);
+ } else {
+ &Apache::lonxml::error("Unable to restore random algorithm.");
+ }
+}
sub setrandomnumber {
my $rndseed;
$rndseed=&Apache::structuretags::setup_rndseed();
if (!defined($rndseed)) { $rndseed=&Apache::lonnet::rndseed(); }
&Apache::lonxml::debug("randseed $rndseed");
# $rndseed=unpack("%32i",$rndseed);
- my $rndmod=(&Apache::lonnet::numval($Apache::inputtags::part) << 10);
- if (defined($Apache::inputtags::response['-1'])) {
- $rndmod+=&Apache::lonnet::numval($Apache::inputtags::response[-1]);
- }
- if ($rndseed =~/,/) {
- {
- use integer;
- my ($num1,$num2)=split(/,/,$rndseed);
- $num1+=$rndmod;
- $num2+=$rndmod;
- $rndseed="$num1,$num2";
+ my $rand_alg=&Apache::lonnet::get_rand_alg();
+ my $rndmod;
+ if (!$rand_alg || $rand_alg eq '32bit' || $rand_alg eq '64bit' ||
+ $rand_alg eq '64bit2') {
+ $rndmod=(&Apache::lonnet::numval($Apache::inputtags::part) << 10);
+ if (defined($Apache::inputtags::response[-1])) {
+ $rndmod+=&Apache::lonnet::numval($Apache::inputtags::response[-1]);
}
} else {
+ $rndmod=(&Apache::lonnet::numval2($Apache::inputtags::part) << 10);
+ if (defined($Apache::inputtags::response[-1])) {
+ $rndmod+=&Apache::lonnet::numval2($Apache::inputtags::response[-1]);
+ }
+ }
+ if ($rndseed =~/([,:])/) {
+ my $char=$1;
+ use integer;
+ my ($num1,$num2)=split(/\Q$char\E/,$rndseed);
+ $num1+=$rndmod;
+ $num2+=$rndmod;
+ $rndseed=$num1.$char.$num2;
+ } else {
$rndseed+=$rndmod;
}
&Apache::lonnet::setup_random_from_rndseed($rndseed);
@@ -188,9 +220,16 @@ sub meta_part_order {
if (@Apache::inputtags::partlist) {
my @parts=@Apache::inputtags::partlist;
shift(@parts);
- return ''.join(',',@parts).'';
+ return ''.join(',',@parts).''."\n";
} else {
- return '0';
+ return '0'."\n";
+ }
+}
+
+sub meta_response_order {
+ if (@Apache::inputtags::responselist) {
+ return ''.join(',',@Apache::inputtags::responselist).
+ ''."\n";
}
}
@@ -199,7 +238,7 @@ sub check_for_previous {
my %previous;
$previous{'used'} = 0;
foreach my $key (sort(keys(%Apache::lonhomework::history))) {
- if ($key =~ /resource\.$partid\.$id\.submission/) {
+ if ($key =~ /resource\.$partid\.$id\.submission$/) {
&Apache::lonxml::debug("Trying $key");
my $pastresponse=$Apache::lonhomework::history{$key};
if ($pastresponse eq $curresponse) {