--- loncom/homework/rankresponse.pm 2004/12/04 00:41:26 1.42
+++ loncom/homework/rankresponse.pm 2005/12/06 10:13:46 1.49
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# rank style response
#
-# $Id: rankresponse.pm,v 1.42 2004/12/04 00:41:26 albertel Exp $
+# $Id: rankresponse.pm,v 1.49 2005/12/06 10:13:46 albertel Exp $
# Copyright Michigan State University Board of Trustees
#
# This file is part of the LearningOnline Network with CAPA (LON-CAPA).
@@ -166,18 +166,31 @@ sub displayanswers {
if (!defined(@{ $Apache::response::foilgroup{'names'} })) { return; }
my @names = @{ $Apache::response::foilgroup{'names'} };
my @whichfoils = &whichfoils($max,$randomize);
- my $result=&Apache::response::answer_header('rankresponse');
my @correctorder=&get_correct_order($tol,@whichfoils);
- foreach my $order (@correctorder) {
- $result.=&Apache::response::answer_part('rankresponse',$order);
+ my $result;
+ if ($Apache::lonhomework::type eq 'exam') {
+ my @alphabet = ('A'..'Z');
+ my $i=0;
+ foreach my $order (@correctorder) {
+ $result.=&Apache::response::answer_header('rankresponse',$i++);
+ $result.=&Apache::response::answer_part('rankresponse',
+ $alphabet[$order-1]);
+ $result.=&Apache::response::answer_part('rankresponse',$order);
+ $result.=&Apache::response::answer_footer('rankresponse');
+ }
+ } else {
+ $result=&Apache::response::answer_header('rankresponse');
+ foreach my $order (@correctorder) {
+ $result.=&Apache::response::answer_part('rankresponse',$order);
+ }
+ $result.=&Apache::response::answer_footer('rankresponse');
}
- $result.=&Apache::response::answer_footer('rankresponse');
return $result;
}
sub check_response_order {
my (%responsehash)=@_;
- my @order=sort(values(%responsehash));
+ my @order=sort( {$a <=> $b} values(%responsehash));
my $lastvalue=0;
my $expected=1;
my $malformed=0;
@@ -195,7 +208,7 @@ sub check_response_order {
sub grade_response {
my ($max,$randomize,$tol)=@_;
my (@whichfoils)=&whichfoils($max,$randomize);
- if (!defined($ENV{'form.submitted'})) { return; }
+ if (!&Apache::response::submitted()) { return; }
my %responsehash;
my %grade;
my ($temp,$right,$wrong,$ignored)=(1,0,0,0);
@@ -263,8 +276,11 @@ sub displayfoils {
foreach my $name (@whichfoils) {
my $text=$Apache::response::foilgroup{$name.'.text'};
my $value=shift(@correctorder);
- if ($target eq 'web') {$result.='
';} else {$result.=' \strut\\\\\strut ';}
- $result.=$value.':'.$text;
+ if ($target eq 'web') {
+ $result.='
'.$value.': '.$text;
+ } else {
+ $result.=' \strut\\\\\strut '.$value.':'.$text;
+ }
}
} else {
my $i = 0;
@@ -425,7 +441,10 @@ sub end_foil {
if ($value ne 'unused') {
my $name = &Apache::lonxml::get_param('name',$parstack,$safeeval);
&Apache::lonxml::debug("Got a name of :$name:");
- if (!$name) { $name=$Apache::lonxml::curdepth; }
+ if ($name eq "") {
+ &Apache::lonxml::warning("Foils without names exist. This can cause problems to malfunction.");
+ $name=$Apache::lonxml::curdepth;
+ }
&Apache::lonxml::debug("Using a name of :$name:");
if (defined($Apache::response::foilnames{$name})) {
&Apache::lonxml::error(&mt("Foil name [_1] appears more than once. Foil names need to be unique.",$name));