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

albertel lon-capa-cvs@mail.lon-capa.org
Fri, 05 Mar 2004 22:59:48 -0000


This is a MIME encoded message

--albertel1078527588
Content-Type: text/plain

albertel		Fri Mar  5 17:59:48 2004 EDT

  Modified files:              
    /loncom/homework	radiobuttonresponse.pm 
  Log:
  - retabination
  
  
--albertel1078527588
Content-Type: text/plain
Content-Disposition: attachment; filename="albertel-20040305175948.txt"

Index: loncom/homework/radiobuttonresponse.pm
diff -u loncom/homework/radiobuttonresponse.pm:1.82 loncom/homework/radiobuttonresponse.pm:1.83
--- loncom/homework/radiobuttonresponse.pm:1.82	Fri Mar  5 14:44:18 2004
+++ loncom/homework/radiobuttonresponse.pm	Fri Mar  5 17:59:48 2004
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # mutliple choice style responses
 #
-# $Id: radiobuttonresponse.pm,v 1.82 2004/03/05 19:44:18 albertel Exp $
+# $Id: radiobuttonresponse.pm,v 1.83 2004/03/05 22:59:48 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -31,408 +31,413 @@
 use HTML::Entities();
 
 BEGIN {
-  &Apache::lonxml::register('Apache::radiobuttonresponse',('radiobuttonresponse'));
+    &Apache::lonxml::register('Apache::radiobuttonresponse',('radiobuttonresponse'));
 }
 
 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');
