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

raeburn raeburn at source.lon-capa.org
Sun Feb 12 16:01:30 EST 2023


raeburn		Sun Feb 12 21:01:30 2023 EDT

  Modified files:              
    /loncom/homework	grades.pm 
  Log:
  - Bug 6966
  
  
Index: loncom/homework/grades.pm
diff -u loncom/homework/grades.pm:1.791 loncom/homework/grades.pm:1.792
--- loncom/homework/grades.pm:1.791	Thu Feb  9 19:27:18 2023
+++ loncom/homework/grades.pm	Sun Feb 12 21:01:30 2023
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.791 2023/02/09 19:27:18 raeburn Exp $
+# $Id: grades.pm,v 1.792 2023/02/12 21:01:30 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -2206,7 +2206,7 @@
         my ($uname,$udom,$fullname) = split(/:/,$student);
         my %record = &Apache::lonnet::restore($symb,$env{'request.course.id'},
 					      $udom,$uname);
-        my ($string,$timestamp)= &get_last_submission(\%record);
+        my ($string)= &get_last_submission(\%record);
         foreach my $submission (@$string) {
             my ($partid,$respid) =
 		($submission =~ /^resource\.([^\.]*)\.([^\.]*)\.submission/);
@@ -2558,20 +2558,33 @@
     #             (3) All transactions (by date)
     #             (4) The whole record (with detailed information for all transactions)
 
-    my ($string,$timestamp)= &get_last_submission(\%record,$is_tool);
+    my ($string,$timestamp,$lastgradetime,$lastsubmittime) =
+        &get_last_submission(\%record,$is_tool);
 
     my $lastsubonly;
 
-    if ($$timestamp eq '') {
-        $lastsubonly.='<div class="LC_grade_submissions_body">'.$$string[0].'</div>'; 
+    if ($timestamp eq '') {
+        $lastsubonly.='<div class="LC_grade_submissions_body">'.$string->[0].'</div>'; 
     } elsif ($is_tool) {
         $lastsubonly =
             '<div class="LC_grade_submissions_body">'
-           .'<b>'.&mt('Date Grade Passed Back:').'</b> '.$$timestamp."</div>\n";
+           .'<b>'.&mt('Date Grade Passed Back:').'</b> '.$timestamp."</div>\n";
     } else {
+        my ($shownsubmdate,$showngradedate);
+        if ($lastsubmittime && $lastgradetime) {
+            $shownsubmdate = &Apache::lonlocal::locallocaltime($lastsubmittime);
+            if ($lastgradetime > $lastsubmittime) {
+                 $showngradedate = &Apache::lonlocal::locallocaltime($lastgradetime);
+             }
+        } else {
+            $shownsubmdate = $timestamp;
+        }
         $lastsubonly =
             '<div class="LC_grade_submissions_body">'
-           .'<b>'.&mt('Date Submitted:').'</b> '.$$timestamp."\n";
+           .'<b>'.&mt('Date Submitted:').'</b> '.$shownsubmdate."\n";
+        if ($showngradedate) {
+            $lastsubonly .= '<br /><b>'.&mt('Date Graded:').'</b> '.$showngradedate."\n";
+        }
 
 	my %seenparts;
 	my @part_response_id = &flatten_responseType($responseType);
@@ -2903,14 +2916,42 @@
 #--- Retrieve the last submission for all the parts
 sub get_last_submission {
     my ($returnhash,$is_tool)=@_;
-    my (@string,$timestamp,%lasthidden);
+    my (@string,$timestamp,$lastgradetime,$lastsubmittime);
     if ($$returnhash{'version'}) {
 	my %lasthash=();
-	my ($version);
+        my %prevsolved=();
+        my %solved=();
+	my $version;
 	for ($version=1;$version<=$$returnhash{'version'};$version++) {
+            my %handgraded = ();
 	    foreach my $key (sort(split(/\:/,
 					$$returnhash{$version.':keys'}))) {
 		$lasthash{$key}=$$returnhash{$version.':'.$key};
+                if ($key =~ /\.([^.]+)\.regrader$/) {
+                    $handgraded{$1} = 1;
+                } elsif ($key =~ /\.portfiles$/) {
+                    if (($$returnhash{$version.':'.$key} ne '') &&
+                        ($$returnhash{$version.':'.$key} !~ /\.\d+\.\w+$/)) {
+                        $lastsubmittime = $$returnhash{$version.':timestamp'};
+                    }
+                } elsif ($key =~ /\.submission$/) {
+                    if ($$returnhash{$version.':'.$key} ne '') {
+                        $lastsubmittime = $$returnhash{$version.':timestamp'};
+                    }
+                } elsif ($key =~ /\.([^.]+)\.solved$/) {
+                    $prevsolved{$1} = $solved{$1};
+                    $solved{$1} = $lasthash{$key};
+                }
+            }
+            foreach my $partid (keys(%handgraded)) {
+                if (($prevsolved{$partid} eq 'ungraded_attempted') &&
+                    (($solved{$partid} eq 'incorrect_by_override') ||
+                     ($solved{$partid} eq 'correct_by_override'))) {
+                    $lastgradetime = $$returnhash{$version.':timestamp'};
+                }
+                if ($solved{$partid} ne '') {
+                    $prevsolved{$partid} = $solved{$partid};
+                }
 	    }
             $timestamp =
                 &Apache::lonlocal::locallocaltime($$returnhash{$version.':timestamp'});
@@ -2977,7 +3018,7 @@
 	$string[0] =
 	    '<span class="LC_warning">'.$msg.'</span>';
     }
-    return (\@string,\$timestamp);
+    return (\@string,$timestamp,$lastgradetime,$lastsubmittime);
 }
 
 #--- High light keywords, with style choosen by user.




More information about the LON-CAPA-cvs mailing list