--- loncom/homework/radiobuttonresponse.pm 2012/01/21 20:54:57 1.153.6.2
+++ loncom/homework/radiobuttonresponse.pm 2012/01/21 21:40:41 1.153.6.3
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# mutliple choice style responses
#
-# $Id: radiobuttonresponse.pm,v 1.153.6.2 2012/01/21 20:54:57 foxr Exp $
+# $Id: radiobuttonresponse.pm,v 1.153.6.3 2012/01/21 21:40:41 foxr Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -33,6 +33,9 @@ use Apache::lonnet;
use Apache::response;
my $default_bubbles_per_line = 10;
+my @alphabet = ( 'A' .. 'Z' ); # Foil labels.
+
+
BEGIN {
&Apache::lonxml::register( 'Apache::radiobuttonresponse',
@@ -800,9 +803,46 @@ sub html_radiobutton {
return $result;
}
+##
+# Return a reference to the last response hash. This hash has exactly
+# one or zero entries. The one entry is keyed by the foil 'name' of
+# the prior response
+#
+# @param $part - Number of the problem part.
+#
+# @return reference to a hash.
+# @retval see above.
+#
+sub get_last_response {
+ my ($part) = @_;
+
+ my $id = $Apache::inputtags::response['-1'];
+ my ( $lastresponse, $newvariation );
+
+ if ((( $Apache::lonhomework::history{"resource.$part.type"} eq 'randomizetry')
+ || ( $Apache::lonhomework::type eq 'randomizetry' )
+ )
+ && ( $Apache::inputtags::status[-1] eq 'CAN_ANSWER' )
+ )
+ {
+
+ if ( $env{ 'form.' . $part . '.rndseed' } ne
+ $Apache::lonhomework::history{"resource.$part.rndseed"} )
+ {
+ $newvariation = 1;
+ }
+ }
+ unless ($newvariation) {
+ $lastresponse =
+ $Apache::lonhomework::history{"resource.$part.$id.submission"};
+ }
+ my %lastresponse = &Apache::lonnet::str2hash($lastresponse);
+
+ return \%lastresponse;
+}
##
-# Display foils in html rendition:
+# Display foils in html rendition.:
#
# @param $whichfoils - Set of foils to display.
# @param $target - Rendition target...there are several html targets.
@@ -871,10 +911,38 @@ sub display_foils_html {
$result .= $finalclose;
} else {
+ $result .= '
'; # end line prior to foilgroup:
+
# Not showing the answers, we need to generate the HTML appropriate
# to allowing the student to respond.
+ my $item_pretext;
+ my $item_posttext;
+ my $lastresponse = &get_last_response($part);
+ if ( $direction eq 'horizontal' ) {
+ $item_pretext = '
'; - $item_posttext = ' | '; + if ($target ne 'tex') { + $result = &display_foils_html($whichfoils, $target, $direction, $part, + 0, 0); + } else { + + + my $numlines; + + + + # Rendering for latex exams. + + if ( ( $Apache::lonhomework::type eq 'exam' ) ) + { + my $numitems = scalar( @{$whichfoils} ); + $numlines = int( $numitems / $bubbles_per_line ); + if ( ( $numitems % $bubbles_per_line ) != 0 ) { + $numlines++; + } + if ( $numlines < 1 ) { + $numlines = 1; + } + if ( $numlines > 1 ) { + my $linetext; + for ( my $i = 0 ; $i < $numlines ; $i++ ) { + $linetext .= $Apache::lonxml::counter + $i . ', '; + } + $linetext =~ s/,\s$//; + $result .= + '\item[\small {\textbf{' + . $linetext . '}}]' + . ' {\footnotesize ' + . &mt( '(Bubble once in [_1] lines)', $numlines ) + . '} \hspace*{\fill} \\\\'; + } + else { + $result .= '\item[\textbf{' . $Apache::lonxml::counter . '}.]'; + } + } # tex/exam + + + foreach my $name ( @{$whichfoils} ) { + + + if ( $Apache::lonhomework::type eq 'exam' ) { + if ( $bubble_number >= $bubbles_per_line ) { + $line++; + $i = 0; + $bubble_number = 0; + } + my $identifier; + if ( $numlines > 1 ) { + $identifier = $Apache::lonxml::counter + $line; + } + $result .= + '{\small \textbf{' + . $identifier + . $alphabet[$i] + . '}}$\bigcirc$' + . $Apache::response::foilgroup{ $name . '.text' } + . '\\\\'; #' stupid emacs + $i++; + $bubble_number++; + } + else { + if ( $env{'form.pdfFormFields'} eq 'yes' + && $Apache::inputtags::status[-1] eq 'CAN_ANSWER' ) + { + my $fieldname = + $env{'request.symb'} + . '&part_' + . $Apache::inputtags::part + . '&radiobuttonresponse' + . '&HWVAL_' + . $Apache::inputtags::response['-1']; + $result .= '\item[{' + . &Apache::lonxml::print_pdf_radiobutton( $fieldname, + $temp ) + . '}]' + . $Apache::response::foilgroup{ $name . '.text' } + . "\n"; + } + else { + $result .= '\vspace*{-2 mm}\item ' + . $Apache::response::foilgroup{ $name . '.text' }; + } + } + + $temp++; } - else { - $item_pretext = '