-  my $id = &Apache::response::start_response($parstack,$safeeval);
-  %Apache::hint::radiobutton=();
-  if ($target eq 'meta') {
-    $result=&Apache::response::meta_package_write('radiobuttonresponse');
-  } elsif ($target eq 'edit' ) {
-    $result.=&Apache::edit::start_table($token).
-	'<tr><td>'.&Apache::lonxml::description($token).
-	&Apache::loncommon::help_open_topic('Radio_Response_Problems').
-	"</td><td>Delete:".
-	&Apache::edit::deletelist($target,$token)
-	."</td><td>&nbsp".&Apache::edit::end_row()
-        .&Apache::edit::start_spanning_row();
-
-    $result.=
-	&Apache::edit::text_arg('Max Number Of Shown Foils:','max',$token,'4').
-	&Apache::edit::select_arg('Randomize Foil Order','randomize',
-				  ['yes','no'],$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');
-    if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }
-  } elsif ($target eq 'tex') {
-      my $type=&Apache::lonxml::get_param('TeXtype',$parstack,$safeeval,undef,0);
-      if ($type eq '1') {
-	  $result .= ' \renewcommand{\labelenumi}{\arabic{enumi}.}';
-      } elsif ($type eq 'A') {
-	  $result .= ' \renewcommand{\labelenumi}{\Alph{enumi}.}';
-      } elsif ($type eq 'a') {
-	  $result .= ' \renewcommand{\labelenumi}{\alph{enumi}.}';
-      } elsif ($type eq 'i') {
-	  $result .= ' \renewcommand{\labelenumi}{\roman{enumi}.}';
-      }
-      $result .= '\begin{enumerate}';
-  } elsif ($target eq 'analyze') {
-      my $part_id="$Apache::inputtags::part.$id";
-      push (@{ $Apache::lonhomework::analyze{"parts"} },$part_id);
-  }
-  return $result;
+    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);
+    %Apache::hint::radiobutton=();
+    if ($target eq 'meta') {
+	$result=&Apache::response::meta_package_write('radiobuttonresponse');
+    } elsif ($target eq 'edit' ) {
+	$result.=&Apache::edit::start_table($token).
+	    '<tr><td>'.&Apache::lonxml::description($token).
+	    &Apache::loncommon::help_open_topic('Radio_Response_Problems').
+	    "</td><td>Delete:".
+	    &Apache::edit::deletelist($target,$token)
+	    ."</td><td>&nbsp".&Apache::edit::end_row()
+	    .&Apache::edit::start_spanning_row();
+	$result.=
+	    &Apache::edit::text_arg('Max Number Of Shown Foils:','max',
+				    $token,'4').
+	    &Apache::edit::select_arg('Randomize Foil Order','randomize',
+				      ['yes','no'],$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');
+	if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }
+    } elsif ($target eq 'tex') {
+	my $type=&Apache::lonxml::get_param('TeXtype',$parstack,$safeeval,
+					    undef,0);
+	if ($type eq '1') {
+	    $result .= ' \renewcommand{\labelenumi}{\arabic{enumi}.}';
+	} elsif ($type eq 'A') {
+	    $result .= ' \renewcommand{\labelenumi}{\Alph{enumi}.}';
+	} elsif ($type eq 'a') {
+	    $result .= ' \renewcommand{\labelenumi}{\alph{enumi}.}';
+	} elsif ($type eq 'i') {
+	    $result .= ' \renewcommand{\labelenumi}{\roman{enumi}.}';
+	}
+	$result .= '\begin{enumerate}';
+    } elsif ($target eq 'analyze') {
+	my $part_id="$Apache::inputtags::part.$id";
+	push (@{ $Apache::lonhomework::analyze{"parts"} },$part_id);
+    }
+    return $result;
 }
 
 sub end_radiobuttonresponse {
-  my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
-  my $result;
-  if ($target eq 'edit') { $result=&Apache::edit::end_table(); }
-  if ($target eq 'tex') { $result .= '\end{enumerate}'; }
-  &Apache::response::end_response;
-  pop @Apache::lonxml::namespace;
-  &Apache::lonxml::deregister('Apache::radiobuttonresponse',('foilgroup','foil','conceptgroup'));
-  return $result;
+    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
+    my $result;
+    if ($target eq 'edit') { $result=&Apache::edit::end_table(); }
+    if ($target eq 'tex') { $result .= '\end{enumerate}'; }
+    &Apache::response::end_response;
+    pop @Apache::lonxml::namespace;
+    &Apache::lonxml::deregister('Apache::radiobuttonresponse',('foilgroup','foil','conceptgroup'));
+    return $result;
 }
 
 %Apache::response::foilgroup=();
 sub start_foilgroup {
-  my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
-  my $result;
-  %Apache::response::foilgroup=();
-  $Apache::radiobuttonresponse::conceptgroup=0;
-  &Apache::response::setrandomnumber();
-  if ($target eq 'tex' && $Apache::lonhomework::type eq 'exam') {
-      $result.='\item[\textbf{'.$Apache::lonxml::counter.'}.]';
-  }
-  return $result;
+    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
+    my $result;
+    %Apache::response::foilgroup=();
+    $Apache::radiobuttonresponse::conceptgroup=0;
+    &Apache::response::setrandomnumber();
+    if ($target eq 'tex' && $Apache::lonhomework::type eq 'exam') {
+	$result.='\item[\textbf{'.$Apache::lonxml::counter.'}.]';
+    }
+    return $result;
 }
 
 sub storesurvey {
-  if ( !defined($ENV{'form.submitted'})) { return ''; }
-  my $response = $ENV{'form.HWVAL_'.$Apache::inputtags::response['-1']};
-  &Apache::lonxml::debug("Here I am!:$response:");
-  if ( $response !~ /[0-9]+/) { return ''; }
-  my $id = $Apache::inputtags::response['-1'];
-  my @whichfoils=@{ $Apache::response::foilgroup{'names'} };
-  my %responsehash;
-  $responsehash{$whichfoils[$response]}=$response;
-  $Apache::lonhomework::results{"resource.$Apache::inputtags::part.$id.submission"}=&Apache::lonnet::hash2str(%responsehash);
-  $Apache::lonhomework::results{"resource.$Apache::inputtags::part.$id.awarddetail"}='SUBMITTED';
-  &Apache::lonxml::debug("submitted a $response<br />\n");
-  return '';
+    if ( !defined($ENV{'form.submitted'})) { return ''; }
+    my $response = $ENV{'form.HWVAL_'.$Apache::inputtags::response['-1']};
+    &Apache::lonxml::debug("Here I am!:$response:");
+    if ( $response !~ /[0-9]+/) { return ''; }
+    my $id = $Apache::inputtags::response['-1'];
+    my @whichfoils=@{ $Apache::response::foilgroup{'names'} };
+    my %responsehash;
+    $responsehash{$whichfoils[$response]}=$response;
+    $Apache::lonhomework::results{"resource.$Apache::inputtags::part.$id.submission"}=&Apache::lonnet::hash2str(%responsehash);
+    $Apache::lonhomework::results{"resource.$Apache::inputtags::part.$id.awarddetail"}='SUBMITTED';
+    &Apache::lonxml::debug("submitted a $response<br />\n");
+    return '';
 }
 
 sub grade_response {
-  my ($max,$randomize)=@_;
-  #keep the random numbers the same must always call this
-  my ($answer,@whichfoils)=&whichfoils($max,$randomize);
-  if (!defined($ENV{'form.submitted'})) { return; }
-  my $response;
-  if ($ENV{'form.submitted'} eq 'scantron') {
-      $response=&Apache::response::getresponse();
-  } else {
-      $response = $ENV{'form.HWVAL_'.$Apache::inputtags::response['-1']};
-  }
-  if ( $response !~ /[0-9]+/) { return; }
-  my $part=$Apache::inputtags::part;
-  my $id = $Apache::inputtags::response['-1'];
-  my %responsehash;
-  $responsehash{$whichfoils[$response]}=$response;
-  my $responsestr=&Apache::lonnet::hash2str(%responsehash);
-  my %previous=&Apache::response::check_for_previous($responsestr,
-						     $part,$id);
-  $Apache::lonhomework::results{"resource.$part.$id.submission"}=
-    $responsestr;
-  &Apache::lonxml::debug("submitted a $response<br />\n");
-  my $ad;
-  if ($response == $answer) {
-    $ad='EXACT_ANS';
-  } else {
-    $ad='INCORRECT';
-  }
-  $Apache::lonhomework::results{"resource.$part.$id.awarddetail"}=$ad;
-  &Apache::response::handle_previous(\%previous,$ad);
+    my ($max,$randomize)=@_;
+    #keep the random numbers the same must always call this
+    my ($answer,@whichfoils)=&whichfoils($max,$randomize);
+    if (!defined($ENV{'form.submitted'})) { return; }
+    my $response;
+    if ($ENV{'form.submitted'} eq 'scantron') {
+	$response=&Apache::response::getresponse();
+    } else {
+	$response = $ENV{'form.HWVAL_'.$Apache::inputtags::response['-1']};
+    }
+    if ( $response !~ /[0-9]+/) { return; }
+    my $part=$Apache::inputtags::part;
+    my $id = $Apache::inputtags::response['-1'];
+    my %responsehash;
+    $responsehash{$whichfoils[$response]}=$response;
+    my $responsestr=&Apache::lonnet::hash2str(%responsehash);
+    my %previous=&Apache::response::check_for_previous($responsestr,
+						       $part,$id);
+    $Apache::lonhomework::results{"resource.$part.$id.submission"}=
+	$responsestr;
+    &Apache::lonxml::debug("submitted a $response<br />\n");
+    my $ad;
+    if ($response == $answer) {
+	$ad='EXACT_ANS';
+    } else {
+	$ad='INCORRECT';
+    }
+    $Apache::lonhomework::results{"resource.$part.$id.awarddetail"}=$ad;
+    &Apache::response::handle_previous(\%previous,$ad);
 }
 
 sub end_foilgroup {
-  my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
+    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
 
-  my $result;
-  if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' ||
-      $target eq 'tex' || $target eq 'analyze') {
-    my $style = $Apache::lonhomework::type;
-    if ( $style eq 'survey'  && $target ne 'analyze') {
-	if ($target eq 'web' || $target eq 'tex') {
-	    $result=&displayallfoils();
-	} elsif ( $target eq 'answer' ) {
-	    $result=&displayallanswers();
-	} elsif ( $target eq 'grade' ) {
-	    $result=&storesurvey();
+    my $result;
+    if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' ||
+	$target eq 'tex' || $target eq 'analyze') {
+	my $style = $Apache::lonhomework::type;
+	if ( $style eq 'survey'  && $target ne 'analyze') {
+	    if ($target eq 'web' || $target eq 'tex') {
+		$result=&displayallfoils();
+	    } elsif ( $target eq 'answer' ) {
+		$result=&displayallanswers();
+	    } elsif ( $target eq 'grade' ) {
+		$result=&storesurvey();
+	    }
+	} else {
+	    my $name;
+	    my $max = &Apache::lonxml::get_param('max',$parstack,$safeeval,
+						 '-2');
+	    my $randomize = &Apache::lonxml::get_param('randomize',$parstack,
+						       $safeeval,'-2');
+	    if ($target eq 'web' || $target eq 'tex') {
+		$result=&displayfoils($target,$max,$randomize);
+	    } elsif ($target eq 'answer' ) {
+		$result=&displayanswers($max,$randomize);
+	    } elsif ( $target eq 'grade') {
+		&grade_response($max,$randomize);
+	    }  elsif ( $target eq 'analyze') {
+		my @shown = &whichfoils($max,$randomize);
+		&Apache::response::analyze_store_foilgroup(\@shown,
+							   ['text','value','location']);
+		my $part_id="$Apache::inputtags::part.$Apache::inputtags::response[-1]";
+		push (@{ $Apache::lonhomework::analyze{"$part_id.options"} },
+		      ('true','false'));
+	    }
 	}
-    } else {
-      my $name;
-      my $max = &Apache::lonxml::get_param('max',$parstack,$safeeval,'-2');
-      my $randomize = &Apache::lonxml::get_param('randomize',$parstack,
-						 $safeeval,'-2');
-      if ($target eq 'web' || $target eq 'tex') {
-	$result=&displayfoils($target,$max,$randomize);
-      } elsif ($target eq 'answer' ) {
-	$result=&displayanswers($max,$randomize);
-      } elsif ( $target eq 'grade') {
-	&grade_response($max,$randomize);
-      }  elsif ( $target eq 'analyze') {
-	  my @shown = &whichfoils($max,$randomize);
-	  &Apache::response::analyze_store_foilgroup(\@shown,
-						  ['text','value','location']);
-	  my $part_id="$Apache::inputtags::part.$Apache::inputtags::response[-1]";
-	  push (@{ $Apache::lonhomework::analyze{"$part_id.options"} },
-		('true','false'));
-      }
-    }
-  }
-  &Apache::lonxml::increment_counter();
-  return $result;
+    }
+    &Apache::lonxml::increment_counter();
+    return $result;
 }
 
 sub getfoilcounts {
-  my @names;
-  my $truecnt=0;
-  my $falsecnt=0;
-  my $name;
-  if ( $Apache::response::foilgroup{'names'} ) {
-    @names= @{ $Apache::response::foilgroup{'names'} };
-  }
-  foreach $name (@names) {
-    if ($Apache::response::foilgroup{$name.'.value'} eq 'true') {
-      $truecnt++;
-    } elsif ($Apache::response::foilgroup{$name.'.value'} eq 'false') {
-      $falsecnt++;
+    my @names;
+    my $truecnt=0;
+    my $falsecnt=0;
+    my $name;
+    if ( $Apache::response::foilgroup{'names'} ) {
+	@names= @{ $Apache::response::foilgroup{'names'} };
     }
-  }
-  return ($truecnt,$falsecnt);
+    foreach $name (@names) {
+	if ($Apache::response::foilgroup{$name.'.value'} eq 'true') {
+	    $truecnt++;
+	} elsif ($Apache::response::foilgroup{$name.'.value'} eq 'false') {
+	    $falsecnt++;
+	}
+    }
+    return ($truecnt,$falsecnt);
 }
 
 sub displayallfoils {
-  my $result;
-  &Apache::lonxml::debug("survey style display");
-  my @names = @{ $Apache::response::foilgroup{'names'} };
-  my $temp=0;
-  my $id=$Apache::inputtags::response['-1'];
-  my $part=$Apache::inputtags::part;
-  my $lastresponse=$Apache::lonhomework::history{"resource.$part.$id.submission"};
-  my %lastresponse=&Apache::lonnet::str2hash($lastresponse);
-  if (&Apache::response::show_answer() ) {
-    foreach my $name (@names) {
-      if ($Apache::response::foilgroup{$name.'.value'} ne 'unused') {
-	$result.="<br />".$Apache::response::foilgroup{$name.'.value'};
-	if ($Apache::response::foilgroup{$name.'.value'} eq 'true') {
-	  $result.='<b>';
+    my $result;
+    &Apache::lonxml::debug("survey style display");
+    my @names = @{ $Apache::response::foilgroup{'names'} };
+    my $temp=0;
+    my $id=$Apache::inputtags::response['-1'];
+    my $part=$Apache::inputtags::part;
+    my $lastresponse=
+	$Apache::lonhomework::history{"resource.$part.$id.submission"};
+    my %lastresponse=&Apache::lonnet::str2hash($lastresponse);
+    if (&Apache::response::show_answer() ) {
+	foreach my $name (@names) {
+	    if ($Apache::response::foilgroup{$name.'.value'} ne 'unused') {
+		$result.="<br />".$Apache::response::foilgroup{$name.'.value'};
+		if ($Apache::response::foilgroup{$name.'.value'} eq 'true') {
+		    $result.='<b>';
+		}
+		$result .= $Apache::response::foilgroup{$name.'.text'};
+		if ($Apache::response::foilgroup{$name.'.value'} eq 'true') {
+		    $result.='</b>';
+		}
+	    }
 	}
-	$result .= $Apache::response::foilgroup{$name.'.text'};
-	if ($Apache::response::foilgroup{$name.'.value'} eq 'true') {
-	  $result.='</b>';
+    } else {
+	foreach my $name (@names) {
+	    if ($Apache::response::foilgroup{$name.'.value'} ne 'unused') {
+		$result.="<br /><input type=\"radio\" name=\"HWVAL_$Apache::inputtags::response['-1']\" value=\"$temp\" ";
+		if (defined($lastresponse{$name})) { $result .= 'checked="on"'; }
+		$result .= '>'.$Apache::response::foilgroup{$name.'.text'}."</input>\n";
+		$temp++;
+	    }
 	}
-      }
-    }
-  } else {
-    foreach my $name (@names) {
-      if ($Apache::response::foilgroup{$name.'.value'} ne 'unused') {
-	$result.="<br /><input type=\"radio\" name=\"HWVAL_$Apache::inputtags::response['-1']\" value=\"$temp\" ";
-	if (defined($lastresponse{$name})) { $result .= 'checked="on"'; }
-	$result .= '>'.$Apache::response::foilgroup{$name.'.text'}."</input>\n";
-	$temp++;
-      }
     }
-  }
-  return $result;
+    return $result;
 }
 
 sub whichfoils {
-  my ($max,$randomize)=@_;
+    my ($max,$randomize)=@_;
 
-  my @truelist;
-  my @falselist;
-  my @whichfalse =();
-  my ($truecnt,$falsecnt) = &getfoilcounts();
-  my $count=0;
-  # we will add in 1 of the true statements
-  if (($falsecnt+1)>$max) { $count=$max } else { $count=$falsecnt+1; }
-  my $answer=int(&Math::Random::random_uniform() * ($count));
-  &Apache::lonxml::debug("Count is $count, $answer is $answer");
-  my @names;
-  if ( $Apache::response::foilgroup{'names'} ) {
-      @names= @{ $Apache::response::foilgroup{'names'} };
-  }
-  if (&Apache::response::showallfoils()) {
-      @whichfalse=@names;
-  } elsif ($randomize eq 'no') {
-      &Apache::lonxml::debug("No randomization");
-      my $havetrue=0;
-      foreach my $name (@names) {
-	  if ($Apache::response::foilgroup{$name.'.value'} eq 'true') {
-	      if (!$havetrue ) {
-		  push(@whichfalse,$name); $havetrue++; $answer=$#whichfalse;
-	      }
-	  } elsif ($Apache::response::foilgroup{$name.'.value'} eq 'false') {
-	      push (@whichfalse,$name);
-	  } elsif ($Apache::response::foilgroup{$name.'.value'} eq 'unused') {
-	  } else {
-	      &Apache::lonxml::error(&HTML::Entities::encode("No valid value assigned ($Apache::response::foilgroup{$name.'.value'}) for foil $name in <foilgroup>"));
-	  }
-      }
-  } else {
-    my $current=0;
-    &Apache::lonhomework::showhash(%Apache::response::foilgroup);
-    my (%top,%bottom);
-    #first find out where everyone wants to be
-    foreach my $name (@names) {
-	$current++;
-	if ($Apache::response::foilgroup{$name.'.value'} eq 'true') {
-	    push (@truelist,$name);
-	    if ($Apache::response::foilgroup{$name.'.location'} eq 'top') {
-		$top{$name}=$current;
-	    } elsif ($Apache::response::foilgroup{$name.'.location'} eq 'bottom') {
-		$bottom{$name}=$current;
+    my @truelist;
+    my @falselist;
+    my @whichfalse =();
+    my ($truecnt,$falsecnt) = &getfoilcounts();
+    my $count=0;
+    # we will add in 1 of the true statements
+    if (($falsecnt+1)>$max) { $count=$max } else { $count=$falsecnt+1; }
+    my $answer=int(&Math::Random::random_uniform() * ($count));
+    &Apache::lonxml::debug("Count is $count, $answer is $answer");
+    my @names;
+    if ( $Apache::response::foilgroup{'names'} ) {
+	@names= @{ $Apache::response::foilgroup{'names'} };
+    }
+    if (&Apache::response::showallfoils()) {
+	@whichfalse=@names;
+    } elsif ($randomize eq 'no') {
+	&Apache::lonxml::debug("No randomization");
+	my $havetrue=0;
+	foreach my $name (@names) {
+	    if ($Apache::response::foilgroup{$name.'.value'} eq 'true') {
+		if (!$havetrue ) {
+		    push(@whichfalse,$name); $havetrue++; $answer=$#whichfalse;
+		}
+	    } elsif ($Apache::response::foilgroup{$name.'.value'} eq 'false') {
+		push (@whichfalse,$name);
+	    } elsif ($Apache::response::foilgroup{$name.'.value'} eq 'unused') {
+	    } else {
+		&Apache::lonxml::error(&HTML::Entities::encode("No valid value assigned ($Apache::response::foilgroup{$name.'.value'}) for foil $name in <foilgroup>"));
 	    }
-	} elsif ($Apache::response::foilgroup{$name.'.value'} eq 'false') {
-	    push (@falselist,$name);
-	    if ($Apache::response::foilgroup{$name.'.location'} eq 'top') {
-		$top{$name}=$current;
-	    } elsif ($Apache::response::foilgroup{$name.'.location'} eq 'bottom') {
-		$bottom{$name}=$current;
+	}
+    } else {
+	my $current=0;
+	&Apache::lonhomework::showhash(%Apache::response::foilgroup);
+	my (%top,%bottom);
+	#first find out where everyone wants to be
+	foreach my $name (@names) {
+	    $current++;
+	    if ($Apache::response::foilgroup{$name.'.value'} eq 'true') {
+		push (@truelist,$name);
+		if ($Apache::response::foilgroup{$name.'.location'} eq 'top') {
+		    $top{$name}=$current;
+		} elsif ($Apache::response::foilgroup{$name.'.location'} eq 'bottom') {
+		    $bottom{$name}=$current;
+		}
+	    } elsif ($Apache::response::foilgroup{$name.'.value'} eq 'false') {
+		push (@falselist,$name);
+		if ($Apache::response::foilgroup{$name.'.location'} eq 'top') {
+		    $top{$name}=$current;
+		} elsif ($Apache::response::foilgroup{$name.'.location'} eq 'bottom') {
+		    $bottom{$name}=$current;
+		}
+	    } elsif ($Apache::response::foilgroup{$name.'.value'} eq 'unused') {
+	    } else {
+		&Apache::lonxml::error(&HTML::Entities::encode("No valid value assigned ($Apache::response::foilgroup{$name.'.value'}) for foil $name in <foilgroup>"));
 	    }
-	} elsif ($Apache::response::foilgroup{$name.'.value'} eq 'unused') {
-	} else {
-	    &Apache::lonxml::error(&HTML::Entities::encode("No valid value assigned ($Apache::response::foilgroup{$name.'.value'}) for foil $name in <foilgroup>"));
 	}
-    }
-    #pick a true statement
-    my $notrue=0;
-    if (scalar(@truelist) == 0) { $notrue=1; }
-    my $whichtrue = int(&Math::Random::random_uniform() * ($#truelist+1));
-    &Apache::lonxml::debug("Max is $max, From $#truelist elms, picking $whichtrue");
-    my (@toplist, @bottomlist);
-    my $topcount=0;
-    my $bottomcount=0;
-    # assign everyone to either toplist/bottomlist or whichfalse
-    # which false is randomized, toplist bottomlist are in order
-    while ((($#whichfalse+$topcount+$bottomcount) < $max-2) && ($#falselist > -1)) {
-	&Apache::lonxml::debug("Have $#whichfalse max is $max");
-	my $afalse=int(&Math::Random::random_uniform() * ($#falselist+1));
-	&Apache::lonxml::debug("From $#falselist elms, picking $afalse");
-	$afalse=splice(@falselist,$afalse,1);
-	&Apache::lonxml::debug("Picked $afalse");
-	&Apache::lonhomework::showhash(('names'=>\@names));
-	&Apache::lonhomework::showhash(%top);
-	if ($top{$afalse}) {
-	    $toplist[$top{$afalse}]=$afalse;
-	    $topcount++;
-	} elsif ($bottom{$afalse}) {
-	    $bottomlist[$bottom{$afalse}]=$afalse;
-	    $bottomcount++;
+	#pick a true statement
+	my $notrue=0;
+	if (scalar(@truelist) == 0) { $notrue=1; }
+	my $whichtrue = int(&Math::Random::random_uniform() * ($#truelist+1));
+	&Apache::lonxml::debug("Max is $max, From $#truelist elms, picking $whichtrue");
+	my (@toplist, @bottomlist);
+	my $topcount=0;
+	my $bottomcount=0;
+	# assign everyone to either toplist/bottomlist or whichfalse
+	# which false is randomized, toplist bottomlist are in order
+	while ((($#whichfalse+$topcount+$bottomcount) < $max-2) && ($#falselist > -1)) {
+	    &Apache::lonxml::debug("Have $#whichfalse max is $max");
+	    my $afalse=int(&Math::Random::random_uniform() * ($#falselist+1));
+	    &Apache::lonxml::debug("From $#falselist elms, picking $afalse");
+	    $afalse=splice(@falselist,$afalse,1);
+	    &Apache::lonxml::debug("Picked $afalse");
+	    &Apache::lonhomework::showhash(('names'=>\@names));
+	    &Apache::lonhomework::showhash(%top);
+	    if ($top{$afalse}) {
+		$toplist[$top{$afalse}]=$afalse;
+		$topcount++;
+	    } elsif ($bottom{$afalse}) {
+		$bottomlist[$bottom{$afalse}]=$afalse;
+		$bottomcount++;
+	    } else {
+		push (@whichfalse,$afalse);
+	    }
+	}
+	&Apache::lonxml::debug("Answer wants $answer");
+	my $truename=$truelist[$whichtrue];
+	my $dosplice=1;
+	if ($notrue && $Apache::lonhomework::type ne 'survey') {
+	    $dosplice=0;
+	    &Apache::lonxml::error("There are no true statements available.<br />");
+	}
+	#insert the true statement, keeping track of where it wants to be
+	if ($Apache::response::foilgroup{$truename.'.location'} eq 'top' && $dosplice) {
+	    $toplist[$top{$truename}]=$truename;
+	    $answer=-1;
+	    foreach my $top (reverse(@toplist)) {
+		if ($top) { $answer++;}
+		if ($top eq $truename) { last; }
+	    }
+	    $dosplice=0;
+	} elsif ($Apache::response::foilgroup{$truename.'.location'} eq 'bottom' && $dosplice) {
+	    $bottomlist[$bottom{$truename}]=$truename;
+	    $answer=-1;
+	    foreach my $bot (@bottomlist) {
+		if ($bot) { $answer++;}
+		if ($bot eq $truename) { last; }
+	    }
+	    $answer+=$topcount+$#whichfalse+1;
+	    $dosplice=0;
 	} else {
-	    push (@whichfalse,$afalse);
+	    if ($topcount>0 || $bottomcount>0) {
+		$answer = int(&Math::Random::random_uniform() * ($#whichfalse+1))
+		    + $topcount;
+	    }
 	}
-    }
-    &Apache::lonxml::debug("Answer wants $answer");
-    my $truename=$truelist[$whichtrue];
-    my $dosplice=1;
-    if ($notrue && $Apache::lonhomework::type ne 'survey') {
-	$dosplice=0;
-	&Apache::lonxml::error("There are no true statements available.<br />");
-    }
-    #insert the true statement, keeping track of where it wants to be
-    if ($Apache::response::foilgroup{$truename.'.location'} eq 'top' && $dosplice) {
-	$toplist[$top{$truename}]=$truename;
-	$answer=-1;
-	foreach my $top (reverse(@toplist)) {
-	    if ($top) { $answer++;}
-	    if ($top eq $truename) { last; }
-	}
-	$dosplice=0;
-    } elsif ($Apache::response::foilgroup{$truename.'.location'} eq 'bottom' && $dosplice) {
-	$bottomlist[$bottom{$truename}]=$truename;
-	$answer=-1;
-	foreach my $bot (@bottomlist) {
-	    if ($bot) { $answer++;}
-	    if ($bot eq $truename) { last; }
+	&Apache::lonxml::debug("Answer now wants $answer");
+	#add the top items to the top, bottom items to the bottom
+	for (my $i=0;$i<=$#toplist;$i++) {
+	    if ($toplist[$i]) { unshift(@whichfalse,$toplist[$i]) }
 	}
-	$answer+=$topcount+$#whichfalse+1;
-	$dosplice=0;
-    } else {
-	if ($topcount>0 || $bottomcount>0) {
-	    $answer = int(&Math::Random::random_uniform() * ($#whichfalse+1))
-		+ $topcount;
-	}
-    }
-    &Apache::lonxml::debug("Answer now wants $answer");
-    #add the top items to the top, bottom items to the bottom
-    for (my $i=0;$i<=$#toplist;$i++) {
-	if ($toplist[$i]) { unshift(@whichfalse,$toplist[$i]) }
-    }
-    for (my $i=0;$i<=$#bottomlist;$i++) {
-	if ($bottomlist[$i]) { push(@whichfalse,$bottomlist[$i]) }
-    }
-    #if the true statement is randomized insert it into the list
-    if ($dosplice) { splice(@whichfalse,$answer,0,$truelist[$whichtrue]); }
-  }
-  &Apache::lonxml::debug("Answer is $answer");
-  return ($answer,@whichfalse);
+	for (my $i=0;$i<=$#bottomlist;$i++) {
+	    if ($bottomlist[$i]) { push(@whichfalse,$bottomlist[$i]) }
+	}
+	#if the true statement is randomized insert it into the list
+	if ($dosplice) { splice(@whichfalse,$answer,0,$truelist[$whichtrue]); }
+    }
+    &Apache::lonxml::debug("Answer is $answer");
+    return ($answer,@whichfalse);
 }
 
 sub displayfoils {
-  my ($target,$max,$randomize)=@_;
-  my $result;
+    my ($target,$max,$randomize)=@_;
+    my $result;
 
-  my ($answer,@whichfoils)=&whichfoils($max,$randomize);
-  my $part=$Apache::inputtags::part;
-  my $solved=$Apache::lonhomework::history{"resource.$part.solved"};
-  if ( ($target ne 'tex') &&
-       &Apache::response::show_answer() ) {
-    foreach my $name (@whichfoils) {
-      if ($target ne 'tex') {
-	  $result.="<br />";
-      } else {
-	  $result.='\item \vskip -2 mm  ';
-      }
-      if ($Apache::response::foilgroup{$name.'.value'} eq 'true') { 
-	  if ($target ne 'tex') { $result.='Correct:<b>'; } else { $result.='Correct: \textbf{';}
-      } else {
-	$result.='Incorrect:';
-      }
-      if ($target ne 'tex') {
-	  $result.=$Apache::response::foilgroup{$name.'.text'}."</input>\n";
-      } else {
-	  $result.=$Apache::response::foilgroup{$name.'.text'};
-      }
-      if ($Apache::response::foilgroup{$name.'.value'} eq 'true') {
-	  if ($target ne 'tex') { $result.='</b>';} else {$result.='}';}
-      }
-    }
-  } else {
-    my @alphabet = ('A'..'Z');
-    my $i = 0;
-    my $temp=0;  
-    my $id=$Apache::inputtags::response['-1'];
+    my ($answer,@whichfoils)=&whichfoils($max,$randomize);
     my $part=$Apache::inputtags::part;
-    my $lastresponse=$Apache::lonhomework::history{"resource.$part.$id.submission"};
-    my %lastresponse=&Apache::lonnet::str2hash($lastresponse);
-    foreach my $name (@whichfoils) {
-      if ($target ne 'tex') {
-	  $result.="<br /><input type=\"radio\" name=\"HWVAL_$Apache::inputtags::response['-1']\" value=\"$temp\" ";
-	  if (defined($lastresponse{$name})) { $result .= 'checked="on"'; }
-	  $result .= '>'.$Apache::response::foilgroup{$name.'.text'}."</input>\n";
-      } else {
-	  if ($Apache::lonhomework::type eq 'exam') {
-	      $result .= '{\small \textbf{'.$alphabet[$i].'}}$\bigcirc$'.$Apache::response::foilgroup{$name.'.text'}.'\\\\';  #' stupid emacs
-	      $i++;
-	  } else {
-	      $result .= '\vspace*{-2 mm}\item '.$Apache::response::foilgroup{$name.'.text'};
-	  }
-      }
-      $temp++;
-    }
-  }
-  if ($target ne 'tex') { $result.="<br />"; } else { $result.='\vskip 0 mm '; }
-  return $result;
+    my $solved=$Apache::lonhomework::history{"resource.$part.solved"};
+    if ( ($target ne 'tex') &&
+	 &Apache::response::show_answer() ) {
+	foreach my $name (@whichfoils) {
+	    if ($target ne 'tex') {
+		$result.="<br />";
+	    } else {
+		$result.='\item \vskip -2 mm  ';
+	    }
+	    if ($Apache::response::foilgroup{$name.'.value'} eq 'true') { 
+		if ($target ne 'tex') { $result.='Correct:<b>'; } else { $result.='Correct: \textbf{';}
+	    } else {
+		$result.='Incorrect:';
+	    }
+	    if ($target ne 'tex') {
+		$result.=$Apache::response::foilgroup{$name.'.text'}."</input>\n";
+	    } else {
+		$result.=$Apache::response::foilgroup{$name.'.text'};
+	    }
+	    if ($Apache::response::foilgroup{$name.'.value'} eq 'true') {
+		if ($target ne 'tex') { $result.='</b>';} else {$result.='}';}
+	    }
+	}
+    } else {
+	my @alphabet = ('A'..'Z');
+	my $i = 0;
+	my $temp=0;  
+	my $id=$Apache::inputtags::response['-1'];
+	my $part=$Apache::inputtags::part;
+	my $lastresponse=$Apache::lonhomework::history{"resource.$part.$id.submission"};
+	my %lastresponse=&Apache::lonnet::str2hash($lastresponse);
+	foreach my $name (@whichfoils) {
+	    if ($target ne 'tex') {
+		$result.="<br /><input type=\"radio\" name=\"HWVAL_$Apache::inputtags::response['-1']\" value=\"$temp\" ";
+		if (defined($lastresponse{$name})) { $result .= 'checked="on"'; }
+		$result .= '>'.$Apache::response::foilgroup{$name.'.text'}."</input>\n";
+	    } else {
+		if ($Apache::lonhomework::type eq 'exam') {
+		    $result .= '{\small \textbf{'.$alphabet[$i].'}}$\bigcirc$'.$Apache::response::foilgroup{$name.'.text'}.'\\\\';  #' stupid emacs
+		    $i++;
+		} else {
+		    $result .= '\vspace*{-2 mm}\item '.$Apache::response::foilgroup{$name.'.text'};
+		}
+	    }
+	    $temp++;
+	}
+    }
+    if ($target ne 'tex') { $result.="<br />"; } else { $result.='\vskip 0 mm '; }
+    return $result;
 }
 
 sub displayallanswers {
@@ -448,111 +453,113 @@
 }
 
 sub displayanswers {
-  my ($max,$randomize)=@_;
-  my ($answer,@whichopt) = &whichfoils($max,$randomize);
-  my $result=&Apache::response::answer_header('radiobuttonresponse');
-  foreach my $name (@whichopt) {
-    $result.=&Apache::response::answer_part('radiobuttonresponse',
-		     $Apache::response::foilgroup{$name.'.value'})
-  }
-  $result.=&Apache::response::answer_footer('radiobuttonresponse');
-  return $result;
+    my ($max,$randomize)=@_;
+    my ($answer,@whichopt) = &whichfoils($max,$randomize);
+    my $result=&Apache::response::answer_header('radiobuttonresponse');
+    foreach my $name (@whichopt) {
+	$result.=&Apache::response::answer_part('radiobuttonresponse',
+						$Apache::response::foilgroup{$name.'.value'})
+	}
+    $result.=&Apache::response::answer_footer('radiobuttonresponse');
+    return $result;
 }
 
 sub start_conceptgroup {
-  my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
-  $Apache::radiobuttonresponse::conceptgroup=1;
-  %Apache::response::conceptgroup=();
-  my $result;
-  if ($target eq 'edit') {
-    $result.=&Apache::edit::tag_start($target,$token);
-    $result.=&Apache::edit::text_arg('Concept:','concept',$token,'50').
-	&Apache::edit::end_row().&Apache::edit::start_spanning_row();
-  } elsif ($target eq 'modified') {
-    my $constructtag=&Apache::edit::get_new_args($token,$parstack,
-						 $safeeval,'concept');
-    if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }
-  }
-  return $result;
+    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
+    $Apache::radiobuttonresponse::conceptgroup=1;
+    %Apache::response::conceptgroup=();
+    my $result;
+    if ($target eq 'edit') {
+	$result.=&Apache::edit::tag_start($target,$token);
+	$result.=&Apache::edit::text_arg('Concept:','concept',$token,'50').
+	    &Apache::edit::end_row().&Apache::edit::start_spanning_row();
+    } elsif ($target eq 'modified') {
+	my $constructtag=&Apache::edit::get_new_args($token,$parstack,
+						     $safeeval,'concept');
+	if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }
+    }
+    return $result;
 }
 
 sub end_conceptgroup {
-  my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
-  $Apache::radiobuttonresponse::conceptgroup=0;
-  my $result;
-  if ($target eq 'web' || $target eq 'grade' || $target eq 'answer'  ||
-      $target eq 'tex' || $target eq 'analyze') {
-      &Apache::response::pick_foil_for_concept($target,
-					       ['value','text','location'],
-					       \%Apache::hint::radiobutton,
-					       $parstack,$safeeval);
-  } elsif ($target eq 'edit') {
-    $result=&Apache::edit::end_table();
-  }
-  return $result;
+    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
+    $Apache::radiobuttonresponse::conceptgroup=0;
+    my $result;
+    if ($target eq 'web' || $target eq 'grade' || $target eq 'answer'  ||
+	$target eq 'tex' || $target eq 'analyze') {
+	&Apache::response::pick_foil_for_concept($target,
+						 ['value','text','location'],
+						 \%Apache::hint::radiobutton,
+						 $parstack,$safeeval);
+    } elsif ($target eq 'edit') {
+	$result=&Apache::edit::end_table();
+    }
+    return $result;
 }
 
 sub insert_conceptgroup {
-  my $result="\n\t\t<conceptgroup concept=\"\">".&insert_foil()."\n\t\t</conceptgroup>\n";
-  return $result;
+    my $result="\n\t\t<conceptgroup concept=\"\">".&insert_foil()."\n\t\t</conceptgroup>\n";
+    return $result;
 }
 
 sub start_foil {
-  my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
-  my $result='';
-  if ($target eq 'web' || $target eq 'tex' || $target eq 'analyze') {
-    &Apache::lonxml::startredirection;
-  } elsif ($target eq 'edit') {
-    $result=&Apache::edit::tag_start($target,$token);
-    $result.=&Apache::edit::text_arg('Name:','name',$token);
-    $result.=&Apache::edit::select_or_text_arg('Correct Option:','value',
-				       ['unused','true','false'],$token);
-    my $randomize=&Apache::lonxml::get_param('randomize',$parstack,
-					     $safeeval,'-3');
-    if ($randomize ne 'no') {
-      $result.=&Apache::edit::select_arg('Location:','location',
-					 ['random','top','bottom'],$token);
-    }
-    $result.=&Apache::edit::end_row().&Apache::edit::start_spanning_row();
-  } elsif ($target eq 'modified') {
-     my $constructtag=&Apache::edit::get_new_args($token,$parstack,$safeeval,
-						  'value','name','location');
-    if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }
-  } 
-  return $result;
+    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
+    my $result='';
+    if ($target eq 'web' || $target eq 'tex' || $target eq 'analyze') {
+	&Apache::lonxml::startredirection;
+    } elsif ($target eq 'edit') {
+	$result=&Apache::edit::tag_start($target,$token);
+	$result.=&Apache::edit::text_arg('Name:','name',$token);
+	$result.=&Apache::edit::select_or_text_arg('Correct Option:','value',
+						   ['unused','true','false'],
+						   $token);
+	my $randomize=&Apache::lonxml::get_param('randomize',$parstack,
+						 $safeeval,'-3');
+	if ($randomize ne 'no') {
+	    $result.=&Apache::edit::select_arg('Location:','location',
+					       ['random','top','bottom'],$token);
+	}
+	$result.=&Apache::edit::end_row().&Apache::edit::start_spanning_row();
+    } elsif ($target eq 'modified') {
+	my $constructtag=&Apache::edit::get_new_args($token,$parstack,
+						     $safeeval,'value','name',
+						     'location');
+	if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }
+    } 
+    return $result;
 }
 
 sub end_foil {
-  my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
-  my $text='';
-  if ($target eq 'web' || $target eq 'tex' || $target eq 'analyze') {
-      $text=&Apache::lonxml::endredirection;
-  }
-  if ($target eq 'web' || $target eq 'grade' || $target eq 'answer'  || $target eq 'tex' || $target eq 'analyze') {
-    my $value = &Apache::lonxml::get_param('value',$parstack,$safeeval);
-    if ($value ne 'unused') {
-      my $name = &Apache::lonxml::get_param('name',$parstack,$safeeval);
-      my $location =&Apache::lonxml::get_param('location',$parstack,$safeeval);
-      if (!$name) { $name=$Apache::lonxml::curdepth; }
-      if ( $Apache::radiobuttonresponse::conceptgroup
-	   && !&Apache::response::showallfoils() ) {
-	push @{ $Apache::response::conceptgroup{'names'} }, $name;
-	$Apache::response::conceptgroup{"$name.value"} = $value;
-	$Apache::response::conceptgroup{"$name.text"} = $text;	
-	$Apache::response::conceptgroup{"$name.location"} = $location;	
-      } else {
-	push @{ $Apache::response::foilgroup{'names'} }, $name;
-	$Apache::response::foilgroup{"$name.value"} = $value;
-	$Apache::response::foilgroup{"$name.text"} = $text;
-	$Apache::response::foilgroup{"$name.location"} = $location;
-      }
+    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
+    my $text='';
+    if ($target eq 'web' || $target eq 'tex' || $target eq 'analyze') {
+	$text=&Apache::lonxml::endredirection;
+    }
+    if ($target eq 'web' || $target eq 'grade' || $target eq 'answer'  || $target eq 'tex' || $target eq 'analyze') {
+	my $value = &Apache::lonxml::get_param('value',$parstack,$safeeval);
+	if ($value ne 'unused') {
+	    my $name = &Apache::lonxml::get_param('name',$parstack,$safeeval);
+	    my $location =&Apache::lonxml::get_param('location',$parstack,$safeeval);
+	    if (!$name) { $name=$Apache::lonxml::curdepth; }
+	    if ( $Apache::radiobuttonresponse::conceptgroup
+		 && !&Apache::response::showallfoils() ) {
+		push @{ $Apache::response::conceptgroup{'names'} }, $name;
+		$Apache::response::conceptgroup{"$name.value"} = $value;
+		$Apache::response::conceptgroup{"$name.text"} = $text;	
+		$Apache::response::conceptgroup{"$name.location"} = $location;
+	    } else {
+		push @{ $Apache::response::foilgroup{'names'} }, $name;
+		$Apache::response::foilgroup{"$name.value"} = $value;
+		$Apache::response::foilgroup{"$name.text"} = $text;
+		$Apache::response::foilgroup{"$name.location"} = $location;
+	    }
+	}
     }
-  }
-  return '';
+    return '';
 }
 
 sub insert_foil {
-  return '
+    return '
 <foil name="" value="unused">
 <startouttext />
 <endouttext />

--albertel1078527588--