--- loncom/interface/lonnavmaps.pm 2003/04/19 20:47:41 1.177 +++ loncom/interface/lonnavmaps.pm 2003/04/24 18:18:38 1.181 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Navigate Maps Handler # -# $Id: lonnavmaps.pm,v 1.177 2003/04/19 20:47:41 www Exp $ +# $Id: lonnavmaps.pm,v 1.181 2003/04/24 18:18:38 bowersj2 Exp $ # # Copyright Michigan State University Board of Trustees # @@ -169,30 +169,34 @@ sub real_handler { return OK; } - # See if there's only one map in the top-level... if so, - # automatically display it - my $iterator = $navmap->getIterator(undef, undef, undef, 0); - my $depth = 1; - $iterator->next(); - my $curRes = $iterator->next(); - my $sequenceCount = 0; - my $sequenceId; - while ($depth > 0) { - if ($curRes == $iterator->BEGIN_MAP()) { $depth++; } - if ($curRes == $iterator->END_MAP()) { $depth--; } - - if (ref($curRes) && $curRes->is_sequence()) { - $sequenceCount++; - $sequenceId = $curRes->map_pc(); + # See if there's only one map in the top-level, if we don't + # already have a filter... if so, automatically display it + if ($ENV{QUERY_STRING} !~ /filter/) { + my $iterator = $navmap->getIterator(undef, undef, undef, 0); + my $depth = 1; + $iterator->next(); + my $curRes = $iterator->next(); + my $sequenceCount = 0; + my $sequenceId; + while ($depth > 0) { + if ($curRes == $iterator->BEGIN_MAP()) { $depth++; } + if ($curRes == $iterator->END_MAP()) { $depth--; } + + if (ref($curRes) && $curRes->is_sequence()) { + $sequenceCount++; + $sequenceId = $curRes->map_pc(); + } + + $curRes = $iterator->next(); + } + + if ($sequenceCount == 1) { + # The automatic iterator creation in the render call + # will pick this up. We know the condition because + # the defined($ENV{'form.filter'}) also ensures this + # is a fresh call. + $ENV{'form.filter'} = "$sequenceId"; } - - $curRes = $iterator->next(); - } - - if ($sequenceCount == 1) { - # The automatic iterator creation in the render call - # will pick this up. - $ENV{'form.filter'} = "$sequenceId"; } # renderer call @@ -3074,6 +3078,8 @@ sub extractParts { $self->{PARTS} = []; + my %parts; + # Retrieve part count, if this is a problem if ($self->is_problem()) { my $metadata = &Apache::lonnet::metadata($self->src(), 'packages'); @@ -3085,15 +3091,21 @@ sub extractParts { foreach (split(/\,/,$metadata)) { if ($_ =~ /^part_(.*)$/) { my $part = $1; + # This floods the logs + #if (defined($parts{$part})) { + # Apache::lonnet::logthis("$part multiply defined in metadata for " . $self->symb()); + # } + # check to see if part is turned off. - if (! Apache::loncommon::check_if_partid_hidden($part, $self->symb())) { - push @{$self->{PARTS}}, $1; + + if (!Apache::loncommon::check_if_partid_hidden($part, $self->symb())) { + $parts{$part} = 1; } } } - my @sortedParts = sort @{$self->{PARTS}}; + my @sortedParts = sort keys %parts; $self->{PARTS} = \@sortedParts; }