--- loncom/homework/grades.pm 2022/02/09 23:50:00 1.596.2.12.2.60 +++ loncom/homework/grades.pm 2024/07/01 22:51:46 1.596.2.12.2.61 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Grading handler # -# $Id: grades.pm,v 1.596.2.12.2.60 2022/02/09 23:50:00 raeburn Exp $ +# $Id: grades.pm,v 1.596.2.12.2.61 2024/07/01 22:51:46 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -2178,7 +2178,7 @@ sub files_exist { 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/); @@ -2523,16 +2523,29 @@ sub submission { # (3) All transactions (by date) # (4) The whole record (with detailed information for all transactions) - my ($string,$timestamp)= &get_last_submission(\%record); + my ($string,$timestamp,$lastgradetime,$lastsubmittime) = + &get_last_submission(\%record); my $lastsubonly; - if ($$timestamp eq '') { - $lastsubonly.='
'.$$string[0].'
'; + if ($timestamp eq '') { + $lastsubonly.='
'.$string->[0].'
'; } else { + my ($shownsubmdate,$showngradedate); + if ($lastsubmittime && $lastgradetime) { + $shownsubmdate = &Apache::lonlocal::locallocaltime($lastsubmittime); + if ($lastgradetime > $lastsubmittime) { + $showngradedate = &Apache::lonlocal::locallocaltime($lastgradetime); + } + } else { + $shownsubmdate = $timestamp; + } $lastsubonly = '
' - .''.&mt('Date Submitted:').' '.$$timestamp."\n"; + .''.&mt('Date Submitted:').' '.$shownsubmdate."\n"; + if ($showngradedate) { + $lastsubonly .= '
'.&mt('Date Graded:').' '.$showngradedate."\n"; + } my %seenparts; my @part_response_id = &flatten_responseType($responseType); @@ -2857,18 +2870,51 @@ sub check_collaborators { #--- Retrieve the last submission for all the parts sub get_last_submission { my ($returnhash)=@_; - 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}; - $timestamp = - &Apache::lonlocal::locallocaltime($$returnhash{$version.':timestamp'}); + 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 is for last transaction for this resource, which does not +# necessarily correspond to the time of last submission for problem (or part). +# + if ($lasthash{'timestamp'} ne '') { + $timestamp = &Apache::lonlocal::locallocaltime($lasthash{'timestamp'}); + } my (%typeparts,%randombytry); my $showsurv = &Apache::lonnet::allowed('vas',$env{'request.course.id'}); @@ -2925,7 +2971,7 @@ sub get_last_submission { $string[0] = ''.&mt('Nothing submitted - no attempts.').''; } - return (\@string,\$timestamp); + return (\@string,$timestamp,$lastgradetime,$lastsubmittime); } #--- High light keywords, with style choosen by user. @@ -3760,8 +3806,8 @@ sub version_portfiles { $$record{$key} = join(',',@versioned_portfiles); push(@returned_keys,$key); } - } - return (@returned_keys); + } + return (@returned_keys); } sub get_next_version {