[LON-CAPA-cvs] cvs: loncom(BZ4492) /homework radiobuttonresponse.pm
foxr
foxr at source.lon-capa.org
Sat Jan 21 16:40:41 EST 2012
foxr Sat Jan 21 21:40:41 2012 EDT
Modified files: (Branch: BZ4492)
/loncom/homework radiobuttonresponse.pm
Log:
BZ4492 - continued refactoring of how this is rendered so this can be done
sensibly.
-------------- next part --------------
Index: loncom/homework/radiobuttonresponse.pm
diff -u loncom/homework/radiobuttonresponse.pm:1.153.6.2 loncom/homework/radiobuttonresponse.pm:1.153.6.3
--- loncom/homework/radiobuttonresponse.pm:1.153.6.2 Sat Jan 21 20:54:57 2012
+++ loncom/homework/radiobuttonresponse.pm Sat Jan 21 21:40:41 2012
@@ -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::response;
my $default_bubbles_per_line = 10;
+my @alphabet = ( 'A' .. 'Z' ); # Foil labels.
+
+
BEGIN {
&Apache::lonxml::register( 'Apache::radiobuttonresponse',
@@ -800,9 +803,46 @@
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 @@
$result .= $finalclose;
} else {
+ $result .= '<br />'; # 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 = '<td>';
+ $item_posttext = '</td>';
+ }
+ else {
+ $item_pretext = '<br/>';
+ }
+ my $item_no = 0;
+ foreach my $name (@{$whichfoils}) {
+ $result .= $item_pretext;
+ $result .= &html_radiobutton(
+ $part, $Apache::inputtags::response[-1],
+ $name, $lastresponse, $item_no
+ );
+ $result .= $item_posttext;
+ $item_no++;
+ }
+
+ if ($direction eq 'horizontal' ) {
+ $result .= "</tr></table>";
+ } else {
+ $result .= "<br />";
+ }
}
return $result;
@@ -896,151 +964,108 @@
$result = &display_foils_html(
$whichfoils, $target, $direction, $part, $solved, 1);
- }
- else {
- my @alphabet = ( 'A' .. 'Z' );
+ } else {
my $i = 0;
my $bubble_number = 0;
my $line = 0;
my $temp = 0;
my $id = $Apache::inputtags::response['-1'];
my $part = $Apache::inputtags::part;
- 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);
- if ( $target ne 'tex' && $direction eq 'horizontal' ) {
- $result .= "<table><tr>";
- }
- my $numlines;
- if ( ( $target eq 'tex' ) && ( $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 . '}.]';
- }
- }
- my $item_pretext;
- my $item_posttext;
- if ( $target ne 'tex' ) {
- if ( $direction eq 'horizontal' ) {
- $item_pretext = '<td>';
- $item_posttext = '</td>';
+ 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 = '<br/>';
+ if ($target eq 'tex') {
+ $result .= '\vskip 0 mm ';
}
}
- foreach my $name ( @{$whichfoils} ) {
-
- if ( $target ne 'tex' ) {
- $result .= $item_pretext;
- $result .= &html_radiobutton(
- $part, $Apache::inputtags::response[-1],
- $name, $lastresponse, $temp
- );
- $result .= $item_posttext;
- }
- else {
- 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++;
- }
- if ( $target ne 'tex' && $direction eq 'horizontal' ) {
- $result .= "</tr></table>";
- }
- }
- if ( $target ne 'tex'
- && ( $direction ne 'horizontal' )
- ) {
- $result .= "<br />";
- }
- if ($target eq 'tex') {
- $result .= '\vskip 0 mm ';
}
return $result;
}
More information about the LON-CAPA-cvs
mailing list