--- loncom/homework/radiobuttonresponse.pm 2007/06/26 10:42:09 1.120 +++ loncom/homework/radiobuttonresponse.pm 2007/06/29 12:49:10 1.121 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # mutliple choice style responses # -# $Id: radiobuttonresponse.pm,v 1.120 2007/06/26 10:42:09 foxr Exp $ +# $Id: radiobuttonresponse.pm,v 1.121 2007/06/29 12:49:10 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -34,13 +34,24 @@ use Apache::lonnet; use Apache::response; my $default_bubbles_per_line = 10; -my $bubbles_per_line; -my $bubble_lines = 1; + BEGIN { &Apache::lonxml::register('Apache::radiobuttonresponse',('radiobuttonresponse')); } +sub bubble_line_count { + my ($numfoils, $bubbles_per_line) = @_; + my $bubble_lines; + $bubble_lines = int($numfoils / $bubbles_per_line); + if (($numfoils % $bubbles_per_line) != 0) { + $bubble_lines++; + } + return $bubble_lines; + +} + + sub start_radiobuttonresponse { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result; @@ -51,10 +62,6 @@ sub start_radiobuttonresponse { &Apache::lonxml::register('Apache::radiobuttonresponse',('foilgroup','foil','conceptgroup')); push (@Apache::lonxml::namespace,'radiobuttonresponse'); my $id = &Apache::response::start_response($parstack,$safeeval); - $bubbles_per_line = - &Apache::response::get_response_param($Apache::inputtags::part."_$id", - 'numbubbles', - $default_bubbles_per_line); %Apache::hint::radiobutton=(); undef(%Apache::response::foilnames); @@ -137,7 +144,6 @@ sub storesurvey { my $part = $Apache::inputtags::part; my $id = $Apache::inputtags::response['-1']; my @whichfoils=@{ $Apache::response::foilgroup{'names'} }; - &bubble_line_count(scalar(@whichfoils)); my %responsehash; $responsehash{$whichfoils[$response]}=$response; my $responsestr=&Apache::lonnet::hash2str(%responsehash); @@ -150,34 +156,19 @@ sub storesurvey { return ''; } -sub bubble_line_count { - my ($numfoils) = @_; - $bubble_lines = int($numfoils / $bubbles_per_line); - if (($numfoils % $bubbles_per_line) != 0) { - $bubble_lines++; - } - return $bubble_lines; - -} sub grade_response { - my ($max,$randomize)=@_; + my ($max,$randomize, $bubbles_per_line)=@_; #keep the random numbers the same must always call this my ($answer,@whichfoils)=&whichfoils($max,$randomize); if ( !&Apache::response::submitted() ) { return; } my $response; - # Need to know how many foils we have so that I know how many - # bubble lines to consume: - - my $numfoils = scalar(@whichfoils); - &bubble_line_count($numfoils); - - - if ($env{'form.submitted'} eq 'scantron') { - $response = &Apache::response::getresponse(1,undef,$bubble_lines, - $bubbles_per_line); + $response = &Apache::response::getresponse(1,undef, + &bubble_line_count(scalar(@whichfoils), + $bubbles_per_line), + $bubbles_per_line); } else { $response = $env{'form.HWVAL_'.$Apache::inputtags::response['-1']}; @@ -209,6 +200,16 @@ sub end_foilgroup { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result; + my $bubble_lines; + my $bubbles_per_line; + my $answer_count; + my $id = $Apache::inputtags::response['-1']; + $bubbles_per_line = + &Apache::response::get_response_param($Apache::inputtags::part."_$id", + 'numbubbles', + $default_bubbles_per_line); + + if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' || $target eq 'tex' || $target eq 'analyze') { my $style = $Apache::lonhomework::type; @@ -222,21 +223,30 @@ sub end_foilgroup { } elsif ( $target eq 'grade' ) { $result=&storesurvey(); } + $answer_count = scalar(@{$Apache::response::foilgroup{'names'}}); + } else { + my $name; my $max = &Apache::lonxml::get_param('max',$parstack,$safeeval, '-2'); my $randomize = &Apache::lonxml::get_param('randomize',$parstack, $safeeval,'-2'); + my @shown = &whichfoils($max,$randomize); + $answer_count = scalar(@shown); + if ($target eq 'web' || $target eq 'tex') { - $result=&displayfoils($target,$max,$randomize,$direction); + $result=&displayfoils($target, + $max, + $randomize, + $direction, + $bubbles_per_line); } elsif ($target eq 'answer' ) { $result=&displayanswers($max,$randomize); } elsif ( $target eq 'grade') { - &grade_response($max,$randomize); + &grade_response($max,$randomize, + $bubbles_per_line); } elsif ( $target eq 'analyze') { - my @shown = &whichfoils($max,$randomize); - &bubble_line_count(scalar(@shown)); &Apache::response::analyze_store_foilgroup(\@shown, ['text','value','location']); my $part_id="$Apache::inputtags::part.$Apache::inputtags::response[-1]"; @@ -250,7 +260,7 @@ sub end_foilgroup { &Apache::response::setup_prior_tries_hash(\&format_prior_answer, [\%Apache::response::foilgroup]); } - + $bubble_lines = &bubble_line_count($answer_count, $bubbles_per_line); &Apache::response::poprandomnumber(); &Apache::lonxml::increment_counter($bubble_lines); return $result; @@ -293,7 +303,6 @@ sub displayallfoils { if ( $Apache::response::foilgroup{'names'} ) { @names= @{ $Apache::response::foilgroup{'names'} }; } - &bubble_line_count(scalar(@names)); my $temp=0; my $i =0; @@ -506,11 +515,10 @@ sub whichfoils { } sub displayfoils { - my ($target,$max,$randomize,$direction)=@_; + my ($target,$max,$randomize,$direction, $bubbles_per_line)=@_; my $result; my ($answer,@whichfoils)=&whichfoils($max,$randomize); - &bubble_line_count(scalar(@whichfoils)); my $part=$Apache::inputtags::part; my $solved=$Apache::lonhomework::history{"resource.$part.solved"}; if ( ($target ne 'tex') && @@ -610,7 +618,6 @@ sub displayallanswers { if ( $Apache::response::foilgroup{'names'} ) { @names= @{ $Apache::response::foilgroup{'names'} }; } - &bubble_line_count(scalar(@names)); my $result=&Apache::response::answer_header('radiobuttonresponse'); foreach my $name (@names) { $result.=&Apache::response::answer_part('radiobuttonresponse',