--- loncom/interface/lonnavmaps.pm 2025/06/28 14:34:46 1.576 +++ loncom/interface/lonnavmaps.pm 2025/06/28 17:34:00 1.577 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Navigate Maps Handler # -# $Id: lonnavmaps.pm,v 1.576 2025/06/28 14:34:46 raeburn Exp $ +# $Id: lonnavmaps.pm,v 1.577 2025/06/28 17:34:00 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -425,6 +425,11 @@ Convenience function, so others can use Convenience function, so others can use it: Is there only one try remaining for the part, with more than one try to begin with, not due yet and still can be done? +=item graceEndsUnder24Hours() + +Convenience function, so others can use it: Is the problem past-due with a grace period +which ends in less than 24 hours, and still can be done? + =item advancedUser() This puts a human-readable name on the env variable. @@ -759,8 +764,14 @@ sub getDescription { } } if ($due) { - return &mt("Due [_1]",&Apache::lonhtmlcommon::direct_parm_link(&timeToHumanString($due,'end'),$res->symb(),'duedate',$part)) . - " $triesString"; + my $now = time; + if (($now >= $due) && ($overdue) && ($now < $overdue)) { + return &mt("Grace period ends [_1]",&Apache::lonhtmlcommon::direct_parm_link(&timeToHumanString($overdue,'end'),$res->symb(),'grace',$part)). + " $triesString"; + } else { + return &mt("Due [_1]",&Apache::lonhtmlcommon::direct_parm_link(&timeToHumanString($due,'end'),$res->symb(),'duedate',$part)) . + " $triesString"; + } } else { return &Apache::lonhtmlcommon::direct_parm_link(&mt("No due date"),$res->symb(),'duedate',$part)." $triesString"; } @@ -794,6 +805,19 @@ sub lastTry { $res->duedate($part) > time(); } +sub graceEndsUnder24Hours { + my $res = shift; + my $part = shift; + my $status = $res->status($part); + my $now = time(); + + return ($status == $res->OPEN() || + $status == $res->TRIES_LEFT()) && + $res->duedate($part) && $res->duedate($part) < $now && + $res->overduedate($part) && $res->overduedate($part) < time()+(24*60*60) && + $res->duedate($part) && $res->duedate($part) < $now+(24*60*60) && + $res->overduedate($part) > $now; +} sub advancedUser { return $env{'request.role.adv'}; @@ -1264,6 +1288,9 @@ sub render_long_status { if (dueInLessThan24Hours($resource, $part)) { $color = $hurryUpColor; $info = ' title="'.&mt('Due in less than 24 hours!').'"'; + } elsif (graceEndsUnder24Hours($resource, $part)) { + $color = $hurryUpColor; + $info = ' title="'.&mt('Grace period ends in less than 24 hours!').'"'; } elsif (lastTry($resource, $part)) { unless (($resource->problemstatus($part) eq 'no') || ($resource->problemstatus($part) eq 'no_feedback_ever')) {