--- loncom/homework/grades.pm	2004/09/29 05:45:34	1.204.2.7
+++ loncom/homework/grades.pm	2004/07/16 19:50:23	1.205
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.204.2.7 2004/09/29 05:45:34 albertel Exp $
+# $Id: grades.pm,v 1.205 2004/07/16 19:50:23 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -167,21 +167,6 @@ sub response_type {
     return \@partlist,\%handgrade,\%responseType;
 }
 
-sub get_display_part {
-    my ($partID,$url,$symb)=@_;
-    if (!defined($symb) || $symb eq '') {
-	$symb=$ENV{'form.symb'};
-	if ($symb eq '') { $symb=&Apache::lonnet::symbread($url) }
-    }
-    my $display=&Apache::lonnet::EXT('resource.'.$partID.'.display',$symb);
-    &Apache::lonnet::logthis("\nsymb $symb\n url  $url\npartID $partID\ndisplay $display \n");
-    if (defined($display) and $display ne '') {
-	$display.= " (<font color=\"#999900\">id $partID</font>)";
-    } else {
-	$display=$partID;
-    }
-    return $display;
-}
 #--- Show resource title
 #--- and parts and response type
 sub showResourceInfo {
@@ -209,8 +194,7 @@ sub showResourceInfo {
 	    }
 	    $partsseen{$partID}=1;
 	}
-	my $display_part=&get_display_part($partID,$url);
-	$result.='<td><b>Part: </b>'.$display_part.' <font color="#999999">'.
+	$result.='<td><b>Part </b>'.$partID.' <font color="#999999">'.
 	    $resID.'</font></td>'.
 	    '<td><b>Type: </b>'.$responsetype.'</td></tr>';
 #	    '<td><b>Handgrade: </b>'.$handgrade.'</td></tr>';
