--- loncom/interface/lonnavmaps.pm 2011/01/13 19:14:16 1.455 +++ loncom/interface/lonnavmaps.pm 2011/05/22 14:55:30 1.460 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Navigate Maps Handler # -# $Id: lonnavmaps.pm,v 1.455 2011/01/13 19:14:16 www Exp $ +# $Id: lonnavmaps.pm,v 1.460 2011/05/22 14:55:30 foxr Exp $ # # Copyright Michigan State University Board of Trustees @@ -483,7 +483,7 @@ use POSIX qw (floor strftime); use Time::HiRes qw( gettimeofday tv_interval ); use LONCAPA; use DateTime(); - +use Data::Dumper; # symbolic constants sub SYMB { return 1; } sub URL { return 2; } @@ -651,7 +651,7 @@ sub getDescription { return &mt("Due")." " .&Apache::lonhtmlcommon::direct_parm_link(&timeToHumanString($due,'end'),$res->symb(),'duedate',$part); } } else { - return &Apache::lonhtmlcommon::direct_parm_line(&mt("Open, no due date"),$res->symb(),'duedate',$part); + return &Apache::lonhtmlcommon::direct_parm_link(&mt("Open, no due date"),$res->symb(),'duedate',$part); } } if ($status == $res->PAST_DUE_ANSWER_LATER) { @@ -945,10 +945,10 @@ sub render_resource { } if ($resource->randomout()) { - $nonLinkedText .= ' ('.&mt('hidden').') '; + $nonLinkedText .= ' ('.&mt('hidden').') '; } if (!$resource->condval()) { - $nonLinkedText .= ' ('.&mt('conditionally hidden').') '; + $nonLinkedText .= ' ('.&mt('conditionally hidden').') '; } if (($resource->is_practice()) && ($resource->is_raw_problem())) { $nonLinkedText .=' '.&mt('not graded').''; @@ -2399,7 +2399,7 @@ sub parmval { my $self = shift; my ($what,$symb,$recurse)=@_; my $hashkey = $what."|||".$symb; - + my $cache = $self->{PARM_CACHE}; if (defined($self->{PARM_CACHE}->{$hashkey})) { if (ref($self->{PARM_CACHE}->{$hashkey}) eq 'ARRAY') { if (defined($self->{PARM_CACHE}->{$hashkey}->[0])) { @@ -3743,9 +3743,7 @@ my %incomplete_hash = sub is_incomplete { my $self = shift; if ($self->is_problem()) { - &Apache::lonnet::logthis('is problem'); foreach my $part (@{$self->parts()}) { - &Apache::lonnet::logthis("$part status ".$self->status($part)); if (exists($incomplete_hash{$self->status($part)})) { return 1; } @@ -3930,7 +3928,17 @@ their code.) =over 4 -=item * B: +=item * B + +returns true if the current date is such that the +specified resource part is printable. + +=item * B + +Returns true if all parts in the resource are printable making the +entire resource printable. + +=item * B Get the Client IP/Name Access Control information. @@ -3983,6 +3991,73 @@ Get the weight for the problem. =cut +sub printable { + + &Apache::lonnet::logthis("Printable"); + my ($self, $part) = @_; + + # Get the print open/close dates for the resource. + + my $start = $self->parmval("prinstartdate", $part); + my $end = $self->parmval("printenddate", $part); + + # The following cases apply: + # - No dates set: Printable. + # - Start date set but no end date: Printable if now >= start date. + # - End date set but no start date: Printable if now <= end date. + # - both defined: printable if start <= now <= end + # + my $now = time(); + &Apache::lonnet::logthis("now: $now, Opens at $start Closes at $end"); + + my $startok = 1; + my $endok = 1; + + if ((defined $start) && ($start ne '')) { + &Apache::lonnet::logthis("checking start time."); + $startok = $start <= $now; + if (!$startok) { + &Apache::lonnet::logthis("Start date is after now"); + } + } + if ((defined $end) && ($end != '')) { + &Apache::lonnet::logthis("checkin end time"); + $endok = $end >= $now; + if (!$endok) { + &Apache::lonnet::logthis("End date is prior to now"); + } + } + if (!($startok && $endok)) { + &Apache::lonnet::logthis("Resource not printable due to open/close date"); + } + return $startok && $endok; +} + +sub resprintable { + my $self = shift; + + # get parts...or realize there are no parts. + + my $partsref = $self->parts(); + my @parts = @$partsref; + + if ((!defined(@parts)) || (scalar(@parts) == 0)) { + &Apache::lonnet::logthis("resprintable - no parts trying part 0"); + return $self->printable(0); + } else { + &Apache::lonnet::logthis("resprintable - have " . scalar(@parts) . " parts require all to be good"); + foreach my $part (@parts) { + if (!$self->printable($part)) { + &Apache::lonnet::logthis("resprintable - one of the parts failed date check"); + return 0; + } + } + &Apache::lonnet::logthis("resprintable - All parts passed date check"); + return 1; + } + &Apache::lonnet::logthis("resprintable - should not have gotten here?"); +} + sub acc { (my $self, my $part) = @_; my $acc = $self->parmval("acc", $part); @@ -4035,6 +4110,11 @@ sub checkedin { } } # this should work exactly like the copy in lonhomework.pm +# Why is there a copy in lonhomework? Why not centralized? +# +# TODO: Centralize duedate. +# + sub duedate { (my $self, my $part) = @_; my $date; @@ -4968,7 +5048,7 @@ sub check_for_slot { my $taskstatus = $self->taskstatus(); $is_correct = (($taskstatus eq 'pass') || ($self->solved() =~ /^correct_/)); - $got_grade = ($self->solved() =~ /^(?:pass|fail)$/); + $got_grade = ($taskstatus =~ /^(?:pass|fail)$/); } else { $got_grade = 1; $is_correct = ($self->solved() =~ /^correct_/);