version 1.220, 2010/11/24 00:10:06
|
version 1.221.2.2, 2011/11/29 18:44:31
|
Line 136 sub poprandomnumber {
|
Line 136 sub poprandomnumber {
|
} |
} |
|
|
sub setrandomnumber { |
sub setrandomnumber { |
my ($ignore_id2) = @_; |
my ($ignore_id2,$target,$rndseed) = @_; |
my $rndseed; |
if (!defined($rndseed)) { |
$rndseed=&Apache::structuretags::setup_rndseed(); |
$rndseed=&Apache::structuretags::setup_rndseed(undef,$target); |
|
} |
if (!defined($rndseed)) { $rndseed=&Apache::lonnet::rndseed(); } |
if (!defined($rndseed)) { $rndseed=&Apache::lonnet::rndseed(); } |
&Apache::lonxml::debug("randseed $rndseed"); |
&Apache::lonxml::debug("randseed $rndseed"); |
# $rndseed=unpack("%32i",$rndseed); |
# $rndseed=unpack("%32i",$rndseed); |
Line 283 sub check_for_previous {
|
Line 284 sub check_for_previous {
|
my ($curresponse,$partid,$id,$last,$type) = @_; |
my ($curresponse,$partid,$id,$last,$type) = @_; |
my %previous; |
my %previous; |
$previous{'used'} = 0; |
$previous{'used'} = 0; |
|
my $questiontype = $Apache::lonhomework::type; |
|
my $curr_rndseed = $env{'form.'.$partid.'.rndseed'}; |
foreach my $key (sort(keys(%Apache::lonhomework::history))) { |
foreach my $key (sort(keys(%Apache::lonhomework::history))) { |
if ($key =~ /resource\.\Q$partid\E\.\Q$id\E\.submission$/) { |
if ($key =~ /resource\.\Q$partid\E\.\Q$id\E\.submission$/) { |
if ( $last && $key =~ /^(\d+):/ ) { |
if ( $last && $key =~ /^(\d+):/ ) { |
Line 291 sub check_for_previous {
|
Line 294 sub check_for_previous {
|
&Apache::lonxml::debug("Trying $key"); |
&Apache::lonxml::debug("Trying $key"); |
my $pastresponse=$Apache::lonhomework::history{$key}; |
my $pastresponse=$Apache::lonhomework::history{$key}; |
if ($pastresponse eq $curresponse) { |
if ($pastresponse eq $curresponse) { |
$previous{'used'} = 1; |
|
my $history; |
my $history; |
if ( $key =~ /^(\d+):/ ) { |
if ( $key =~ /^(\d+):/ ) { |
$history=$1; |
$history=$1; |
|
next if ((($questiontype eq 'randomizetry') || |
|
($Apache::lonhomework::history{"$history:resource.$partid.type"} eq 'randomizetry')) && |
|
($curr_rndseed ne $Apache::lonhomework::history{"$history:resource.$partid.rndseed"})); |
$previous{'award'} = $Apache::lonhomework::history{"$history:resource.$partid.$id.awarddetail"}; |
$previous{'award'} = $Apache::lonhomework::history{"$history:resource.$partid.$id.awarddetail"}; |
$previous{'last'}='0'; |
$previous{'last'}='0'; |
push(@{ $previous{'version'} },$history); |
push(@{ $previous{'version'} },$history); |
} else { |
} else { |
|
next if ((($questiontype eq 'randomizetry') || |
|
($Apache::lonhomework::history{"resource.$partid.type"} eq 'randomizetry')) && |
|
($curr_rndseed ne $Apache::lonhomework::history{"resource.$partid.rndseed"})); |
$previous{'award'} = $Apache::lonhomework::history{"resource.$partid.$id.awarddetail"}; |
$previous{'award'} = $Apache::lonhomework::history{"resource.$partid.$id.awarddetail"}; |
$previous{'last'}='1'; |
$previous{'last'}='1'; |
} |
} |
|
$previous{'used'} = 1; |
if (! $previous{'award'} ) { $previous{'award'} = 'UNKNOWN'; } |
if (! $previous{'award'} ) { $previous{'award'} = 'UNKNOWN'; } |
if ($previous{'award'} eq 'INTERNAL_ERROR') { $previous{'used'}=0; } |
if ($previous{'award'} eq 'INTERNAL_ERROR') { $previous{'used'}=0; } |
&Apache::lonxml::debug("got a match :$previous{'award'}:$previous{'used'}:"); |
&Apache::lonxml::debug("got a match :$previous{'award'}:$previous{'used'}:"); |
} elsif ($type eq 'ci') { |
} elsif ($type eq 'ci') { |
if (lc($pastresponse) eq lc($curresponse)) { |
if (lc($pastresponse) eq lc($curresponse)) { |
if ($key =~ /^(\d+):/) { |
if ($key =~ /^(\d+):/) { |
push (@{$previous{'versionci'}},$1); |
my $history = $1; |
$previous{'awardci'} = $Apache::lonhomework::history{"resource.$partid.$id.awarddetail"}; |
next if (($questiontype eq 'randomizetry') && |
|
($curr_rndseed ne $Apache::lonhomework::history{"$history:resource.$partid.rndseed"})); |
|
push (@{$previous{'versionci'}},$history); |
|
$previous{'awardci'} = $Apache::lonhomework::history{"$history:resource.$partid.$id.awarddetail"}; |
$previous{'usedci'} = 1; |
$previous{'usedci'} = 1; |
} |
} |
} |
} |
Line 329 sub handle_previous {
|
Line 341 sub handle_previous {
|
} elsif (($Apache::lonhomework::type ne 'survey') && |
} elsif (($Apache::lonhomework::type ne 'survey') && |
($Apache::lonhomework::type ne 'surveycred') && |
($Apache::lonhomework::type ne 'surveycred') && |
($Apache::lonhomework::type ne 'anonsurvey') && |
($Apache::lonhomework::type ne 'anonsurvey') && |
($Apache::lonhomework::type ne 'anonsurveycred')) { |
($Apache::lonhomework::type ne 'anonsurveycred')) { |
push(@Apache::inputtags::previous,'PREVIOUSLY_USED'); |
push(@Apache::inputtags::previous,'PREVIOUSLY_USED'); |
push(@Apache::inputtags::previous_version,$$previous{'version'}); |
push(@Apache::inputtags::previous_version,$$previous{'version'}); |
} |
} |
Line 477 sub end_customresponse {
|
Line 489 sub end_customresponse {
|
$result .= &Apache::response::answer_footer('customresponse'); |
$result .= &Apache::response::answer_footer('customresponse'); |
} |
} |
if ($target eq 'web') { |
if ($target eq 'web') { |
&setup_prior_tries_hash(\&format_prior_response_math); |
&setup_prior_tries_hash(\&format_prior_response_custom); |
} |
} |
if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' || |
if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' || |
$target eq 'tex' || $target eq 'analyze') { |
$target eq 'tex' || $target eq 'analyze') { |
Line 498 sub end_customresponse {
|
Line 510 sub end_customresponse {
|
|
|
sub format_prior_response_custom { |
sub format_prior_response_custom { |
my ($mode,$answer) =@_; |
my ($mode,$answer) =@_; |
|
if (ref($answer) eq 'ARRAY') { |
|
$answer = '('.join(', ', @{ $answer }).')'; |
|
} |
return '<span class="LC_prior_custom">'. |
return '<span class="LC_prior_custom">'. |
&HTML::Entities::encode($answer,'"<>&').'</span>'; |
&HTML::Entities::encode($answer,'"<>&').'</span>'; |
} |
} |
Line 1076 sub scored_response {
|
Line 1091 sub scored_response {
|
} |
} |
|
|
sub whichorder { |
sub whichorder { |
my ($max,$randomize,$showall,$hash)=@_; |
my ($max,$randomize,$showall,$hash,$rndseed)=@_; |
#&Apache::lonxml::debug("man $max randomize $randomize"); |
#&Apache::lonxml::debug("man $max randomize $randomize"); |
if (!defined(@{ $$hash{'names'} })) { return; } |
if (!defined(@{ $$hash{'names'} })) { return; } |
my @names = @{ $$hash{'names'} }; |
my @names = @{ $$hash{'names'} }; |
Line 1316 sub check_status {
|
Line 1331 sub check_status {
|
- scalars that are other elements of the history hash to pass to $func |
- scalars that are other elements of the history hash to pass to $func |
- ref to data to be passed untouched to $func |
- ref to data to be passed untouched to $func |
|
|
|
$questiontype is the questiontype (currently only passed in if |
|
randomizebytry. |
|
|
=cut |
=cut |
|
|
sub setup_prior_tries_hash { |
sub setup_prior_tries_hash { |
my ($func,$data) = @_; |
my ($func,$data,$questiontype) = @_; |
my $part = $Apache::inputtags::part; |
my $part = $Apache::inputtags::part; |
my $id = $Apache::inputtags::response[-1]; |
my $id = $Apache::inputtags::response[-1]; |
foreach my $i (1..$Apache::lonhomework::history{'version'}) { |
foreach my $i (1..$Apache::lonhomework::history{'version'}) { |
my $sub_key = "$i:resource.$part.$id.submission"; |
my $partprefix = "$i:resource.$part"; |
|
my $sub_key = "$partprefix.$id.submission"; |
next if (!exists($Apache::lonhomework::history{$sub_key})); |
next if (!exists($Apache::lonhomework::history{$sub_key})); |
|
my $type_key = "$partprefix.type"; |
|
my $type = $Apache::lonhomework::history{$type_key}; |
my @other_data; |
my @other_data; |
foreach my $datum (@{ $data }) { |
if (ref($data) eq 'ARRAY') { |
if (ref($datum)) { |
foreach my $datum (@{ $data }) { |
push(@other_data,$datum); |
if (ref($datum)) { |
} else { |
push(@other_data,$datum); |
my $info_key = "$i:resource.$part.$id.$datum"; |
} else { |
push(@other_data,$Apache::lonhomework::history{$info_key}); |
my $info_key = "$i:resource.$part.$id.$datum"; |
|
push(@other_data,$Apache::lonhomework::history{$info_key}); |
|
} |
} |
} |
} |
} |
|
if ($questiontype eq 'randomizetry') { |
|
my $order_key = "$partprefix.$id.foilorder"; |
|
my @whichopts = &Apache::lonnet::str2array($Apache::lonhomework::history{$order_key}); |
|
if (@whichopts > 0) { |
|
shift(@other_data); |
|
unshift(@other_data,\@whichopts); |
|
} |
|
} |
my $output = |
my $output = |
&$func('grade', |
&$func('grade', |
$Apache::lonhomework::history{$sub_key}, |
$Apache::lonhomework::history{$sub_key}, |