--- loncom/interface/lonnavmaps.pm 2007/11/20 00:26:17 1.405 +++ loncom/interface/lonnavmaps.pm 2008/02/03 00:05:23 1.412 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Navigate Maps Handler # -# $Id: lonnavmaps.pm,v 1.405 2007/11/20 00:26:17 albertel Exp $ +# $Id: lonnavmaps.pm,v 1.412 2008/02/03 00:05:23 www 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"; @@ -850,7 +854,10 @@ sub render_resource { if (!$resource->condval()) { $nonLinkedText .= ' ('.&mt('conditionally hidden').') '; } - + if ($resource->is_practice()) { + $nonLinkedText .=' '.&mt('not graded').''; + } + # We're done preparing and finally ready to start the rendering my $result = ""; @@ -2295,17 +2302,22 @@ sub parmval { my $hashkey = $what."|||".$symb; if (defined($self->{PARM_CACHE}->{$hashkey})) { - if (wantarray) { - return @{$self->{PARM_CACHE}->{$hashkey}}; - } else { - return $self->{PARM_CACHE}->{$hashkey}->[0]; - } + if (ref($self->{PARM_CACHE}->{$hashkey}) eq 'ARRAY') { + if (defined($self->{PARM_CACHE}->{$hashkey}->[0])) { + if (wantarray) { + return @{$self->{PARM_CACHE}->{$hashkey}}; + } else { + return $self->{PARM_CACHE}->{$hashkey}->[0]; + } + } + } else { + return $self->{PARM_CACHE}->{$hashkey}; + } } - my $result = $self->parmval_real($what, $symb, $recurse); $self->{PARM_CACHE}->{$hashkey} = $result; if (wantarray) { - return @{$result}; + return @{$result}; } return $result->[0]; } @@ -3436,11 +3448,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 +3575,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 +3599,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 +3638,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 +3815,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; @@ -3819,12 +3839,13 @@ sub awarded { sub duedate { (my $self, my $part) = @_; my $date; - my $interval=$self->parmval("interval", $part); + my @interval=$self->parmval("interval", $part); my $due_date=$self->parmval("duedate", $part); - if ($interval =~ /\d+/) { - my $first_access=&Apache::lonnet::get_first_access('map',$self->symb); + if ($interval[0] =~ /\d+/) { + my $first_access=&Apache::lonnet::get_first_access($interval[1], + $self->symb); if (defined($first_access)) { - $interval = $first_access+$interval; + my $interval = $first_access+$interval[0]; $date = (!$due_date || $interval < $due_date) ? $interval : $due_date; } else { @@ -3840,39 +3861,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';} @@ -3880,15 +3908,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(); @@ -4562,7 +4592,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() &&