--- loncom/interface/lonnavmaps.pm 2007/11/20 17:53:46 1.406 +++ loncom/interface/lonnavmaps.pm 2008/01/20 01:52:47 1.410 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Navigate Maps Handler # -# $Id: lonnavmaps.pm,v 1.406 2007/11/20 17:53:46 albertel Exp $ +# $Id: lonnavmaps.pm,v 1.410 2008/01/20 01:52:47 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -187,6 +187,10 @@ sub getDescription { my $part = shift; my $status = $res->status($part); + my $open = $res->opendate($part); + my $due = $res->duedate($part); + my $answer = $res->answerdate($part); + if ($status == $res->NETWORK_FAILURE) { return &mt("Having technical difficulties; please check status later"); } @@ -194,27 +198,27 @@ sub getDescription { return &mt("Not currently assigned."); } if ($status == $res->OPEN_LATER) { - return "Open " . timeToHumanString($res->opendate($part),'start'); + return "Open " .timeToHumanString($open,'start'); } if ($status == $res->OPEN) { - if ($res->duedate($part)) { + if ($due) { if ($res->is_practice()) { - return &mt("Closes ")." " .timeToHumanString($res->duedate($part),'start'); + return &mt("Closes ")." " .timeToHumanString($due,'start'); } else { - return &mt("Due")." " .timeToHumanString($res->duedate($part),'end'); + return &mt("Due")." " .timeToHumanString($due,'end'); } } else { return &mt("Open, no due date"); } } if ($status == $res->PAST_DUE_ANSWER_LATER) { - return &mt("Answer open")." " . timeToHumanString($res->answerdate($part),'start'); + return &mt("Answer open")." " .timeToHumanString($answer,'start'); } if ($status == $res->PAST_DUE_NO_ANSWER) { if ($res->is_practice()) { - return &mt("Closed")." " . timeToHumanString($res->duedate($part),'start'); + return &mt("Closed")." " . timeToHumanString($due,'start'); } else { - return &mt("Was due")." " . timeToHumanString($res->duedate($part),'end'); + return &mt("Was due")." " . timeToHumanString($due,'end'); } } if (($status == $res->ANSWER_OPEN || $status == $res->PARTIALLY_CORRECT) @@ -237,8 +241,8 @@ sub getDescription { $triesString = "$triesString"; } } - if ($res->duedate($part)) { - return &mt("Due")." " . timeToHumanString($res->duedate($part),'end') . + if ($due) { + return &mt("Due")." " . timeToHumanString($due,'end') . " $triesString"; } else { return &mt("No due date")." $triesString"; @@ -3436,11 +3440,13 @@ sub kind { my $self=shift; return $self- sub randomout { my $self=shift; return $self->navHash("randomout_", 1); } sub randompick { my $self = shift; - return $self->parmval('randompick'); + my $randompick = $self->parmval('randompick'); + return $randompick; } sub randomorder { my $self = shift; - return ($self->parmval('randomorder') =~ /^yes$/i); + my $randomorder = $self->parmval('randomorder'); + return ($randomorder =~ /^yes$/i); } sub link { my $self=shift; @@ -3561,7 +3567,8 @@ sub retrieveResources { sub is_exam { my ($self,$part) = @_; - if ($self->parmval('type',$part) eq 'exam') { + my $type = $self->parmval('type',$part); + if ($type eq 'exam') { return 1; } if ($self->src() =~ /\.(exam)$/) { @@ -3584,7 +3591,8 @@ sub is_page { sub is_practice { my $self=shift; my ($part) = @_; - if ($self->parmval('type',$part) eq 'practice') { + my $type = $self->parmval('type',$part); + if ($type eq 'practice') { return 1; } return 0; @@ -3622,7 +3630,8 @@ sub is_sequence { sub is_survey { my $self = shift(); my $part = shift(); - if ($self->parmval('type',$part) eq 'survey') { + my $type = $self->parmval('type',$part); + if ($type eq 'survey') { return 1; } if ($self->src() =~ /\.(survey)$/) { @@ -3798,16 +3807,19 @@ Get the weight for the problem. sub acc { (my $self, my $part) = @_; - return $self->parmval("acc", $part); + my $acc = $self->parmval("acc", $part); + return $acc; } sub answerdate { (my $self, my $part) = @_; # Handle intervals - if ($self->parmval("answerdate.type", $part) eq 'date_interval') { - return $self->duedate($part) + - $self->parmval("answerdate", $part); + my $answerdatetype = $self->parmval("answerdate.type", $part); + my $answerdate = $self->parmval("answerdate", $part); + my $duedate = $self->parmval("duedate", $part); + if ($answerdatetype eq 'date_interval') { + $answerdate = $duedate + $answerdate; } - return $self->parmval("answerdate", $part); + return $answerdate; } sub awarded { my $self = shift; my $part = shift; @@ -3841,39 +3853,46 @@ sub handgrade { my @response_ids = $self->responseIds($part); if (@response_ids) { foreach my $response_id (@response_ids) { - if (lc($self->parmval("handgrade",$part.'_'.$response_id)) - eq 'yes') { + my $handgrade = $self->parmval("handgrade",$part.'_'.$response_id); + if (lc($handgrade) eq 'yes') { return 'yes'; } } } - return $self->parmval("handgrade", $part); + my $handgrade = $self->parmval("handgrade", $part); + return $handgrade; } sub maxtries { (my $self, my $part) = @_; - return $self->parmval("maxtries", $part); + my $maxtries = $self->parmval("maxtries", $part); + return $maxtries; } sub opendate { (my $self, my $part) = @_; - if ($self->parmval("opendate.type", $part) eq 'date_interval') { - return $self->duedate($part) - - $self->parmval("opendate", $part); + my $opendatetype = $self->parmval("opendate.type", $part); + my $opendate = $self->parmval("opendate", $part); + if ($opendatetype eq 'date_interval') { + my $duedate = $self->duedate($part); + $opendate = $duedate - $opendate; } - return $self->parmval("opendate"); + return $opendate; } sub problemstatus { (my $self, my $part) = @_; - return lc $self->parmval("problemstatus", $part); + my $problemstatus = $self->parmval("problemstatus", $part); + return lc($problemstatus); } sub sig { (my $self, my $part) = @_; - return $self->parmval("sig", $part); + my $sig = $self->parmval("sig", $part); + return $sig; } sub tol { (my $self, my $part) = @_; - return $self->parmval("tol", $part); + my $tol = $self->parmval("tol", $part); + return $tol; } -sub tries { +sub tries { my $self = shift; my $tries = $self->queryRestoreHash('tries', shift); if (!defined($tries)) { return '0';} @@ -3881,15 +3900,17 @@ sub tries { } sub type { (my $self, my $part) = @_; - return $self->parmval("type", $part); + my $type = $self->parmval("type", $part); + return $type; } sub weight { my $self = shift; my $part = shift; if (!defined($part)) { $part = '0'; } - return &Apache::lonnet::EXT('resource.'.$part.'.weight', - $self->symb(), $env{'user.domain'}, - $env{'user.name'}, - $env{'request.course.sec'}); + my $weight = &Apache::lonnet::EXT('resource.'.$part.'.weight', + $self->symb(), $env{'user.domain'}, + $env{'user.name'}, + $env{'request.course.sec'}); + return $weight; } sub part_display { my $self= shift(); my $partID = shift(); @@ -4563,7 +4584,11 @@ sub status { #if ($self->{RESOURCE_ERROR}) { return NETWORK_FAILURE; } if ($completionStatus == NETWORK_FAILURE) { return NETWORK_FAILURE; } - my $suppressFeedback = $self->problemstatus($part) eq 'no'; + my $suppressFeedback = 0; + if (($self->problemstatus($part) eq 'no') || + ($self->problemstatus($part) eq 'no_feedback_ever')) { + $suppressFeedback = 1; + } # If there's an answer date and we're past it, don't # suppress the feedback; student should know if ($self->duedate($part) && $self->duedate($part) < time() &&