version 1.393, 2025/01/05 22:42:44
|
version 1.395, 2025/06/28 14:35:00
|
Line 600 sub check_access {
|
Line 600 sub check_access {
|
return ('SHOW_ANSWER'); |
return ('SHOW_ANSWER'); |
} |
} |
} |
} |
foreach my $temp ("opendate","duedate","answerdate") { |
foreach my $temp ("opendate","duedate","overduedate","answerdate") { |
$lastdate = $date; |
$lastdate = $date; |
if ($temp eq 'duedate') { |
if ($temp eq 'duedate') { |
$date = &due_date($id,$symb); |
$date = &due_date($id,$symb); |
|
} elsif ($temp eq 'overduedate') { |
|
$date = &overdue_date($id,$symb); |
} else { |
} else { |
$date = &Apache::lonnet::EXT("resource.$id.$temp",$symb); |
$date = &Apache::lonnet::EXT("resource.$id.$temp",$symb); |
} |
} |
Line 644 sub check_access {
|
Line 646 sub check_access {
|
} elsif ($type eq 'duedate') { |
} elsif ($type eq 'duedate') { |
$status='CAN_ANSWER'; |
$status='CAN_ANSWER'; |
$datemsg = &mt('is due at [_1]',$date); |
$datemsg = &mt('is due at [_1]',$date); |
|
} elsif ($type eq 'overduedate') { |
|
$status='CAN_ANSWER'; |
|
$datemsg = &mt('past-due grace period until [_1]',$date); |
} elsif ($type eq 'answerdate') { |
} elsif ($type eq 'answerdate') { |
$status='CLOSED'; |
$status='CLOSED'; |
$datemsg = &mt('was due on [_1], and answers will be available on [_2]', |
$datemsg = &mt('was due on [_1], and answers will be available on [_2]', |
Line 734 sub due_date {
|
Line 739 sub due_date {
|
return $date; |
return $date; |
} |
} |
|
|
|
sub overdue_date { |
|
my ($part_id,$symb,$udom,$uname)=@_; |
|
my $date; |
|
my $duedate= &Apache::lonnet::EXT("resource.$part_id.duedate",$symb, |
|
$udom,$uname); |
|
if ($duedate ne '') { |
|
my $grace = &Apache::lonnet::EXT("resource.$part_id.grace",$symb, |
|
$udom,$uname); |
|
if ($grace) { |
|
my $grace_end = (split(/,/,$grace))[-1]; |
|
my ($offset) = split(/:/,$grace_end,2); |
|
if ($offset > 0) { |
|
$date = $offset + $duedate; |
|
} |
|
} |
|
} |
|
return $date; |
|
} |
|
|
|
sub partial_credit_overdue { |
|
my ($part_id,$symb,$udom,$uname)=@_; |
|
my $reduction; |
|
my $duedate = &Apache::lonnet::EXT("resource.$part_id.duedate",$symb, |
|
$udom,$uname); |
|
if ($duedate) { |
|
my $grace = &Apache::lonnet::EXT("resource.$part_id.grace",$symb, |
|
$udom,$uname); |
|
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 seconds_to_human_length { |
sub seconds_to_human_length { |
my ($length)=@_; |
my ($length)=@_; |
|
|
Line 2133 sub get_lti_score {
|
Line 2208 sub get_lti_score {
|
my $iterator; |
my $iterator; |
if ($mapurl ne '') { |
if ($mapurl ne '') { |
my $map = $navmap->getResourceByUrl($mapurl); |
my $map = $navmap->getResourceByUrl($mapurl); |
my $firstres = $map->map_start(); |
if (ref($map)) { |
my $finishres = $map->map_finish(); |
my $firstres = $map->map_start(); |
my $recursive = 1; |
my $finishres = $map->map_finish(); |
if ($pbscope eq 'nonrec') { |
my $recursive = 1; |
$recursive = 0; |
if ($pbscope eq 'nonrec') { |
|
$recursive = 0; |
|
} |
|
$iterator = $navmap->getIterator($firstres,$finishres,undef,$recursive); |
} |
} |
$iterator = $navmap->getIterator($firstres,$finishres,undef,$recursive); |
|
} else { |
} else { |
$iterator = $navmap->getIterator(undef,undef,undef,1); |
$iterator = $navmap->getIterator(undef,undef,undef,1); |
} |
} |