--- loncom/homework/grades.pm	2006/09/22 21:16:14	1.302.2.7
+++ loncom/homework/grades.pm	2006/01/25 22:56:25	1.304
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.302.2.7 2006/09/22 21:16:14 albertel Exp $
+# $Id: grades.pm,v 1.304 2006/01/25 22:56:25 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -1577,7 +1577,7 @@ sub submission {
 	}
 	my $overRideScore = $env{'form.overRideScore'} eq '' ? 'no' : $env{'form.overRideScore'};
 
-	$request->print('<form action="/adm/grades" method="post" name="SCORE">'."\n".
+	$request->print('<form action="/adm/grades" method="post" name="SCORE" enctype="multipart/form-data">'."\n".
 			'<input type="hidden" name="command"    value="handgrade" />'."\n".
 			'<input type="hidden" name="saveState"  value="'.$env{'form.saveState'}.'" />'."\n".
 			'<input type="hidden" name="Status"     value="'.$env{'form.Status'}.'" />'."\n".
@@ -1807,9 +1807,14 @@ KEYWORDS
 			}
 			if (@files) {
 			    $lastsubonly.='<br /><font color="red" size="1">Like all files provided by users, this file may contain virusses</font><br />';
+			    my $file_counter = 0;
 			    foreach my $file (@files) {
+			        $file_counter ++;
 				&Apache::lonnet::allowuploaded('/adm/grades',$file);
 				$lastsubonly.='<br /><a href="'.$file.'" target="lonGRDs"><img src="'.&Apache::loncommon::icon($file).'" border=0"> '.$file.'</a>';
+				$lastsubonly.='Return commented document to student. <input type="file" name="returndoc'.$file_counter.'" />'."\n";
+				$lastsubonly.='<input type="hidden" name="returndocorig'.$file_counter.'" value="'.$file.'" />';
+
 			    }
 			    $lastsubonly.='<br />';
 			}
@@ -2040,6 +2045,14 @@ sub processHandGrade {
 		    }
 		}
 	    }
+	    if ($env{'form.returndoc1'}) {
+	        # if multiple files are uploaded names will be 'returndoc2', 'returndoc3'
+	        my $file_counter = 1;
+	        while ($env{'form.returndoc'.$file_counter}) {
+	            $request->print("<font color=\"red\">Will upload document</font>".$env{'form.returndocorig'.$file_counter});
+	            $file_counter ++;
+	        }
+	    }
 	    $ctr++;
 	}
     }
@@ -2248,7 +2261,7 @@ sub saveHandGrade {
 
             my $solvedstatus = $record{'resource.'.$new_part.'.solved'};
             if ($aggtries > 0) {
-                &decrement_aggs($symb,$new_part,\%aggregate,$aggtries,$totaltries,$solvedstatus);
+                &decrement($symb,$new_part,\%aggregate,$aggtries,$totaltries,$solvedstatus);
                 $aggregateflag = 1;
             }
 	} elsif ($dropMenu eq '') {
@@ -3291,13 +3304,8 @@ sub csvuploadmap {
 	    unshift(@fields,['none','']);
 	    $i=&Apache::loncommon::csv_samples_select_table($request,\@records,
 							    \@fields);
-	    foreach my $rec (@records) {
-		my %temp = &Apache::loncommon::record_sep($rec);
-		if (%temp) {
-		    $keyfields=join(',',sort(keys(%temp)));
-		    last;
-		}
-	    }
+	    my %sone=&Apache::loncommon::record_sep($records[0]);
+	    $keyfields=join(',',sort(keys(%sone)));
 	}
     }
     &csvuploadmap_footer($request,$i,$keyfields);
