--- loncom/homework/grades.pm	2005/04/08 20:12:58	1.262
+++ loncom/homework/grades.pm	2005/05/15 01:11:32	1.265
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.262 2005/04/08 20:12:58 banghart Exp $
+# $Id: grades.pm,v 1.265 2005/05/15 01:11:32 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -2178,11 +2178,8 @@ sub saveHandGrade {
 	}
     }
     if (scalar(keys(%newrecord)) > 0) {
-        if (scalar @v_flag) {
-            foreach my $part_flagged (@v_flag) {
-                &Apache::lonnet::unmark_as_readonly($domain,$stuname,$symb.$env{'request.course.id'});
-                &version_portfiles(\%record, \@parts_graded, $env{'request.course.id'}, $symb, $domain, $stuname);
-            }
+        if (scalar(@v_flag)) {
+            &version_portfiles(\%record, \@parts_graded, $env{'request.course.id'}, $symb, $domain, $stuname, \@v_flag);
         }
 	&Apache::lonnet::cstore(\%newrecord,$symb,
 				$env{'request.course.id'},$domain,$stuname);
@@ -2192,18 +2189,20 @@ sub saveHandGrade {
 
 # ----------- Handles creating versions for portfolio files as answers
 sub version_portfiles {
-    my ($record, $parts_graded, $courseid, $symb, $domain, $stuname) = @_;
+    my ($record, $parts_graded, $courseid, $symb, $domain, $stuname, $v_flag) = @_;
+    my $version_parts = join('|',@$v_flag);
     my $parts = join('|', @$parts_graded);
     my $portfolio_root = &Apache::loncommon::propath($domain,
 						 $stuname).
 						'/userfiles/portfolio';
     foreach my $key(keys %$record) {
-        #&Apache::lonnet::logthis("key is $key, value is $$record{$key}");
         my $new_portfiles;
-        if ($key =~ /^resource\.($parts)\./ && $key =~ /\.portfiles$/) {
+        if ($key =~ /^resource\.($version_parts)\./ && $key =~ /\.portfiles$/ ) {
             my @v_portfiles;
             my @portfiles = split(/,/,$$record{$key});
+            # &Apache::lonnet::logthis("should be unmarking and remarking");
             foreach my $file (@portfiles) {
+                &Apache::lonnet::unmark_as_readonly($domain,$stuname,[$symb,$env{'request.course.id'}],$file);
                 my ($directory,$answer_file) =($file =~ /^(.*?)([^\/]*$)/);
                 my $version = 0;
                 my @answer_file_parts = split(/\./, $answer_file);
@@ -2232,6 +2231,9 @@ sub version_portfiles {
                    my $copy_result = &Apache::lonnet::finishuserfileupload($stuname,$domain,$home_server,'copy',
                                     '/portfolio'.$directory.$answer_file_parts[0].'.'.$version.'.'.$answer_file_parts[-1]);
                     push(@v_portfiles, $answer_file_parts[0].'.'.$version.'.'.$answer_file_parts[-1]);
+                    &Apache::lonnet::mark_as_readonly($domain,$stuname,
+                                ['/portfolio'.$directory.$answer_file_parts[0].'.'.$version.'.'.$answer_file_parts[-1]],
+                                [$symb,$env{'request.course.id'},'graded']);
                 }
             }
             $$record{$key} = join(',',@v_portfiles);
@@ -2306,6 +2308,7 @@ sub viewgrades_js {
     function writeRadText(partid,weight) {
 	var selval   = document.classgrade["SELVAL_"+partid];
 	var radioButton = document.classgrade["RADVAL_"+partid];
+        var override = document.classgrade["FORCE_"+partid].checked;
 	var textbox = document.classgrade["TEXTVAL_"+partid];
 	if (selval[1].selected || selval[2].selected) {
 	    for (var i=0; i<radioButton.length; i++) {
@@ -2319,7 +2322,7 @@ sub viewgrades_js {
 		var scorename = document.classgrade["GD_"+user+"_"+partid+"_awarded"];
 		var saveval   = document.classgrade["GD_"+user+"_"+partid+"_solved_s"].value;
 		var selname   = document.classgrade["GD_"+user+"_"+partid+"_solved"];
-		if (saveval != "correct") {
+		if ((saveval != "correct") || override) {
 		    scorename.value = "";
 		    if (selval[1].selected) {
 			selname[1].selected = true;
@@ -2336,7 +2339,7 @@ sub viewgrades_js {
 		var scorename = document.classgrade["GD_"+user+"_"+partid+"_awarded"];
 		var saveval   = document.classgrade["GD_"+user+"_"+partid+"_solved_s"].value;
 		var selname   = document.classgrade["GD_"+user+"_"+partid+"_solved"];
-		if (saveval != "correct") {
+		if ((saveval != "correct") || override) {
 		    scorename.value = document.classgrade["GD_"+user+"_"+partid+"_awarded_s"].value;
 		    selname[0].selected = true;
 		}
@@ -2490,7 +2493,8 @@ sub viewgrades {
 		$weight{$partid}.')"> '.
 	    '<option selected="on"> </option>'.
 	    '<option>excused</option>'.
-	    '<option>reset status</option></select></td></tr>'."\n";
+	    '<option>reset status</option></select></td>'.
+            '<td><input type="checkbox" name="FORCE_'.$partid.'" /> Override "Correct"</td></tr>'."\n";
 	$ctsparts++;
     }
     $result.='</table>'.'</td></tr></table>'.'</td></tr></table>'."\n".
@@ -3783,7 +3787,7 @@ sub scantron_selectphase {
           </tr>
           <tr bgcolor="#ffffe6">
             <td colspan="2">
-              <input type="submit" value="Validate Scantron Records" />
+              <input type="submit" value="Grading: Validate Scantron Records" />
             </td>
           </tr>
         </table>
@@ -4238,10 +4242,10 @@ sub scantron_do_warning {
 	    $r->print('<p><font color="red">You have not selected a the format of the student\'s response data.</font></p>');
 	} 
     } else {
-	my $warning=&scantron_warning_screen('Validate Records');
+	my $warning=&scantron_warning_screen('Grading: Validate Records');
 	$r->print(<<STUFF);
 $warning
-<input type="submit" name="submit" value="Validate Records" />
+<input type="submit" name="submit" value="Grading: Validate Records" />
 <input type="hidden" name="command" value="scantron_validate" />
 STUFF
     }