--- loncom/homework/radiobuttonresponse.pm 2005/01/31 22:00:40 1.99 +++ loncom/homework/radiobuttonresponse.pm 2007/06/20 22:36:52 1.118 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # mutliple choice style responses # -# $Id: radiobuttonresponse.pm,v 1.99 2005/01/31 22:00:40 albertel Exp $ +# $Id: radiobuttonresponse.pm,v 1.118 2007/06/20 22:36:52 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -30,6 +30,10 @@ package Apache::radiobuttonresponse; use strict; use HTML::Entities(); use Apache::lonlocal; +use Apache::lonnet; +use Apache::response; + +my $bubbles_per_line = 10; BEGIN { &Apache::lonxml::register('Apache::radiobuttonresponse',('radiobuttonresponse')); @@ -38,6 +42,7 @@ BEGIN { sub start_radiobuttonresponse { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result; + #when in a radiobutton response use these &Apache::lonxml::register('Apache::radiobuttonresponse',('foilgroup','foil','conceptgroup')); push (@Apache::lonxml::namespace,'radiobuttonresponse'); @@ -59,12 +64,14 @@ sub start_radiobuttonresponse { $token,'4'). &Apache::edit::select_arg('Randomize Foil Order','randomize', ['yes','no'],$token). + &Apache::edit::select_arg('Display Direction','direction', + ['vertical','horizontal'],$token). &Apache::edit::end_row(). &Apache::edit::start_spanning_row()."\n"; } elsif ($target eq 'modified') { my $constructtag=&Apache::edit::get_new_args($token,$parstack, $safeeval,'max', - 'randomize'); + 'randomize','direction'); if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); } } elsif ($target eq 'tex') { my $type=&Apache::lonxml::get_param('TeXtype',$parstack,$safeeval, @@ -115,7 +122,7 @@ sub start_foilgroup { sub storesurvey { if ( !&Apache::response::submitted() ) { return ''; } - my $response = $ENV{'form.HWVAL_'.$Apache::inputtags::response['-1']}; + my $response = $env{'form.HWVAL_'.$Apache::inputtags::response['-1']}; &Apache::lonxml::debug("Here I am!:$response:"); if ( $response !~ /[0-9]+/) { return ''; } my $part = $Apache::inputtags::part; @@ -139,11 +146,26 @@ sub grade_response { my ($answer,@whichfoils)=&whichfoils($max,$randomize); if ( !&Apache::response::submitted() ) { return; } my $response; - if ($ENV{'form.submitted'} eq 'scantron') { - $response=&Apache::response::getresponse(); + + # Need to know how many foils we have so that I know how many + # bubble lines to consume: + + my $numfoils = scalar @whichfoils; + my $bubble_lines = int($numfoils / $bubbles_per_line); + if (($numfoils % $bubbles_per_line) != 0) { + $bubble_lines++; # Partial line of bubbles too. + } + + + if ($env{'form.submitted'} eq 'scantron') { + $response = &Apache::response::getresponse(1,undef,$bubble_lines, + $bubbles_per_line); + } else { - $response = $ENV{'form.HWVAL_'.$Apache::inputtags::response['-1']}; + $response = $env{'form.HWVAL_'.$Apache::inputtags::response['-1']}; } + &Apache::lonxml::increment_counter($bubble_lines-1); + if ( $response !~ /[0-9]+/) { return; } my $part=$Apache::inputtags::part; my $id = $Apache::inputtags::response['-1']; @@ -176,7 +198,7 @@ sub end_foilgroup { $safeeval,'-2'); if ( $style eq 'survey' && $target ne 'analyze') { if ($target eq 'web' || $target eq 'tex') { - $result=&displayallfoils($direction); + $result=&displayallfoils($direction, $target); } elsif ( $target eq 'answer' ) { $result=&displayallanswers(); } elsif ( $target eq 'grade' ) { @@ -203,7 +225,13 @@ sub end_foilgroup { ('true','false')); } } + $Apache::lonxml::post_evaluate=0; } + if ($target eq 'web') { + &Apache::response::setup_prior_tries_hash(\&format_prior_answer, + [\%Apache::response::foilgroup]); + } + &Apache::response::poprandomnumber(); &Apache::lonxml::increment_counter(); return $result; @@ -227,12 +255,26 @@ sub getfoilcounts { return ($truecnt,$falsecnt); } +sub format_prior_answer { + my ($mode,$answer,$other_data) = @_; + my $foil_data = $other_data->[0]; + my %response = &Apache::lonnet::str2hash($answer); + my ($name) = keys(%response); + return '
'; + +} + sub displayallfoils { - my ($direction)=@_; + my ($direction, $target)=@_; my $result; &Apache::lonxml::debug("survey style display"); - my @names = @{ $Apache::response::foilgroup{'names'} }; + my @names; + if ( $Apache::response::foilgroup{'names'} ) { + @names= @{ $Apache::response::foilgroup{'names'} }; + } my $temp=0; + my $i =0; my $id=$Apache::inputtags::response['-1']; my $part=$Apache::inputtags::part; my $lastresponse= @@ -242,19 +284,27 @@ sub displayallfoils { if (&Apache::response::show_answer() ) { foreach my $name (@names) { if ($Apache::response::foilgroup{$name.'.value'} ne 'unused') { - if ($direction eq 'horizontal') { + if (($direction eq 'horizontal') && ($target ne 'tex')) { $result.="