@@ -3459,7 +3467,7 @@ sub csvuploadassign {
     }
     $request->print("<br />Stored $countdone students\n");
     if (@skipped) {
-	$request->print('<p><font size="+1"><b>Skipped Students</b></font></p>');
+	$request->print('<p<font size="+1"><b>Skipped Students</b></font></p>');
 	foreach my $student (@skipped) { $request->print("$student<br />\n"); }
     }
     if (@notallowed) {
@@ -3679,7 +3687,7 @@ sub displayPage {
         if($curRes == $iterator->BEGIN_MAP) { $depth++; }
         if($curRes == $iterator->END_MAP) { $depth--; }
 
-        if (ref($curRes) && $curRes->is_problem()) {
+        if (ref($curRes) && $curRes->is_problem() && !$curRes->randomout) {
 	    my $parts = $curRes->parts();
             my $title = $curRes->compTitle();
 	    my $symbx = $curRes->symb();
@@ -3876,7 +3884,7 @@ sub updateGradeByPage {
         if($curRes == $iterator->BEGIN_MAP) { $depth++; }
         if($curRes == $iterator->END_MAP) { $depth--; }
 
-        if (ref($curRes) && $curRes->is_problem()) {
+        if (ref($curRes) && $curRes->is_problem() && !$curRes->randomout) {
 	    my $parts = $curRes->parts();
             my $title = $curRes->compTitle();
 	    my $symbx = $curRes->symb();
@@ -4063,11 +4071,11 @@ sub scantron_CODElist {
 sub scantron_CODEunique {
     my $result='<nobr>
                  <label><input type="radio" name="scantron_CODEunique"
-                        value="yes" checked="checked" /> Yes </label>
+                        value="Yes" checked="on" /> Yes </label>
                 </nobr>
                 <nobr>
                  <label><input type="radio" name="scantron_CODEunique"
-                        value="no" /> No </label>
+                        value="No" /> No </label>
                 </nobr>';
     return $result;
 }
@@ -4517,29 +4525,21 @@ sub reset_skipping_status {
     &scantron_putfile(undef,$scan_data);
 }
 
-sub start_skipping {
+sub allow_skipping {
     my ($scan_data,$i)=@_;
     my %remembered=split(':',&scan_data($scan_data,'remember_skipping'));
-    if ($env{'form.scantron_options_redo'} =~ /^redo_/) {
-	$remembered{$i}=2;
-    } else {
-	$remembered{$i}=1;
-    }
+    delete($remembered{$i});
     &scan_data($scan_data,'remember_skipping',join(':',%remembered));
 }
 
 sub should_be_skipped {
-    my ($scanlines,$scan_data,$i)=@_;
+    my ($scan_data,$i)=@_;
     if ($env{'form.scantron_options_redo'} !~ /^redo_/) {
 	# not redoing old skips
-	if ($scanlines->{'skipped'}[$i]) { return 1; }
 	return 0;
     }
     my %remembered=split(':',&scan_data($scan_data,'remember_skipping'));
-
-    if (exists($remembered{$i}) && $remembered{$i} != 2 ) {
-	return 0;
-    }
+    if (exists($remembered{$i})) { return 0; }
     return 1;
 }
 
@@ -4551,7 +4551,7 @@ sub remember_current_skipped {
 	    $to_remember{$i}=1;
 	}
     }
-
+    &Apache::lonnet::logthis('remembering '.join(':',%to_remember));
     &scan_data($scan_data,'remember_skipping',join(':',%to_remember));
     &scantron_putfile(undef,$scan_data);
 }
@@ -4656,6 +4656,7 @@ sub scantron_validate_file {
     }
     if ($env{'form.scantron_options_redo'} eq 'redo_skipped') {
 	&remember_current_skipped();
+	&scantron_remove_file('skipped');
 	$env{'form.scantron_options_redo'}='redo_skipped_ready';
     }
 
@@ -4818,8 +4819,8 @@ sub scantron_putfile {
 
 sub scantron_get_line {
     my ($scanlines,$scan_data,$i)=@_;
-    if (&should_be_skipped($scanlines,$scan_data,$i)) { return undef; }
-    #if ($scanlines->{'skipped'}[$i]) { return undef; }
+    if (&should_be_skipped($scan_data,$i)) { return undef; }
+    if ($scanlines->{'skipped'}[$i]) { return undef; }
     if ($scanlines->{'corrected'}[$i]) {return $scanlines->{'corrected'}[$i];}
     return $scanlines->{'orig'}[$i]; 
 }
@@ -4839,21 +4840,12 @@ sub scantron_put_line {
     my ($scanlines,$scan_data,$i,$newline,$skip)=@_;
     if ($skip) {
 	$scanlines->{'skipped'}[$i]=$newline;
-	&start_skipping($scan_data,$i);
+	&allow_skipping($scan_data,$i);
 	return;
     }
     $scanlines->{'corrected'}[$i]=$newline;
 }
 
-sub scantron_clear_skip {
-    my ($scanlines,$scan_data,$i)=@_;
-    if (exists($scanlines->{'skipped'}[$i])) {
-	undef($scanlines->{'skipped'}[$i]);
-	return 1;
-    }
-    return 0;
-}
-
 sub scantron_validate_ID {
     my ($r,$currentphase) = @_;
     
@@ -5297,10 +5289,6 @@ SCANTRONFORM
   	($uname,$udom)=split(/:/,$uname);
   	&Apache::lonnet::delenv('form.counter');
   	&Apache::lonnet::appenv(%$scan_record);
-
-	if (&scantron_clear_skip($scanlines,$scan_data,$i)) {
-	    &scantron_putfile($scanlines,$scan_data);
-	}
 	
 	my $i=0;
 	foreach my $resource (@resources) {