[LON-CAPA-cvs] cvs: loncom /homework grades.pm

banghart lon-capa-cvs@mail.lon-capa.org
Thu, 07 Apr 2005 22:44:04 -0000


This is a MIME encoded message

--banghart1112913844
Content-Type: text/plain

banghart		Thu Apr  7 18:44:04 2005 EDT

  Modified files:              
    /loncom/homework	grades.pm 
  Log:
  	Versioning of portfolio files _might_ work. Needs more testing.`
  
  
--banghart1112913844
Content-Type: text/plain
Content-Disposition: attachment; filename="banghart-20050407184404.txt"

Index: loncom/homework/grades.pm
diff -u loncom/homework/grades.pm:1.258 loncom/homework/grades.pm:1.259
--- loncom/homework/grades.pm:1.258	Thu Apr  7 03:03:23 2005
+++ loncom/homework/grades.pm	Thu Apr  7 18:44:03 2005
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.258 2005/04/07 07:03:23 albertel Exp $
+# $Id: grades.pm,v 1.259 2005/04/07 22:44:03 banghart Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -2109,6 +2109,7 @@
 #---- Save the score and award for each student, if changed
 sub saveHandGrade {
     my ($request,$url,$symb,$stuname,$domain,$newflg,$submitter,$part) = @_;
+    my $v_flag=0;
     my $usec = &Apache::lonnet::getsection($domain,$stuname,
 					   $env{'request.course.id'});
     if (!&canmodify($usec)) { return('not_allowed'); }
@@ -2116,45 +2117,45 @@
     my @parts_graded;
     my %newrecord  = ();
     my ($pts,$wgt) = ('','');
-    foreach (split(/:/,$env{'form.partlist'.$newflg})) {
+    foreach my $new_part (split(/:/,$env{'form.partlist'.$newflg})) {
 	#collaborator may vary for different parts
-	if ($submitter && $_ ne $part) { next; }
-	my $dropMenu = $env{'form.GD_SEL'.$newflg.'_'.$_};
+	if ($submitter && $new_part ne $part) { next; }
+	my $dropMenu = $env{'form.GD_SEL'.$newflg.'_'.$new_part};
 	if ($dropMenu eq 'excused') {
-	    if ($record{'resource.'.$_.'.solved'} ne 'excused') {
-		$newrecord{'resource.'.$_.'.solved'} = 'excused';
-		if (exists($record{'resource.'.$_.'.awarded'})) {
-		    $newrecord{'resource.'.$_.'.awarded'} = '';
+	    if ($record{'resource.'.$new_part.'.solved'} ne 'excused') {
+		$newrecord{'resource.'.$new_part.'.solved'} = 'excused';
+		if (exists($record{'resource.'.$new_part.'.awarded'})) {
+		    $newrecord{'resource.'.$new_part.'.awarded'} = '';
 		}
-	    $newrecord{'resource.'.$_.'.regrader'}="$env{'user.name'}:$env{'user.domain'}";
+	    $newrecord{'resource.'.$new_part.'.regrader'}="$env{'user.name'}:$env{'user.domain'}";
 	    }
 	} elsif ($dropMenu eq 'reset status'
-		 && exists($record{'resource.'.$_.'.solved'})) { #don't bother if no old records -> no attempts
+		 && exists($record{'resource.'.$new_part.'.solved'})) { #don't bother if no old records -> no attempts
 	    foreach my $key (keys (%record)) {
-		if ($key=~/^resource\.\Q$_\E\./) { $newrecord{$key} = ''; }
+		if ($key=~/^resource\.\Q$new_part\E\./) { $newrecord{$key} = ''; }
 	    }
-	    $newrecord{'resource.'.$_.'.regrader'}=
+	    $newrecord{'resource.'.$new_part.'.regrader'}=
 		"$env{'user.name'}:$env{'user.domain'}";
 	} elsif ($dropMenu eq '') {
-	    $pts = ($env{'form.GD_BOX'.$newflg.'_'.$_} ne '' ? 
-		    $env{'form.GD_BOX'.$newflg.'_'.$_} : 
-		    $env{'form.RADVAL'.$newflg.'_'.$_});
-	    if ($pts eq '' && $env{'form.GD_SEL'.$newflg.'_'.$_} eq '') {
+	    $pts = ($env{'form.GD_BOX'.$newflg.'_'.$new_part} ne '' ? 
+		    $env{'form.GD_BOX'.$newflg.'_'.$new_part} : 
+		    $env{'form.RADVAL'.$newflg.'_'.$new_part});
+	    if ($pts eq '' && $env{'form.GD_SEL'.$newflg.'_'.$new_part} eq '') {
 		next;
 	    }
-	    $wgt = $env{'form.WGT'.$newflg.'_'.$_} eq '' ? 1 : 
-		$env{'form.WGT'.$newflg.'_'.$_};
+	    $wgt = $env{'form.WGT'.$newflg.'_'.$new_part} eq '' ? 1 : 
+		$env{'form.WGT'.$newflg.'_'.$new_part};
 	    my $partial= $pts/$wgt;
-	    if ($partial eq $record{'resource.'.$_.'.awarded'}) {
+	    if ($partial eq $record{'resource.'.$new_part.'.awarded'}) {
 		#do not update score for part if not changed.
 		next;
 	    } else {
-	        push @parts_graded, $_;
+	        push @parts_graded, $new_part;
 	    }
-	    if ($record{'resource.'.$_.'.awarded'} ne $partial) {
-		$newrecord{'resource.'.$_.'.awarded'}  = $partial;
+	    if ($record{'resource.'.$new_part.'.awarded'} ne $partial) {
+		$newrecord{'resource.'.$new_part.'.awarded'}  = $partial;
 	    }
-	    my $reckey = 'resource.'.$_.'.solved';
+	    my $reckey = 'resource.'.$new_part.'.solved';
 	    if ($partial == 0) {
 		if ($record{$reckey} ne 'incorrect_by_override') {
 		    $newrecord{$reckey} = 'incorrect_by_override';
@@ -2165,15 +2166,27 @@
 		}
 	    }	    
 	    if ($submitter && 
-		($record{'resource.'.$_.'.submitted_by'} ne $submitter)) {
-		$newrecord{'resource.'.$_.'.submitted_by'} = $submitter;
+		($record{'resource.'.$new_part.'.submitted_by'} ne $submitter)) {
+		$newrecord{'resource.'.$new_part.'.submitted_by'} = $submitter;
 	    }
-	    $newrecord{'resource.'.$_.'.regrader'}=
+	    $newrecord{'resource.'.$new_part.'.regrader'}=
 		"$env{'user.name'}:$env{'user.domain'}";
 	}
+	# unless problem has been graded, set flag to version the submitted files
+	unless ($record{'resource.'.$new_part.'.solved'} =~ /^correct_/  || $record{'resource.'.$new_part.'.solved'} eq 'incorrect_by_override') {
+	    $v_flag = 1;
+	    &Apache::lonnet::logthis("v_flag is $v_flag");
+	    &Apache::lonnet::logthis('the record info is '.$record{'resource.'.$new_part.'.solved'});
+	} else {
+	    &Apache::lonnet::logthis('the record info is '.$record{'resource.'.$new_part.'.solved'});
+	}
     }
     if (scalar(keys(%newrecord)) > 0) {
-        &version_portfiles(\%record, \@parts_graded, $env{'request.course.id'}, $symb, $domain, $stuname);
+        if ($v_flag) {
+            &Apache::lonnet::logthis("v_flag (setting stuff) is $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);
+        }
 	&Apache::lonnet::cstore(\%newrecord,$symb,
 				$env{'request.course.id'},$domain,$stuname);
     }
@@ -2188,7 +2201,11 @@
 						 $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$/) {
+            
+            my @v_portfiles;
             my @portfiles = split(/,/,$$record{$key});
             foreach my $file (@portfiles) {
                 my ($directory,$answer_file) =($file =~ /^(.*?)([^\/]*$)/);
@@ -2212,20 +2229,22 @@
                 }
                 $version++;
                 my $home_server = &Apache::lonnet::homeserver($stuname,$domain,undef);
-                $env{'form.copy'} = &Apache::lonnet::getfile("/uploaded/$domain/$stuname/$directory$answer_file");
-                # $env{'form.copy.filename'}='';
-                my $copy_result = &Apache::lonnet::finishuserfileupload($stuname,$domain,$home_server,'copy',
+                $env{'form.copy'} = &Apache::lonnet::getfile("/uploaded/$domain/$stuname/portfolio$directory$answer_file");
+                if($env{'form.copy'} eq '-1') {
+                    &Apache::lonnet::logthis('problem getting file '.$directory.$answer_file);
+                } else {
+                   my $copy_result = &Apache::lonnet::finishuserfileupload($stuname,$domain,$home_server,'copy',
                                     '/portfolio'.$directory.$answer_file_parts[0].'.'.$version.'.'.$answer_file_parts[-1]);
-                &Apache::lonnet::logthis('copy result is '.$copy_result);
-                &Apache::lonnet::logthis('answer file is '.$answer_file.
+                    push(@v_portfiles, $answer_file_parts[0].'.'.$version.'.'.$answer_file_parts[-1]);
+                    &Apache::lonnet::logthis('copy result is '.$copy_result);
+                    &Apache::lonnet::logthis('answer file is '.$answer_file.
                         ' becomes '.$answer_file_parts[0].'.'.$version.'.'.$answer_file_parts[-1]);
-                &Apache::lonnet::logthis('from dir list is '.$file_names[0].' has '.@file_name_parts.' parts');
+                }
             }
-            &Apache::lonnet::logthis('found key portfiles '.$key);
-            &Apache::lonnet::logthis('found value portfiles '.$$record{$key});
+            $$record{$key} = join(/,/,@v_portfiles);
         }
     } 
-    
+    return 'ok';   
     
 }
 

--banghart1112913844--