--- loncom/interface/lonnavmaps.pm 2015/04/13 16:46:43 1.506 +++ loncom/interface/lonnavmaps.pm 2015/04/15 18:56:15 1.507 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Navigate Maps Handler # -# $Id: lonnavmaps.pm,v 1.506 2015/04/13 16:46:43 raeburn Exp $ +# $Id: lonnavmaps.pm,v 1.507 2015/04/15 18:56:15 raeburn Exp $ # # Copyright Michigan State University Board of Trustees @@ -5622,6 +5622,39 @@ sub completable { return 0; } +=pod + +B + +The answerable method differs from the completable method in its handling of problem parts +for which feedback on correctness is suppressed, but the student still has tries left, and +the problem part is not past due, (i.e., the student could submit a different answer if +he/she so chose). For that case completable will return 0, whereas answerable will return 1. + +=cut + +sub answerable { + my $self = shift; + if (!$self->is_problem()) { return 0; } + my $partCount = $self->countParts(); + foreach my $part (@{$self->parts()}) { + if ($part eq '0' && $partCount != 1) { next; } + my $status = $self->status($part); + if ($self->getCompletionStatus($part) == ATTEMPTED() || + $self->getCompletionStatus($part) == CREDIT_ATTEMPTED() || + $status == ANSWER_SUBMITTED() ) { + if ($self->tries($part) < $self->maxtries($part) || !$self->maxtries($part)) { + return 1; + } + } + if ($status == OPEN() || $status == TRIES_LEFT() || $status == NETWORK_FAILURE()) { + return 1; + } + } + # None of the parts were answerable, so neither is this problem. + return 0; +} + =pod =head2 Resource/Nav Map Navigation