--- loncom/homework/grades.pm	2008/06/24 17:42:01	1.523
+++ loncom/homework/grades.pm	2008/07/08 05:29:24	1.526
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.523 2008/06/24 17:42:01 raeburn Exp $
+# $Id: grades.pm,v 1.526 2008/07/08 05:29:24 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -240,8 +240,8 @@ sub showResourceInfo {
     my %resptype = ();
     my $hdgrade='no';
     my %partsseen;
-    foreach my $partID (sort keys(%$responseType)) {
-	foreach my $resID (sort keys(%{ $responseType->{$partID} })) {
+    foreach my $partID (sort(keys(%$responseType))) {
+	foreach my $resID (sort(keys(%{ $responseType->{$partID} }))) {
 	    my $handgrade=$$handgrade{$partID.'_'.$resID};
 	    my $responsetype = $responseType->{$partID}->{$resID};
 	    $hdgrade = $handgrade if ($handgrade eq 'yes');
@@ -278,7 +278,7 @@ sub reset_caches {
     }
 
     sub get_analyze {
-	my ($symb,$uname,$udom)=@_;
+	my ($symb,$uname,$udom,$no_increment)=@_;
 	my $key = "$symb\0$uname\0$udom";
 	return $analyze_cache{$key} if (exists($analyze_cache{$key}));
 
@@ -290,15 +290,16 @@ sub reset_caches {
 					    'grade_symb' => $symb,
 					    'grade_courseid' => 
 					    $env{'request.course.id'},
-					    'grade_username' => $uname));
+					    'grade_username' => $uname,
+                                            'grade_noincrement' => $no_increment));
 	(undef,$subresult)=split(/_HASH_REF__/,$subresult,2);
 	my %analyze=&Apache::lonnet::str2hash($subresult);
 	return $analyze_cache{$key} = \%analyze;
     }
 
     sub get_order {
-	my ($partid,$respid,$symb,$uname,$udom)=@_;
-	my $analyze = &get_analyze($symb,$uname,$udom);
+	my ($partid,$respid,$symb,$uname,$udom,$no_increment)=@_;
+	my $analyze = &get_analyze($symb,$uname,$udom,$no_increment);
 	return $analyze->{"$partid.$respid.shown"};
     }
 
@@ -1030,7 +1031,7 @@ LISTJAVASCRIPT
 	       '&nbsp;'.$section.($group ne '' ?'/'.$group:'').'</td>'."\n";
 
 	    if ($env{'form.showgrading'} eq 'yes' && $submitonly ne 'all') {
-		foreach (sort keys(%status)) {
+		foreach (sort(keys(%status))) {
 		    next if ($_ =~ /^resource.*?submitted_by$/);
 		    $gradeTable.='<td align="center">&nbsp;'.&mt($status{$_}).'&nbsp;</td>'."\n";
 		}
@@ -2225,8 +2226,8 @@ KEYWORDS
 	$seen{$partid}++;
 	next if ($$handgrade{$part_resp} ne 'yes' 
 		 && $env{'form.lastSub'} eq 'hdgrade');
-	push @partlist,$partid;
-	push @gradePartRespid,$partid.'.'.$respid;
+	push(@partlist,$partid);
+	push(@gradePartRespid,$partid.'.'.$respid);
 	$request->print(&gradeBox($request,$symb,$uname,$udom,$counter,$partid,\%record));
     }
     $request->print('</div></div>');
@@ -2553,7 +2554,7 @@ sub processHandGrade {
 
     my (@parsedlist,@nextlist);
     my ($nextflg) = 0;
-    foreach (sort 
+    foreach my $item (sort 
 	     {
 		 if (lc($$fullname{$a}) ne lc($$fullname{$b})) {
 		     return (lc($$fullname{$a}) cmp lc($$fullname{$b}));
@@ -2561,12 +2562,12 @@ sub processHandGrade {
 		 return $a cmp $b;
 	     } (keys(%$fullname))) {
 	if ($nextflg == 1 && $button =~ /Next$/) {
-	    push @parsedlist,$_;
+	    push(@parsedlist,$item);
 	}
-	$nextflg = 1 if ($_ eq $laststu);
+	$nextflg = 1 if ($item eq $laststu);
 	if ($button eq 'Previous') {
-	    last if ($_ eq $firststu);
-	    push @parsedlist,$_;
+	    last if ($item eq $firststu);
+	    push(@parsedlist,$item);
 	}
     }
     $ctr = 0;
@@ -2589,11 +2590,11 @@ sub processHandGrade {
 	    my $submitted = 0;
 	    my $ungraded = 0;
 	    my $incorrect = 0;
-	    foreach (keys(%status)) {
-		$submitted = 1 if ($status{$_} ne 'nothing');
-		$ungraded = 1 if ($status{$_} =~ /^ungraded/);
-		$incorrect = 1 if ($status{$_} =~ /^incorrect/);
-		my ($foo,$partid,$foo1) = split(/\./,$_);
+	    foreach my $item (keys(%status)) {
+		$submitted = 1 if ($status{$item} ne 'nothing');
+		$ungraded = 1 if ($status{$item} =~ /^ungraded/);
+		$incorrect = 1 if ($status{$item} =~ /^incorrect/);
+		my ($foo,$partid,$foo1) = split(/\./,$item);
 		if ($status{'resource.'.$partid.'.submitted_by'} ne '') {
 		    $submitted = 0;
 		}
@@ -2604,7 +2605,7 @@ sub processHandGrade {
 	    next if (!$ungraded && ($submitonly eq 'graded'));
 	    next if (!$incorrect && $submitonly eq 'incorrect');
 	}
-	push @nextlist,$student if ($ctr < $ntstu);
+	push(@nextlist,$student) if ($ctr < $ntstu);
 	last if ($ctr == $ntstu);
 	$ctr++;
     }
@@ -2612,7 +2613,7 @@ sub processHandGrade {
     $ctr = 0;
     my $total = scalar(@nextlist)-1;
 
-    foreach (sort @nextlist) {
+    foreach (sort(@nextlist)) {
 	my ($uname,$udom,$submitter) = split(/:/);
 	$env{'form.student'}  = $uname;
 	$env{'form.userdom'}  = $udom;
@@ -2658,7 +2659,7 @@ sub saveHandGrade {
 	    }
 	} elsif ($dropMenu eq 'reset status'
 		 && exists($record{'resource.'.$new_part.'.solved'})) { #don't bother if no old records -> no attempts
-	    foreach my $key (keys (%record)) {
+	    foreach my $key (keys(%record)) {
 		if ($key=~/^resource\.\Q$new_part\E\./) { $newrecord{$key} = ''; }
 	    }
 	    $newrecord{'resource.'.$new_part.'.regrader'}=
@@ -2693,7 +2694,7 @@ sub saveHandGrade {
                 &handback_files($request,$symb,$stuname,$domain,$newflg,$new_part,\%newrecord);
 		next;
 	    } else {
-	        push @parts_graded, $new_part;
+	        push(@parts_graded,$new_part);
 	    }
 	    if ($record{'resource.'.$new_part.'.awarded'} ne $partial) {
 		$newrecord{'resource.'.$new_part.'.awarded'}  = $partial;
@@ -2720,7 +2721,7 @@ sub saveHandGrade {
 	        $record{'resource.'.$new_part.'.solved'} eq 'incorrect_by_override' ||
 	        $dropMenu eq 'reset status')
 	   {
-	    push (@version_parts,$new_part);
+	    push(@version_parts,$new_part);
 	}
     }
     my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
@@ -2893,7 +2894,7 @@ sub decrement_aggs {
     if ($aggtries == $totaltries) {
         $decrement{'users'} = 1;
     }
-    foreach my $type (keys (%decrement)) {
+    foreach my $type (keys(%decrement)) {
         $$aggregate{$symb."\0".$part."\0".$type} = -$decrement{$type};
     }
     return;
@@ -3294,7 +3295,7 @@ sub viewgrades {
 	$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);
-        push(@partids, $partid);
+        push(@partids,$partid);
 	my $display_part=&get_display_part($partid,$symb);
 	if ($display =~ /^Partial Credit Factor/) {
 	    $result.='<th>'.
@@ -3448,7 +3449,7 @@ sub editgrades {
     my $header;
     while ($ctr < $env{'form.totalparts'}) {
 	my $partid = $env{'form.partid_'.$ctr};
-	push @partid,$partid;
+	push(@partid,$partid);
 	$weight{$partid} = $env{'form.weight_'.$partid};
 	$ctr++;
     }
@@ -4410,6 +4411,7 @@ sub displaySubByDates {
     }
 
     my $interaction;
+    my $no_increment = 1;
     for ($version=1;$version<=$$record{'version'};$version++) {
 	my $timestamp = 
 	    &Apache::lonlocal::locallocaltime($$record{$version.':timestamp'});
@@ -4453,7 +4455,8 @@ sub displaySubByDates {
 		    if (!exists($orders{$partid})) { $orders{$partid}={}; }
 		    if (!exists($orders{$partid}->{$responseId})) {
 			$orders{$partid}->{$responseId}=
-			    &get_order($partid,$responseId,$symb,$uname,$udom);
+			    &get_order($partid,$responseId,$symb,$uname,$udom,
+                                       $no_increment);
 		    }
 		    $displaySub[0].='</b>&nbsp; '.
 			&cleanRecord($$record{$version.':'.$matchKey},$responseType,$symb,$partid,$responseId,$record,$orders{$partid}->{$responseId},"$version:",$uname,$udom).'<br />';
@@ -4506,12 +4509,12 @@ sub updateGradeByPage {
     my ($uname,$udom) = split(/:/,$env{'form.student'});
     my $usec=$classlist->{$env{'form.student'}}[5];
     if (!&canmodify($usec)) {
-	$request->print('<span class="LC_warning">Unable to modify requested student.('.$env{'form.student'}.'</span>');
+	$request->print('<span class="LC_warning">'.&mt('Unable to modify requested student ([_1])',$env{'form.student'}).'</span>');
 	$request->print(&show_grading_menu_form($env{'form.symb'}));
 	return;
     }
     my $result='<h3><span class="LC_info">&nbsp;'.$env{'form.title'}.'</span></h3>';
-    $result.='<h3>&nbsp;Student: '.&nameUserString(undef,$env{'form.fullname'},$uname,$udom).
+    $result.='<h3>&nbsp;'.&mt('Student: ').&nameUserString(undef,$env{'form.fullname'},$uname,$udom).
 	'</h3>'."\n";
 
     $request->print($result);
@@ -4520,7 +4523,7 @@ sub updateGradeByPage {
     my ($mapUrl, $id, $resUrl) = &Apache::lonnet::decode_symb( $env{'form.page'});
     my $map = $navmap->getResourceByUrl($resUrl); # add to navmaps
     if (!$map) {
-	$request->print('<span class="LC_warning">Unable to grade requested sequence. ('.$resUrl.')</span>');
+	$request->print('<span class="LC_warning">'.&mt('Unable to grade requested sequence ([_1]).',$resUrl').'</span>');
 	my ($symb)=&get_symb($request);
 	$request->print(&show_grading_menu_form($symb));
 	return; 
@@ -4552,8 +4555,8 @@ sub updateGradeByPage {
 		&Apache::loncommon::start_data_table_row().
 		'<td align="center" valign="top" >'.$prob.
 		(scalar(@{$parts}) == 1 ? '' 
-                                        : '<br />('.&mt('[quant,_1,&nbsp;parts]',scalar(@{$parts}))
-		 ).')</td>';
+                                        : '<br />('.&mt('[quant,_1,&nbsp;part]',scalar(@{$parts}))
+		.')').'</td>';
 	    $studentTable.='<td valign="top">&nbsp;<b>'.$title.'</b>&nbsp;</td>';
 
 	    my %newrecord=();
@@ -4597,10 +4600,10 @@ sub updateGradeByPage {
 		}
 		my $display_part=&get_display_part($partid,$curRes->symb());
 		my $oldstatus = $env{'form.solved'.$question.'_'.$partid};
-		$displayPts[0].='&nbsp;<b>Part:</b> '.$display_part.' = '.
+		$displayPts[0].='&nbsp;<b>'.&mt('Part').':</b> '.$display_part.' = '.
 		    (($oldstatus eq 'excused') ? 'excused' : $oldpts).
 		    '&nbsp;<br />';
-		$displayPts[1].='&nbsp;<b>Part:</b> '.$display_part.' = '.
+		$displayPts[1].='&nbsp;<b>'.&mt('Part').':</b> '.$display_part.' = '.
 		     (($score eq 'excused') ? 'excused' : $newpts).
 		    '&nbsp;<br />';
 		$question++;
@@ -4649,9 +4652,9 @@ sub updateGradeByPage {
 
     $studentTable.=&Apache::loncommon::end_data_table();
     $studentTable.=&show_grading_menu_form($env{'form.symb'});
-    my $grademsg=($changeflag == 0 ? 'No score was changed or updated.' :
-		  'The scores were changed for '.
-		  $changeflag.' problem'.($changeflag == 1 ? '.' : 's.'));
+    my $grademsg=($changeflag == 0 ? &mt('No score was changed or updated.') :
+		  &mt('The scores were changed for [quant,_1,problem].',
+		  $changeflag));
     $request->print($grademsg.$studentTable);
 
     return '';
@@ -6847,7 +6850,7 @@ ENDSCRIPT
 	foreach my $question (@{$arg}) {
 	    my @linenums = &prompt_for_corrections($r,$question,$scan_config,
                                                    $scan_record, $error);
-            push (@lines_to_correct,@linenums);
+            push(@lines_to_correct,@linenums);
 	}
         $r->print(&verify_bubbles_checked(@lines_to_correct));
     } elsif ($error eq 'missingbubble') {
@@ -6867,7 +6870,7 @@ ENDSCRIPT
 	foreach my $question (@{$arg}) {
 	    my @linenums = &prompt_for_corrections($r,$question,$scan_config,
                                                    $scan_record, $error);
-            push (@lines_to_correct,@linenums);
+            push(@lines_to_correct,@linenums);
 	}
         $r->print(&verify_bubbles_checked(@lines_to_correct));
     } else {
@@ -7025,7 +7028,7 @@ sub prompt_for_corrections {
         my $selected = $$scan_record{"scantron.$current_line.answer"};
 	&scantron_bubble_selector($r,$scan_config,$current_line, 
 	        		  $questionnum,$error,split('', $selected));
-        push (@linenums,$current_line);
+        push(@linenums,$current_line);
 	$current_line++;
     }
     if ($lines > 1) {
@@ -7241,7 +7244,7 @@ sub scantron_validate_CODE {
 				     $line,'duplicateCODE',$usedCODEs{$CODE});
 	    return(1,$currentphase);
 	}
-	push (@{$usedCODEs{$CODE}},$$scan_record{'scantron.PaperID'});
+	push(@{$usedCODEs{$CODE}},$$scan_record{'scantron.PaperID'});
     }
     return (0,$currentphase+1);
 }
@@ -7375,7 +7378,7 @@ sub scantron_get_maxbubble {
                 if (($analysis{$part_id.'.type'} eq 'essayresponse') ||
                     ($analysis{$part_id.'.type'} eq 'reactionresponse') ||
                     ($analysis{$part_id.'.type'} eq 'organicresponse')) {
-                    push (@allparts,$part_id);
+                    push(@allparts,$part_id);
                 }
             }
         }
@@ -8163,25 +8166,25 @@ sub grading_menu {
                  });
     $fields{'command'} = 'csvform';
     $url = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
-    push (@menu, { url => $url,
+    push(@menu, { url => $url,
                    name => &mt('Upload Scores'),
                    short_description => 
             &mt('Specify a file containing the class scores for current resource.')});
     $fields{'command'} = 'processclicker';
     $url = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
-    push (@menu, { url => $url,
+    push(@menu, { url => $url,
                    name => &mt('Process Clicker'),
                    short_description => 
             &mt('Specify a file containing the clicker information for this resource.')});
     $fields{'command'} = 'scantron_selectphase';
     $url = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
-    push (@menu, { url => $url,
+    push(@menu, { url => $url,
                    name => &mt('Grade/Manage/Review Scantron Forms'),
                    short_description => 
             &mt('Grade scantron exams, upload/download scantron data files, and review previously graded scantron exams.')});
     $fields{'command'} = 'verify';
     $url = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
-    push (@menu, { url => "",
+    push(@menu, { url => "",
                    name => &mt('Verify Receipt'),
                    short_description => 
             &mt('')});
@@ -8337,7 +8340,7 @@ GRADINGMENUJS
              <div class="LC_grade_select_mode_selector_body">
 	       <select name="section" multiple="multiple" size="5">'."\n";
     if (ref($sections)) {
-	foreach my $section (sort (@$sections)) {
+	foreach my $section (sort(@$sections)) {
 	    $result.='<option value="'.$section.'" '.
 		($saveSec eq $section ? 'selected="selected"':'').'>'.$section.'</option>'."\n";
 	}
@@ -8841,7 +8844,7 @@ sub interwrite_eval {
         $id=~s/[\-\:]//g;
         $idresponses{$id}[$number]=$entries[6];
     }
-    foreach my $id (keys %idresponses) {
+    foreach my $id (keys(%idresponses)) {
        $$responses{$id}=join(',',@{$idresponses{$id}});
        $$responses{$id}=~s/^\s*\,//;
     }