--- loncom/homework/grades.pm	2006/03/03 21:52:01	1.302.2.5
+++ loncom/homework/grades.pm	2006/01/17 23:09:50	1.303
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.302.2.5 2006/03/03 21:52:01 albertel Exp $
+# $Id: grades.pm,v 1.303 2006/01/17 23:09:50 banghart 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 '') {
@@ -2397,23 +2410,22 @@ sub version_portfiles {
             &Apache::lonnet::logthis("should be unmarking and remarking $key",@portfiles);
             foreach my $file (@portfiles) {
                 &Apache::lonnet::unmark_as_readonly($domain,$stuname,[$symb,$env{'request.course.id'}],$file);
-                my ($directory,$answer_file) =($file =~ /^(.*?)([^\/]*)$/);
+                my ($directory,$answer_file) =($file =~ /^(.*?)([^\/]*$)/);
                 my $version = 0;
-		my ($answer_name,$answer_ver,$answer_ext) =
-		    &file_name_version_ext($answer_file);
+                my @answer_file_parts = split(/\./, $answer_file);
                 my @dir_list = &Apache::lonnet::dirlist($directory,$domain,$stuname,$portfolio_root);
+                my @file_names;
+                my @file_name_parts;
                 foreach my $row (@dir_list) {
-                    my ($file) = split(/\&/,$row,2);
-		    my ($file_name,$file_version,$file_ext) =
-			&file_name_version_ext($file);
-                    if (($file_name eq $answer_name) && 
-			($file_ext eq $answer_ext)) {
+                    @file_names = split(/\&/,$row,2);
+                    @file_name_parts = split(/\./, $file_names[0]);
+                    # ($file_name_parts[scalar @file_name_parts] eq $answer_file_parts[scalar @answer_file_parts])
+                    if (($file_name_parts[0] eq $answer_file_parts[0]) && 
+                        ($file_name_parts[-1] eq $answer_file_parts[-1])) {
                         # gets here if filename and extension match, regardless of version
-                        if ($file_version ne '') {
-                            # a versioned file is found  so save it for later
-                            if ($file_version > $version) {
-				$version = $file_version;
-			    }
+                        if (scalar @file_name_parts == 3) { # a versioned file is found
+                            # so save it for later
+                            if ($file_name_parts[1] > $version) {$version = $file_name_parts[1]};
                         }
                     }
                 }
@@ -2422,13 +2434,11 @@ sub version_portfiles {
                 if($env{'form.copy'} eq '-1') {
                     &Apache::lonnet::logthis('problem getting file '.$directory.$answer_file);
                 } else {
-		    my $new_answer = $answer_name.'.'.$version.'.'.$answer_ext;
-		    my $copy_result = &Apache::lonnet::finishuserfileupload(
-                                        $stuname,$domain,'copy',
-				        '/portfolio'.$directory.$new_answer);
-                    push(@v_portfiles, $directory.$new_answer);
+                   my $copy_result = &Apache::lonnet::finishuserfileupload($stuname,$domain,'copy',
+                                    '/portfolio'.$directory.$answer_file_parts[0].'.'.$version.'.'.$answer_file_parts[-1]);
+                    push(@v_portfiles, $directory.$answer_file_parts[0].'.'.$version.'.'.$answer_file_parts[-1]);
                     &Apache::lonnet::mark_as_readonly($domain,$stuname,
-                                ['/portfolio'.$directory.$new_answer],
+                                ['/portfolio'.$directory.$answer_file_parts[0].'.'.$version.'.'.$answer_file_parts[-1]],
                                 [$symb,$env{'request.course.id'},'graded']);
                 }
             }
@@ -2439,22 +2449,6 @@ sub version_portfiles {
     
 }
 
-sub file_name_version_ext {
-    my ($file)=@_;
-    my @file_parts = split(/\./, $file);
-    my ($name,$version,$ext);
-    if (@file_parts > 1) {
-	$ext=pop(@file_parts);
-	if (@file_parts > 1 && $file_parts[-1] =~ /^\d+$/) {
-	    $version=pop(@file_parts);
-	}
-	$name=join('.',@file_parts);
-    } else {
-	$name=join('.',@file_parts);
-    }
-    return($name,$version,$ext);
-}
-
 #--------------------------------------------------------------------------------------
 #
 #-------------------------- Next few routines handles grading by section or whole class
@@ -3291,13 +3285,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 +3448,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) {
@@ -4063,11 +4052,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;
 }