version 1.575, 2025/05/27 23:31:49
|
version 1.576, 2025/06/28 14:34:46
|
Line 637 sub getDescription {
|
Line 637 sub getDescription {
|
|
|
my $open = $res->opendate($part); |
my $open = $res->opendate($part); |
my $due = $res->duedate($part); |
my $due = $res->duedate($part); |
|
my $overdue = $res->overduedate($part); |
my $answer = $res->answerdate($part); |
my $answer = $res->answerdate($part); |
|
|
if ($status == $res->NETWORK_FAILURE) { |
if ($status == $res->NETWORK_FAILURE) { |
Line 690 sub getDescription {
|
Line 691 sub getDescription {
|
} |
} |
if ($status == $res->OPEN) { |
if ($status == $res->OPEN) { |
if ($due) { |
if ($due) { |
if ($res->is_practice()) { |
my $now = time; |
return &mt("Closes [_1]",&Apache::lonhtmlcommon::direct_parm_link(&timeToHumanString($due,'start'),$res->symb(),'duedate',$part)).$slotinfo; |
if (($now >= $due) && ($overdue) && ($now < $overdue)) { |
} else { |
if ($res->is_practice()) { |
return &mt("Due [_1]",&Apache::lonhtmlcommon::direct_parm_link(&timeToHumanString($due,'end'),$res->symb(),'duedate',$part)).$slotinfo; |
return &mt("Closes [_1]",&Apache::lonhtmlcommon::direct_parm_link(&timeToHumanString($overdue,'start'),$res->symb(),'duedate',$part)).$slotinfo; |
} |
} else { |
|
return &mt("Grace period ends [_1]",&Apache::lonhtmlcommon::direct_parm_link(&timeToHumanString($overdue,'end'),$res->symb(),'grace',$part)).$slotinfo; |
|
} |
|
} else { |
|
if ($res->is_practice()) { |
|
return &mt("Closes [_1]",&Apache::lonhtmlcommon::direct_parm_link(&timeToHumanString($due,'start'),$res->symb(),'duedate',$part)).$slotinfo; |
|
} else { |
|
return &mt("Due [_1]",&Apache::lonhtmlcommon::direct_parm_link(&timeToHumanString($due,'end'),$res->symb(),'duedate',$part)).$slotinfo; |
|
} |
|
} |
} else { |
} else { |
return &Apache::lonhtmlcommon::direct_parm_link(&mt("Open, no due date"),$res->symb(),'duedate',$part).$slotinfo; |
return &Apache::lonhtmlcommon::direct_parm_link(&mt("Open, no due date"),$res->symb(),'duedate',$part).$slotinfo; |
} |
} |
Line 5177 sub awarded {
|
Line 5187 sub awarded {
|
if (!defined($part)) { $part = '0'; } |
if (!defined($part)) { $part = '0'; } |
return $self->{NAV_MAP}->{STUDENT_DATA}->{$self->{SYMB}}->{'resource.'.$part.'.awarded'}; |
return $self->{NAV_MAP}->{STUDENT_DATA}->{$self->{SYMB}}->{'resource.'.$part.'.awarded'}; |
} |
} |
|
sub latefrac { |
|
my $self = shift; my $part = shift; |
|
$self->{NAV_MAP}->get_user_data(); |
|
if (!defined($part)) { $part = '0'; } |
|
return $self->{NAV_MAP}->{STUDENT_DATA}->{$self->{SYMB}}->{'resource.'.$part.'.latefrac'}; |
|
} |
sub taskversion { |
sub taskversion { |
my $self = shift; my $part = shift; |
my $self = shift; my $part = shift; |
$self->{NAV_MAP}->get_user_data(); |
$self->{NAV_MAP}->get_user_data(); |
Line 5266 sub opendate {
|
Line 5282 sub opendate {
|
} |
} |
return $opendate; |
return $opendate; |
} |
} |
|
sub overduedate { |
|
my ($self,$part) = @_; |
|
my $duedate = $self->parmval("duedate", $part); |
|
my $overduedate; |
|
if ($duedate) { |
|
my $grace = $self->parmval("grace", $part); |
|
if ($grace) { |
|
my $grace_end = (split(/,/,$grace))[-1]; |
|
my ($offset) = split(/:/,$grace_end,2); |
|
if ($offset > 0) { |
|
$overduedate = $offset + $duedate; |
|
} |
|
} |
|
} |
|
return $overduedate; |
|
} |
|
sub partial_credit_overdue { |
|
my ($self,$part) = @_; |
|
my $reduction; |
|
my $duedate = $self->parmval("duedate", $part); |
|
if ($duedate) { |
|
my $grace = $self->parmval("grace",$part); |
|
if ($grace) { |
|
my $lateness = time - $duedate; |
|
if ($lateness > 0) { |
|
my ($start,$end,$startfrac,$endfrac,$usegrad); |
|
$start = 0; |
|
$startfrac = 1.0; |
|
$usegrad = 0; |
|
foreach my $item (split(/,/,$grace)) { |
|
my ($offset,$frac,$grad) = split(/:/,$item); |
|
if ($lateness > $offset) { |
|
$start = $offset; |
|
$startfrac = $frac; |
|
next; |
|
} elsif ($lateness <= $offset) { |
|
$end = $offset; |
|
$endfrac = $frac; |
|
$usegrad = $grad; |
|
last; |
|
} |
|
} |
|
if ($end) { |
|
if (($end == $start) || ($startfrac == $endfrac)) { |
|
$reduction = $endfrac; |
|
} elsif ($end - $start > 0) { |
|
if (($endfrac <= 1.0) && ($endfrac >= 0)) { |
|
$reduction = $endfrac; |
|
if ($usegrad) { |
|
my $decline = $startfrac - $endfrac; |
|
my $fraction = ($lateness - $start)/($end - $start); |
|
if (($fraction <= 1) && ($fraction >= 0)) { |
|
my $value = $startfrac - ($decline*$fraction); |
|
$reduction = sprintf("%.2f", $value); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
return $reduction; |
|
} |
|
|
sub problemstatus { |
sub problemstatus { |
(my $self, my $part) = @_; |
(my $self, my $part) = @_; |
my $problemstatus = $self->parmval("problemstatus", $part); |
my $problemstatus = $self->parmval("problemstatus", $part); |
Line 5844 sub getDateStatus {
|
Line 5925 sub getDateStatus {
|
|
|
my $open = $self->opendate($part); |
my $open = $self->opendate($part); |
my $due = $self->duedate($part); |
my $due = $self->duedate($part); |
|
my $overdue = $self->overduedate($part); |
my $answer = $self->answerdate($part); |
my $answer = $self->answerdate($part); |
|
|
if (!$open && !$due && !$answer) { |
if (!$open && !$due && !$answer) { |
Line 5853 sub getDateStatus {
|
Line 5935 sub getDateStatus {
|
} |
} |
if (!$open || $now < $open) {return $self->OPEN_LATER} |
if (!$open || $now < $open) {return $self->OPEN_LATER} |
if (!$due || $now < $due) {return $self->OPEN} |
if (!$due || $now < $due) {return $self->OPEN} |
|
if ($overdue && $now < $overdue) {return $self->OPEN} |
if ($answer && $now < $answer) {return $self->PAST_DUE_ANSWER_LATER} |
if ($answer && $now < $answer) {return $self->PAST_DUE_ANSWER_LATER} |
if ($answer) { return $self->ANSWER_OPEN; } |
if ($answer) { return $self->ANSWER_OPEN; } |
return PAST_DUE_NO_ANSWER; |
return PAST_DUE_NO_ANSWER; |
Line 6121 sub status {
|
Line 6204 sub status {
|
# If there's an answer date and we're past it, don't |
# If there's an answer date and we're past it, don't |
# suppress the feedback; student should know |
# suppress the feedback; student should know |
if ($self->duedate($part) && $self->duedate($part) < time() && |
if ($self->duedate($part) && $self->duedate($part) < time() && |
|
(!$self->overduedate($part) || $self->overduedate($part) < time()) && |
$self->answerdate($part) && $self->answerdate($part) < time()) { |
$self->answerdate($part) && $self->answerdate($part) < time()) { |
$suppressFeedback = 0; |
$suppressFeedback = 0; |
} |
} |