--- loncom/homework/lonhomework.pm 2006/05/12 03:46:54 1.246 +++ loncom/homework/lonhomework.pm 2006/05/15 19:29:17 1.247 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Homework handler # -# $Id: lonhomework.pm,v 1.246 2006/05/12 03:46:54 albertel Exp $ +# $Id: lonhomework.pm,v 1.247 2006/05/15 19:29:17 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -383,7 +383,12 @@ sub check_access { foreach my $temp ("opendate","duedate","answerdate") { $lastdate = $date; - $date = &Apache::lonnet::EXT("resource.$id.$temp"); + if ($temp eq 'duedate') { + $date = &due_date($id); + } else { + $date = &Apache::lonnet::EXT("resource.$id.$temp"); + } + my $thistype = &Apache::lonnet::EXT("resource.$id.$temp.type"); if ($thistype =~ /^(con_lost|no_such_host)/ || $date =~ /^(con_lost|no_such_host)/) { @@ -451,18 +456,12 @@ sub check_access { &Apache::lonxml::debug("looking for accesstime $first_access"); if (!$first_access) { $status='NOT_YET_VIEWED'; - $datemsg=&seconds_to_human_length($interval); - } else { - my $newdate=localtime($first_access+$interval); - if (time > ($first_access+$interval)) { - $status='CLOSED'; - $datemsg = &mt("was due on")." $newdate".&mt(", and answers will be available on")." $date"; - } else { - $datemsg = &mt("is due at")." $newdate"; - } + my $due_date = &due_date($id); + $datemsg=&seconds_to_human_length($due_date-time); } } } + #if (($status ne 'CLOSED') && ($Apache::lonhomework::type eq 'exam') && # (!$Apache::lonhomework::history{"resource.0.outtoken"})) { # return ('UNCHECKEDOUT','needs to be checked out'); @@ -478,17 +477,24 @@ sub check_access { return ($status,$datemsg); } - +# this should work exactly like the copy in lonnavmaps.pm sub due_date { my ($part_id,$symb)=@_; my $date; my $interval= &Apache::lonnet::EXT("resource.$part_id.interval",$symb); - if ($interval) { + &Apache::lonxml::debug("looking for interval $part_id $symb $interval"); + my $due_date= &Apache::lonnet::EXT("resource.$part_id.duedate",$symb); + &Apache::lonxml::debug("looking for due_date $part_id $symb $due_date"); + if (defined($interval)) { my $first_access=&Apache::lonnet::get_first_access('map',$symb); - if ($first_access) { $date = $first_access+$interval; } - } - if (!defined($date)) { - $date = &Apache::lonnet::EXT("resource.$part_id.duedate",$symb); + if (defined($first_access)) { + $interval = $first_access+$interval; + $date = ($interval < $due_date)? $interval : $due_date; + } else { + $date = $due_date; + } + } else { + $date = $due_date; } return $date }