[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