--- loncom/homework/response.pm 2007/06/19 19:34:18 1.171 +++ loncom/homework/response.pm 2007/06/20 22:36:52 1.172 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # various response type definitons response definition # -# $Id: response.pm,v 1.171 2007/06/19 19:34:18 albertel Exp $ +# $Id: response.pm,v 1.172 2007/06/20 22:36:52 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -860,11 +860,15 @@ Optional Arguments: $resulttype - undef -> a number between 0 and 25 'A is 1' -> a number between 1 and 26 'letter' -> a letter between 'A' and 'Z' - + $lines - undef problem only needs a single line of bubbles. + nonzero Problem wants the first nonempty response in + $lines lines of bubbles. + $bubbles_per_line - Must be provided if lines is defined.. number of + bubbles on a line. =cut sub getresponse { - my ($offset,$resulttype)=@_; + my ($offset,$resulttype, $lines, $bubbles_per_line)=@_; my $formparm='form.HWVAL_'.$Apache::inputtags::response['-1']; my $response; if (!defined($offset)) { @@ -872,6 +876,10 @@ sub getresponse { } else { $formparm.=":$offset"; } + if (!defined($lines)) { + $lines = 1; + } + my %let_to_num=('A'=>0,'B'=>1,'C'=>2,'D'=>3,'E'=>4,'F'=>5,'G'=>6,'H'=>7, 'I'=>8,'J'=>9,'K'=>10,'L'=>11,'M'=>12,'N'=>13,'O'=>14, 'P'=>15,'Q'=>16,'R'=>17,'S'=>18,'T'=>19,'U'=>20,'V'=>21, @@ -879,21 +887,43 @@ sub getresponse { if ($env{'form.submitted'} eq 'scantron') { my $part = $Apache::inputtags::part; my $id = $Apache::inputtags::response[-1]; - $response = $env{'scantron.'.($Apache::lonxml::counter+$offset-1). - '.answer'}; - # save bubbled letter for later - $Apache::lonhomework::results{"resource.$part.$id.scantron"}.= - $response; + + my $line; + for ($line = 0; $line < $lines; $line++) { + $response = $env{'scantron.'. + ($Apache::lonxml::counter+$offset-1+$line). + '.answer'}; + if ($response ne "") { + last; + } + + } if ($resulttype ne 'letter') { if ($resulttype eq 'A is 1') { $response = $let_to_num{$response}+1; } else { $response = $let_to_num{$response}; } + if ($response ne "") { + $response += $line * $bubbles_per_line; + } + } else { + if ($response ne "") { + $response = chr(ord($response) + $line * $bubbles_per_line); + } } + # save submitted response for later + $Apache::lonhomework::results{"resource.$part.$id.scantron"}.= + $response; + } else { $response = $env{$formparm}; } + # + # If we have a nonempty answer, correct the numeric value + # of the answer for the line on which it was found. + # + return $response; }