--- loncom/homework/radiobuttonresponse.pm 2007/06/29 12:49:10 1.121
+++ loncom/homework/radiobuttonresponse.pm 2007/06/29 17:32:31 1.123
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# mutliple choice style responses
#
-# $Id: radiobuttonresponse.pm,v 1.121 2007/06/29 12:49:10 foxr Exp $
+# $Id: radiobuttonresponse.pm,v 1.123 2007/06/29 17:32:31 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -158,15 +158,14 @@ sub storesurvey {
sub grade_response {
- my ($max,$randomize, $bubbles_per_line)=@_;
- #keep the random numbers the same must always call this
- my ($answer,@whichfoils)=&whichfoils($max,$randomize);
+ my ($answer, $whichfoils, $bubbles_per_line)=@_;
+
if ( !&Apache::response::submitted() ) { return; }
my $response;
if ($env{'form.submitted'} eq 'scantron') {
$response = &Apache::response::getresponse(1,undef,
- &bubble_line_count(scalar(@whichfoils),
+ &bubble_line_count(scalar(@{ $whichfoils}),
$bubbles_per_line),
$bubbles_per_line);
@@ -179,7 +178,7 @@ sub grade_response {
my $part=$Apache::inputtags::part;
my $id = $Apache::inputtags::response['-1'];
my %responsehash;
- $responsehash{$whichfoils[$response]}=$response;
+ $responsehash{$whichfoils->[$response]}=$response;
my $responsestr=&Apache::lonnet::hash2str(%responsehash);
my %previous=&Apache::response::check_for_previous($responsestr,
$part,$id);
@@ -232,20 +231,18 @@ sub end_foilgroup {
'-2');
my $randomize = &Apache::lonxml::get_param('randomize',$parstack,
$safeeval,'-2');
- my @shown = &whichfoils($max,$randomize);
+ my ($answer, @shown) = &whichfoils($max, $randomize);
$answer_count = scalar(@shown);
if ($target eq 'web' || $target eq 'tex') {
$result=&displayfoils($target,
- $max,
- $randomize,
+ $answer, \@shown,
$direction,
$bubbles_per_line);
} elsif ($target eq 'answer' ) {
- $result=&displayanswers($max,$randomize);
+ $result=&displayanswers($answer, \@shown);
} elsif ( $target eq 'grade') {
- &grade_response($max,$randomize,
- $bubbles_per_line);
+ &grade_response($answer, \@shown, $bubbles_per_line);
} elsif ( $target eq 'analyze') {
&Apache::response::analyze_store_foilgroup(\@shown,
['text','value','location']);
@@ -378,6 +375,34 @@ sub displayallfoils {
return $result;
}
+=pod
+
+=item &whichfoils($max,$randomize)
+
+Randomizes the list of foils.
+Respects
+ - each foils desire to be randomized
+ - the existance of Concept groups of foils (select 1 foil from each)
+ - and selects a single correct statement from all possilble true statments
+ - and limits it to a toal of $max foils
+
+WARNING: this routine uses the random number generator, it should only
+be called once per target, otherwise it can cause randomness changes in
+homework problems.
+
+Arguments
+ $max - maximum number of foils to select (including the true one)
+ (so a max of 5 is: 1 true, 4 false)
+
+ $randomize - whether to randomize the listing of foils, by default
+ will randomize, only if randomize is 'no' will it not
+
+Returns
+ $answer - location in the array of the correct answer
+ @foils - array of foil names in to display order
+
+=cut
+
sub whichfoils {
my ($max,$randomize)=@_;
@@ -515,10 +540,9 @@ sub whichfoils {
}
sub displayfoils {
- my ($target,$max,$randomize,$direction, $bubbles_per_line)=@_;
+ my ($target,$answer,$whichfoils,$direction, $bubbles_per_line)=@_;
my $result;
- my ($answer,@whichfoils)=&whichfoils($max,$randomize);
my $part=$Apache::inputtags::part;
my $solved=$Apache::lonhomework::history{"resource.$part.solved"};
if ( ($target ne 'tex') &&
@@ -528,7 +552,7 @@ sub displayfoils {
$result.='
';
}
}
- foreach my $name (@whichfoils) {
+ foreach my $name (@{ $whichfoils }) {
if ($direction eq 'horizontal') {
if ($target ne 'tex') { $result.=''; }
}
@@ -569,7 +593,7 @@ sub displayfoils {
if ($target ne 'tex' && $direction eq 'horizontal') {
$result.="";
}
- foreach my $name (@whichfoils) {
+ foreach my $name (@{ $whichfoils }) {
if ($target ne 'tex') {
if ($direction eq 'horizontal') {
$result.="";
@@ -628,15 +652,14 @@ sub displayallanswers {
}
sub displayanswers {
- my ($max,$randomize)=@_;
- my ($answer,@whichopt) = &whichfoils($max,$randomize);
+ my ($answer, $whichopt)=@_;
my $result=&Apache::response::answer_header('radiobuttonresponse');
if ($Apache::lonhomework::type eq 'exam') {
my $correct = ('A'..'Z')[$answer];
$result.=&Apache::response::answer_part('radiobuttonresponse',
$correct);
}
- foreach my $name (@whichopt) {
+ foreach my $name (@{ $whichopt }) {
$result.=&Apache::response::answer_part('radiobuttonresponse',
$Apache::response::foilgroup{$name.'.value'});
}
|
|