Diff for /loncom/homework/lonhomework.pm between versions 1.393 and 1.395

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);
         }          }

Removed from v.1.393  
changed lines
  Added in v.1.395


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>