@@ -365,27 +349,36 @@ sub getclasslist {
     #
     my %sections;
     my %fullnames;
-    foreach (keys(%$classlist)) {
-        # the following undefs are for 'domain', and 'username' respectively.
-	my (undef,undef,$end,$start,$id,$section,$fullname,$status)=
-            @{$classlist->{$_}};
+    foreach my $student (keys(%$classlist)) {
+        my $end      = 
+            $classlist->{$student}->[&Apache::loncoursedata::CL_END()];
+        my $start    = 
+            $classlist->{$student}->[&Apache::loncoursedata::CL_START()];
+        my $id       = 
+            $classlist->{$student}->[&Apache::loncoursedata::CL_ID()];
+        my $section  = 
+            $classlist->{$student}->[&Apache::loncoursedata::CL_SECTION()];
+        my $fullname = 
+            $classlist->{$student}->[&Apache::loncoursedata::CL_FULLNAME()];
+        my $status   = 
+            $classlist->{$student}->[&Apache::loncoursedata::CL_STATUS()];
 	# filter students according to status selected
 	if ($filterlist && $ENV{'form.Status'} ne 'Any') {
 	    if ($ENV{'form.Status'} ne $status) {
-		delete ($classlist->{$_});
+		delete ($classlist->{$student});
 		next;
 	    }
 	}
-	$section = ($section ne '' ? $section : 'no');
+	$section = ($section ne '' ? $section : 'none');
 	if (&canview($section)) {
 	    if ($getsec eq 'all' || $getsec eq $section) {
 		$sections{$section}++;
-		$fullnames{$_}=$fullname;
+		$fullnames{$student}=$fullname;
 	    } else {
-		delete($classlist->{$_});
+		delete($classlist->{$student});
 	    }
 	} else {
-	    delete($classlist->{$_});
+	    delete($classlist->{$student});
 	}
     }
     my %seen = ();
@@ -698,9 +691,7 @@ LISTJAVASCRIPT
 	    '<td>'.&nameUserString('header').'</td>';
 	if ($ENV{'form.showgrading'} eq 'yes' && $submitonly ne 'all') {
 	    foreach (sort(@$partlist)) {
-		my $display_part=&get_display_part((split(/_/))[0],$url,$symb);
-		$gradeTable.='<td><b>&nbsp;Part: '.$display_part.
-		    ' Status&nbsp;</b></td>';
+		$gradeTable.='<td><b>&nbsp;Part '.(split(/_/))[0].' Status&nbsp;</b></td>';
 	    }
 	}
 	$loop++;
@@ -1102,7 +1093,7 @@ sub sub_page_kw_js {
     var ypos = (screen.height-height)/2-30;
     ypos = (ypos < 0) ? '0' : ypos;
 
-    pWin = window.open('', 'MessageCenter', 'resizable=yes,toolbar=no,location=no,scrollbars='+scrollbar+',screenx='+xpos+',screeny='+ypos+',width=600,height='+height);
+    pWin = window.open('', 'MessageCenter', 'toolbar=no,location=no,scrollbars='+scrollbar+',screenx='+xpos+',screeny='+ypos+',width=600,height='+height);
     pWin.focus();
     pDoc = pWin.document;
     pDoc.open('text/html','replace');
@@ -1233,7 +1224,7 @@ sub sub_page_kw_js {
     var ypos = (screen.height-330)/2-30;
     ypos = (ypos < 0) ? '0' : ypos;
 
-    hwdWin = window.open('', 'KeywordHighlightCentral', 'resizeable=yes,toolbar=no,location=no,scrollbars=no,width=400,height=300,screenx='+xpos+',screeny='+ypos);
+    hwdWin = window.open('', 'KeywordHighlightCentral', 'toolbar=no,location=no,scrollbars=no,width=400,height=300,screenx='+xpos+',screeny='+ypos);
     hwdWin.focus();
     var hDoc = hwdWin.document;
     hDoc.open('text/html','replace');
@@ -1307,9 +1298,8 @@ sub gradeBox {
 		  '' : $$record{'resource.'.$partid.'.awarded'}*$wgt);
     my $result='<input type="hidden" name="WGT'.$counter.'_'.$partid.'" value="'.$wgt.'" />'."\n";
 
-    my $display_part=&get_display_part($partid,undef,$symb);
     $result.='<table border="0"><tr><td>'.
-	'<b>Part: </b>'.$display_part.' <b>Points: </b></td><td>'."\n";
+	'<b>Part </b>'.$partid.' <b>Points: </b></td><td>'."\n";
 
     my $ctr = 0;
     $result.='<table border="0"><tr>'."\n";  # display radio buttons in a nice table 10 across
@@ -1641,12 +1631,11 @@ KEYWORDS
 	    my %seenparts;
 	    for my $part (sort keys(%$handgrade)) {
 		my ($partid,$respid) = split(/_/,$part);
-		my $display_part=&get_display_part($partid,$url,$symb);
 		if ($ENV{"form.$uname:$udom:$partid:submitted_by"}) {
 		    if (exists($seenparts{$partid})) { next; }
 		    $seenparts{$partid}=1;
-		    my $submitby='<b>Part:</b> '.$display_part.
-			' <b>Collaborative submission by:</b> '.
+		    my $submitby='<b>Part '.$partid.
+			' Collaborative submission by: </b>'.
 			'<a href="javascript:viewSubmitter(\''.
 			$ENV{"form.$uname:$udom:$partid:submitted_by"}.
 			'\')"; TARGET=_self>'.
@@ -1656,8 +1645,8 @@ KEYWORDS
 		}
 		my $responsetype = $responseType->{$partid}->{$respid};
 		if (!exists($record{"resource.$partid.$respid.submission"})) {
-		    $lastsubonly.='<tr><td bgcolor="#ffffe6"><b>Part:</b> '.
-			$display_part.' <font color="#999999">( ID '.$respid.
+		    $lastsubonly.='<tr><td bgcolor="#ffffe6"><b>Part '.
+			$partid.'</b> <font color="#999999">( ID '.$respid.
 			' )</font>&nbsp; &nbsp;'.
 			'<font color="red">Nothing submitted - no attempts</font><br /><br />';
 		    next;
@@ -1685,9 +1674,8 @@ KEYWORDS
 		    if ($ENV{'form.lastSub'} eq 'lastonly' || 
 			($ENV{'form.lastSub'} eq 'hdgrade' && 
 			 $$handgrade{$part} eq 'yes')) {
-			my $display_part=&get_display_part($partid,$url,$symb);
-			$lastsubonly.='<tr><td bgcolor="#ffffe6"><b>Part:</b> '.
-			    $display_part.' <font color="#999999">( ID '.$respid.
+			$lastsubonly.='<tr><td bgcolor="#ffffe6"><b>Part '.
+			    $partid.'</b> <font color="#999999">( ID '.$respid.
 			    ' )</font>&nbsp; &nbsp;';
 			if ($record{"resource.$partid.$respid.uploadedurl"}) {
 			    &Apache::lonnet::allowuploaded('/adm/grades',
@@ -2320,7 +2308,7 @@ sub viewgrades {
     my $sectionClass;
     if ($ENV{'form.section'} eq 'all') {
 	$sectionClass='Class </h3>';
-    } elsif ($ENV{'form.section'} eq 'no') {
+    } elsif ($ENV{'form.section'} eq 'none') {
 	$sectionClass='Students in no Section </h3>';
     } else {
 	$sectionClass='Students in Section '.$ENV{'form.section'}.'</h3>';
@@ -2347,8 +2335,7 @@ sub viewgrades {
 	    $ctsparts.'" value="'.$partid.'" />'."\n";
 	$result.='<input type="hidden" name="weight_'.
 	    $partid.'" value="'.$weight{$partid}.'" />'."\n";
-	my $display_part=&get_display_part($partid,$url,$symb);
-	$result.='<tr><td><b>Part:</b> '.$display_part.'&nbsp; &nbsp;<b>Point:</b> </td><td>';
+	$result.='<tr><td><b>Part  '.$partid.'&nbsp; &nbsp;Point:</b> </td><td>';
 	$result.='<table border="0"><tr>';  
 	my $ctr = 0;
 	while ($ctr<=$weight{$partid}) { # display radio buttons in a nice table 10 across
@@ -2387,17 +2374,14 @@ sub viewgrades {
 	my $display=&Apache::lonnet::metadata($url,$part.'.display');
 	$display =~ s|^Number of Attempts|Tries<br />|; # makes the column narrower
 	if  (!$display) { $display = &Apache::lonnet::metadata($url,$part.'.name'); }
-	my ($partid) = &split_part_type($part);
-	my $display_part=&get_display_part($partid,$url,$symb);
 	if ($display =~ /^Partial Credit Factor/) {
-	    $result.='<td><b>Score Part:</b> '.$display_part.
-		' <br /><b>(weight = '.$weight{$partid}.')</b></td>'."\n";
+	    my ($partid) = &split_part_type($part);
+	    $result.='<td><b>Score Part '.$partid.'<br />(weight = '.
+		$weight{$partid}.')</b></td>'."\n";
 	    next;
-	} else {
-	    $display =~s/\[Part: \Q$partid\E\]/Part:<\/b> $display_part/;
 	}
 	$display =~ s|Problem Status|Grade Status<br />|;
-	$result.='<td><b>'.$display.'</td>'."\n";
+	$result.='<td><b>'.$display.'</b></td>'."\n";
     }
     $result.='</tr>';
 
@@ -2527,10 +2511,9 @@ sub editgrades {
 	}
     }
     foreach my $partid (@partid) {
-	my $display_part=&get_display_part($partid,$url,$symb);
 	$result .= '<td colspan="'.$columns{$partid}.
-	    '" align="center"><b>Part:</b> '.$display_part.
-	    ' (Weight = '.$weight{$partid}.')</td>';
+	    '" align="center"><b>Part '.$partid.
+	    '</b> (Weight = '.$weight{$partid}.')</td>';
 
     }
     $result .= '</tr><tr bgcolor="#deffff">';
@@ -3239,14 +3222,13 @@ sub displaySubByDates {
 	foreach my $partid (@{$parts}) {
 	    my @matchKey = sort(grep /^resource\.\Q$partid\E\..*?\.submission$/,@versionKeys);
 #	    next if ($$record{"$version:resource.$partid.solved"} eq '');
-	    my $display_part=&get_display_part($partid,undef,$symb);
 	    foreach my $matchKey (@matchKey) {
 		if (exists($$record{$version.':'.$matchKey}) &&
 		    $$record{$version.':'.$matchKey} ne '') {
 		    my ($responseId)=($matchKey=~ /^resource\.\Q$partid\E\.(.*?)\.submission$/);
-		    $displaySub[0].='<b>Part:</b>&nbsp;'.$display_part.'&nbsp;';
+		    $displaySub[0].='<b>Part&nbsp;'.$partid.'&nbsp;';
 		    $displaySub[0].='<font color="#999999">(ID&nbsp;'.
-			$responseId.')</font>&nbsp;<b>';
+			$responseId.')</font>&nbsp;';
 		    if ($$record{"$version:resource.$partid.tries"} eq '') {
 			$displaySub[0].='Trial&nbsp;not&nbsp;counted';
 		    } else {
@@ -3264,14 +3246,14 @@ sub displaySubByDates {
 		}
 	    }
 	    if (exists $$record{"$version:resource.$partid.award"}) {
-		$displaySub[1].='<b>Part:</b>&nbsp;'.$display_part.' &nbsp;'.
+		$displaySub[1].='<b>Part&nbsp;'.$partid.'</b> &nbsp;'.
 		    lc($$record{"$version:resource.$partid.award"}).' '.
 		    $mark{$$record{"$version:resource.$partid.solved"}}.
 		    '<br />';
 	    }
 	    if (exists $$record{"$version:resource.$partid.regrader"}) {
 		$displaySub[2].=$$record{"$version:resource.$partid.regrader"}.
-		    ' (<b>'.&mt('Part').':</b> '.$display_part.')';
+		    ' (<b>'.&mt('Part').':</b> '.$partid.')';
 	    }
 	}
 	# needed because old essay regrader has not parts info
@@ -3368,13 +3350,12 @@ sub updateGradeByPage {
 		    $changeflag++;
 		    $newpts = '';
 		}
-		my $display_part=&get_display_part($partid,undef,
-						   $curRes->symb());
+
 		my $oldstatus = $ENV{'form.solved'.$question.'_'.$partid};
-		$displayPts[0].='&nbsp;<b>Part:</b> '.$display_part.' = '.
+		$displayPts[0].='&nbsp;<b>Part</b> '.$partid.' = '.
 		    (($oldstatus eq 'excused') ? 'excused' : $oldpts).
 		    '&nbsp;<br>';
-		$displayPts[1].='&nbsp;<b>Part:</b> '.$display_part.' = '.
+		$displayPts[1].='&nbsp;<b>Part</b> '.$partid.' = '.
 		     (($score eq 'excused') ? 'excused' : $newpts).
 		    '&nbsp;<br>';
 
@@ -3846,8 +3827,7 @@ sub scantron_find_student {
 
 sub scantron_filter {
     my ($curres)=@_;
-                        # randomout is dysfunctional at best for this purpose
-    if (ref($curres) && $curres->is_problem()) { #&& !$curres->randomout) {
+    if (ref($curres) && $curres->is_problem() && !$curres->randomout) {
 	return 1;
     }
     return 0;
@@ -3999,7 +3979,7 @@ sub scantron_form_start {
   <input type="hidden" name="selectpage" value="$ENV{'form.selectpage'}" />
   <input type="hidden" name="scantron_format" value="$ENV{'form.scantron_format'}" />
   <input type="hidden" name="scantron_selectfile" value="$ENV{'form.scantron_selectfile'}" />
-  <input type="hidden" name="scantron_maxbubble" value="$max_bubble" />
+  <input type="hidden" name="scantron_maxbubble" value="$max_bubble'" />
   <input type="hidden" name="scantron_CODElist" value="$ENV{'form.scantron_CODElist'}" />
   <input type="hidden" name="scantron_CODEunique" value="$ENV{'form.scantron_CODEunique'}" />
   <input type="hidden" name="scantron_options_redo" value="$ENV{'form.scantron_options_redo'}" />
@@ -4472,8 +4452,7 @@ sub scantron_validate_CODE {
 				     $line,'incorrectCODE',\%allcodes);
 	    return(1,$currentphase);
 	}
-	if (exists($usedCODEs{$CODE}) 
-	    && $ENV{'form.scantron_CODEunique'} eq 'yes'
+	if (exists($usedCODEs{$CODE}) && $ENV{'form.scantron_CODEunique'}
 	    && !$$scan_record{'scantron.CODE_ignore_dup'}) {
 	    &scantron_get_correction($r,$i,$scan_record,
 				     \%scantron_config,
@@ -4640,10 +4619,9 @@ SCANTRONFORM
 		$form{'CODE'}=$scan_record->{'scantron.CODE'};
 	    }
 	    my $result=&Apache::lonnet::ssi($resource->src(),%form);
-	    if (&Apache::loncommon::connection_aborted($r)) { last; }
+
 	}
 	$completedstudents{$uname}={'line'=>$line};
-	if (&Apache::loncommon::connection_aborted($r)) { last; }
     } continue {
 	&Apache::lonnet::delenv('form.counter');
 	&Apache::lonnet::delenv('scantron\.');
@@ -4907,9 +4885,6 @@ GRADINGMENUJS
 
     $result.=&mt('Student Status').':</b>'.&Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,1,undef);
 
-    if (ref($sections) && (grep /no/,@$sections)) {
-	$result.='&nbsp;(Section "no" implies the students were not assigned a section.)<br />';
-    }
     $result.='</td></tr>';
 
     $result.='<tr bgcolor="#ffffe6"valign="top"><td>'.
@@ -5109,7 +5084,8 @@ sub send_header {
 
 sub send_footer {
     my ($request)= @_;
-    $request->print('</body></html>');
+    $request->print('</body>');
+    $request->print(&Apache::lontexconvert::footer());
 }
 
 1;