--- loncom/homework/grades.pm 2003/11/06 15:22:33 1.147
+++ loncom/homework/grades.pm 2003/11/07 08:56:52 1.148
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# The LON-CAPA Grading handler
#
-# $Id: grades.pm,v 1.147 2003/11/06 15:22:33 albertel Exp $
+# $Id: grades.pm,v 1.148 2003/11/07 08:56:52 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -177,26 +177,88 @@ sub showResourceInfo {
return $result,$responseType,$hdgrade,$partlist,$handgrade;
}
+
+sub get_order {
+ my ($partid,$respid,$symb,$uname,$udom)=@_;
+ my (undef,undef,$url)=&Apache::lonnet::decode_symb($symb);
+ $url=&Apache::lonnet::clutter($url);
+ my $subresult=&Apache::lonnet::ssi($url,
+ ('grade_target' => 'analyze'),
+ ('grade_domain' => $udom),
+ ('grade_symb' => $symb),
+ ('grade_courseid' =>
+ $ENV{'request.course.id'}),
+ ('grade_username' => $uname));
+ (my $debug,$subresult)=split(/_HASH_REF__/,$subresult,2);
+ Apache->request->print($debug);
+ my %analyze=&Apache::lonnet::str2hash($subresult);
+ return ($analyze{"$partid.$respid.shown"});
+}
#--- Clean response type for display
-#--- Currently filters option response type only.
+#--- Currently filters option/rank/radiobutton/match/essay response types only.
sub cleanRecord {
- my ($answer,$response,$symb) = @_;
- if ($response eq 'option') {
- my (@IDs,@ans);
- foreach (split(/\&/,&Apache::lonnet::unescape($answer))) {
- my ($optionID,$ans) = split(/=/);
- push @IDs,$optionID.'';
- push @ans,$ans;
+ my ($answer,$response,$symb,$partid,$respid,$record,$order,$version) = @_;
+ my $grayFont = '';
+ if ($response =~ /^(option|rank)$/) {
+ my %answer=&Apache::lonnet::str2hash($answer);
+ my %grading=&Apache::lonnet::str2hash($record->{$version."resource.$partid.$respid.submissiongrading"});
+ my ($toprow,$bottomrow);
+ foreach my $foil (@$order) {
+ if ($grading{$foil} == 1) {
+ $toprow.='
'.$answer{$foil}.' | ';
+ } else {
+ $toprow.=''.$answer{$foil}.' | ';
+ }
+ $bottomrow.=''.$grayFont.$foil.' | ';
}
- my $grayFont = '';
return ''.
- 'Answer | '.
- (join ' | ',@ans).' |
'.
- ''.$grayFont.'Option ID | '.$grayFont.
- (join ' | '.$grayFont,@IDs).' |
'.
- '
';
- }
- if ($response eq 'essay') {
+ 'Answer | '.$toprow.'
'.
+ ''.$grayFont.'Option ID | '.
+ $grayFont.$bottomrow.'
'.'';
+ } elsif ($response eq 'match') {
+ my %answer=&Apache::lonnet::str2hash($answer);
+ my %grading=&Apache::lonnet::str2hash($record->{$version."resource.$partid.$respid.submissiongrading"});
+ my @items=&Apache::lonnet::str2array($record->{$version."resource.$partid.$respid.submissionitems"});
+ my ($toprow,$middlerow,$bottomrow);
+ foreach my $foil (@$order) {
+ my $item=shift(@items);
+ if ($grading{$foil} == 1) {
+ $toprow.=''.$item.' | ';
+ $middlerow.=''.$grayFont.$answer{$foil}.' | ';
+ } else {
+ $toprow.=''.$item.' | ';
+ $middlerow.=''.$grayFont.$answer{$foil}.' | ';
+ }
+ $bottomrow.=''.$grayFont.$foil.' | ';
+ }
+ return ''.
+ 'Answer | '.$toprow.'
'.
+ ''.$grayFont.'Item ID | '.
+ $middlerow.'
'.
+ ''.$grayFont.'Option ID | '.
+ $bottomrow.'
'.'
';
+ } elsif ($response eq 'radiobutton') {
+ my %answer=&Apache::lonnet::str2hash($answer);
+ my ($toprow,$bottomrow);
+ my $correct=($order->[0])+1;
+ for (my $i=1;$i<=$#$order;$i++) {
+ my $foil=$order->[$i];
+ if (exists($answer{$foil})) {
+ if ($i == $correct) {
+ $toprow.='true | ';
+ } else {
+ $toprow.='true | ';
+ }
+ } else {
+ $toprow.='false | ';
+ }
+ $bottomrow.=''.$grayFont.$foil.' | ';
+ }
+ return ''.
+ 'Answer | '.$toprow.'
'.
+ ''.$grayFont.'Option ID | '.
+ $grayFont.$bottomrow.'
'.'
';
+ } elsif ($response eq 'essay') {
if (! exists ($ENV{'form.'.$symb})) {
my (%keyhash) = &Apache::lonnet::dump('nohist_handgrade',
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
@@ -1524,7 +1586,7 @@ KEYWORDS
'Nothing submitted - no attempts
';
} else {
foreach (@$string) {
- my ($partid,$respid) = /^resource\.(\w+)\.(\w+)\.submission/;
+ my ($partid,$respid) = /^resource\.([^\.]*)\.([^\.]*)\.submission/;
if ($part eq ($partid.'_'.$respid)) {
my ($ressub,$subval) = split(/:/,$_,2);
# Similarity check
@@ -1544,6 +1606,7 @@ KEYWORDS
&keywords_highlight($oessay).'
';
}
}
+ my $order=&get_order($partid,$respid,$symb,$uname,$udom);
$lastsubonly.='Part '.
$partid.' ( ID '.$respid.
' ) '.
@@ -1554,7 +1617,7 @@ KEYWORDS
'Like all files provided by users, '.
'this file may contain virusses ':'').
'Submitted Answer: '.
- &cleanRecord($subval,$responsetype,$symb).
+ &cleanRecord($subval,$responsetype,$symb,$partid,$respid,\%record,$order).
'
'.$similar."\n"
if ($ENV{'form.lastSub'} eq 'lastonly' ||
($ENV{'form.lastSub'} eq 'hdgrade' &&
@@ -1569,7 +1632,7 @@ KEYWORDS
}
} elsif ($ENV{'form.lastSub'} eq 'datesub') {
my (undef,$responseType,undef,$parts) = &showResourceInfo($url);
- $request->print(&displaySubByDates(\$symb,\%record,$parts,$responseType,$checkIcon));
+ $request->print(&displaySubByDates($symb,\%record,$parts,$responseType,$checkIcon,$uname,$udom));
} elsif ($ENV{'form.lastSub'} =~ /^(last|all)$/) {
$request->print(&Apache::loncommon::get_previous_attempt($symb,$uname,$udom,
$ENV{'request.course.id'},
@@ -3002,7 +3065,7 @@ sub displayPage {
}
$responseType{$partid} = \%responseIds;
}
- $studentTable.= &displaySubByDates(\$symbx,\%record,$parts,\%responseType,$checkIcon);
+ $studentTable.= &displaySubByDates($symbx,\%record,$parts,\%responseType,$checkIcon,$uname,$udom);
}
} elsif ($ENV{'form.lastSub'} eq 'all') {
@@ -3038,7 +3101,7 @@ sub displayPage {
}
sub displaySubByDates {
- my ($symbx,$record,$parts,$responseType,$checkIcon) = @_;
+ my ($symb,$record,$parts,$responseType,$checkIcon,$uname,$udom) = @_;
my $studentTable=''.
''.
'Date/Time | '.
@@ -3046,6 +3109,7 @@ sub displaySubByDates {
'Status | ';
my ($version);
my %mark;
+ my %orders;
$mark{'correct_by_student'} = $checkIcon;
if (!exists($$record{'1:timestamp'})) {
return ' Nothing submitted - no attempts ';
@@ -3070,10 +3134,14 @@ sub displaySubByDates {
$displaySub[0].='Trial '.
$$record{"$version:resource.$partid.tries"};
}
- &Apache::lonnet::logthis("Part is $partid responseType is ".join(':',%$responseType));
my $responseType=$responseType->{$partid}->{$responseId};
+ if (!exists($orders{$partid})) { $orders{$partid}={}; }
+ if (!exists($orders{$partid}->{$responseId})) {
+ $orders{$partid}->{$responseId}=
+ &get_order($partid,$responseId,$symb,$uname,$udom);
+ }
$displaySub[0].=' '.
- &cleanRecord($$record{$version.':'.$matchKey},$responseType,$$symbx).' ';
+ &cleanRecord($$record{$version.':'.$matchKey},$responseType,$symb,$partid,$responseId,$record,$orders{$partid}->{$responseId},"$version:").' ';
}
}
if (exists $$record{"$version:resource.$partid.award"}) {
|
|