[LON-CAPA-cvs] cvs: loncom /homework radiobuttonresponse.pm

foxr lon-capa-cvs-allow@mail.lon-capa.org
Tue, 26 Jun 2007 10:42:13 -0000


foxr		Tue Jun 26 06:42:13 2007 EDT

  Modified files:              
    /loncom/homework	radiobuttonresponse.pm 
  Log:
  BZ 4074:
    - Centralize the increment of the line counter.
    - Honor the bubbles per line parameter.
    - Centralize the line increment counter.
  
  
Index: loncom/homework/radiobuttonresponse.pm
diff -u loncom/homework/radiobuttonresponse.pm:1.119 loncom/homework/radiobuttonresponse.pm:1.120
--- loncom/homework/radiobuttonresponse.pm:1.119	Wed Jun 20 18:50:27 2007
+++ loncom/homework/radiobuttonresponse.pm	Tue Jun 26 06:42:09 2007
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # mutliple choice style responses
 #
-# $Id: radiobuttonresponse.pm,v 1.119 2007/06/20 22:50:27 foxr Exp $
+# $Id: radiobuttonresponse.pm,v 1.120 2007/06/26 10:42:09 foxr Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -33,7 +33,9 @@
 use Apache::lonnet;
 use Apache::response;
 
-my $bubbles_per_line = 10;
+my $default_bubbles_per_line = 10;
+my $bubbles_per_line;
+my $bubble_lines = 1;
 
 BEGIN {
     &Apache::lonxml::register('Apache::radiobuttonresponse',('radiobuttonresponse'));
@@ -43,10 +45,17 @@
     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');
     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);
     if ($target eq 'meta') {
@@ -128,6 +137,7 @@
     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);
@@ -140,6 +150,16 @@
     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)=@_;
     #keep the random numbers the same must always call this
@@ -151,10 +171,8 @@
     # 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.
-    }
+    &bubble_line_count($numfoils);
+
     
     
     if ($env{'form.submitted'} eq 'scantron') {
@@ -164,7 +182,7 @@
     } else {
 	$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;
@@ -218,6 +236,7 @@
 		&grade_response($max,$randomize);
 	    }  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]";
@@ -233,7 +252,7 @@
     }
     
     &Apache::response::poprandomnumber();
-    &Apache::lonxml::increment_counter();
+    &Apache::lonxml::increment_counter($bubble_lines);
     return $result;
 }
 
@@ -270,9 +289,12 @@
     my $result;
     &Apache::lonxml::debug("survey style display");
     my @names;
+    &Apache::lonnet::loghthis("Display all foils");
     if ( $Apache::response::foilgroup{'names'} ) {
 	@names= @{ $Apache::response::foilgroup{'names'} };
     }
+    &bubble_line_count(scalar(@names));
+
     my $temp=0;
     my $i   =0;
     my $id=$Apache::inputtags::response['-1'];
@@ -342,6 +364,7 @@
 	    }
 	}
     }
+    
     if (($direction eq 'horizontal') && ($target ne 'tex')) { $result.='</tr></table>'; }
     return $result;
 }
@@ -487,6 +510,7 @@
     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') &&
@@ -562,7 +586,6 @@
 		    if($bubble_number >= $bubbles_per_line) {
 			$i = 0;
 			$bubble_number = 0;
-			&Apache::lonxml::increment_counter(1);
 			$result.='\item[\textbf{'.$Apache::lonxml::counter.'}.]';
 		    }
 		} else {
@@ -587,7 +610,7 @@
     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',